先说问题,论坛老问题,程序下不进去,有可能是D10的问题,感觉还是电路设计的不好,用USB转232一点问题没有,照片都准备好了,一点一点贴。
板载USB转串口下载及其不好用,经常出现串口号丢失的问题。于是利用STC15F104E 8脚芯片制作了一个自动下载配件。
对目标单片机进行冷启动,实现断电、再上电,可以用三极管作为电子开关实现。必须注意到的是,三极管的最大可通过电流不要小于单片机电路的所需电流。如果三极管仅作为单片机供电的开关,由于STC89系列单片机的正常丁作模式功耗为2~7 mA,90系列三极管通常情况下可以满足需求。但在某些情况下,单片机的串口上电后会给单片机供电,使单片机各引脚电平处于不确定的状态,因而必须对目标电路板整体进行冷启动,三极管必须满足目标电路板的总电流需求。由于三极管8550的最大可通过电流为1.5 A,可以满足绝大多数电路的供电需求。所以选择三极管8550连接到目标单片机STC89C52RC的VCC脚,作为对其冷启动的开关。
/********************************************************************************/
视频可能需要上传,可能要审核得等几天,先传一张照片
——回复可见内容——
DS18B20:
正确的接线方法:左负右正,一旦接反就会立刻发热,有可能烧毁!接反是导致该传感器总是显示85℃的原因。面对着扁平的那一面,左负右正。
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢
型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
经过单线接口访问 DS1820 的协议 如下~~
首先,我们对18B20进行操作,我们要对其初始化,
初始化:单线总线上的所有处理均从初始化序列开始 初始化序列包括总线主机发出一复位脉冲 接着
初始化子程序:
ROM操作命令:
写操作:
写数据子程序
WriteOneChar(unsigned char dat) //unsigned char dat 定义存控制命令;以下对命令操作
unsigned char i=0;
for(i=8;i>0;i--) //因为写一个字节 ,所以要循环八次
{
DQ=1; //置高电平
DQ=dat&0x01; //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0。
void ReadOneChar() //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
DQ=1; //将总线拉高 产生读时间隙
1. 初始化
2. ROM 操作命令
3. 存贮器操作命令
4. 处理/数据
由从属器件送出存在脉冲
Init_DS18B20(void)
{
unsigned char x=0;定义一个变量判断是否初始化程序
DQ=1; //DQ先置高
delay(8); //稍延时
DQ=0; //发送复位脉冲
delay(80); //延时(>480us)
DQ=1; //拉高数据线
delay(5); //等待(15~60us)
x=DQ; //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1
delay(20);
}
当主机总线 t o 时刻从高拉至低电平时 就产生写时间隙 见图
从 to 时刻开始 15us 之内应将所需写的位送到总线上 DSl820 在 t 后15-60us间对总线
采样 若低电平 写入的位是 0 见图 2 25 3 若高电平 写入的位是 1 见图 2 25 4
连续写 2 位间的间隙应大于 1us 即必须有1us以上的高电平恢复期。
{
_nop_(); //在开始另一个写周期前必须有1us以上的高电平恢复期。
DQ=0; //进入写开始
_nop_();
delay(5); //向1-Wire总线写1bit至少需要60μs
dat>>=1; //因为写数据是从低位到高位,高位逐位的往右移
}
}
读操作
见图2 25 5 主机总线 to 时刻从高拉至低电平时 总线只须保持低电平 l 7ts 之后
在 t1 时刻将总线拉高 产生读时间隙 读时间隙在 t1 时刻后 t 2 时刻前有效 t z 距 to 为15
捍 s 也就是说 t z 时刻前主机必须完成读位 并在 t o 后的60尸 s 一 120 fzs 内释放总线
读位子程序(读得的位到 C 中)
{
unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0; //首先初始化dat
for (i=8;i>0;i--) //一个字节有8位 ,所以循环八次
{
DQ=1;
delay(1);
DQ=0; //从高拉至低电平时 总线只须保持低电平 l 7ts
dat>>=1; // 读出来的数据要一位一位的移进去
_nop_();
if(DQ) //判断DQ是1还是0
dat|=0x80; //是1的话dat就高位1或,因为读数据是从低位读取 delay(4);
}
return(dat); //返回读出来的一个字节数据
}
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |