CAN总线温度控制节点设计

发布时间 : 星期日 文章CAN总线温度控制节点设计更新完毕开始阅读

图2-3 初始化时序图 程序如下: void ds1820rst()

{

unsigned char x=0;

DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低

delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40);

}

(2)ds18b20写数据

对于DS18B20的读时序分为读0时序和读1时序两个过程。 1.先将数据线置低电平0。 2.延时确定的时间为15us。

3.按从低位到高位的顺序发送数据(一次只发送一位)。 4.延时时间为45us。

5.将数据线拉到高电平1。

6.重复1~5步骤,直到发送完整个字节。 7.最后将数据线拉到高电平1。

ds18b20写数据时序图见图2-4

图2-4 写数据时序图

程序如下:

void ds1820wr(unchar wdata) //写数据 {

6

unsigned char i=0; for (i=8; i>0; i--) {

DQ = 0; //拉低单总线DQ DQ = wdata&0x01; //从低位到高位的顺序发送数据(每次一位) delay_18B20(10); //延时一段时间 DQ = 1; //释放单总线

wdata>>=1; //右移一位,传下一位数据 } }

(3)ds18b20读数据

对于DS18B20的写时序分为写0时序和写1时序两个过程。 1.将数据线拉高到1。 2.延时2us。

3.将数据线拉低到0。 4.延时6us。

5.将数据线拉高到1。 6.延时4us。

7.读数据线的状态得到一个状态位,并进行数据处理。 8.延时30us。

9.重复1~7步骤,直到读取完一个字节。

ds18b20读数据时序图见图2-5

图2-5 读数据时序图 程序如下:

unchar ds1820rd() {

unsigned char r=0; unsigned char dat = 0; for (r=8;r>0;r--) { DQ = 0; //给脉冲信号 dat>>=1; DQ = 1; //给脉冲信号 if(DQ)

7

dat|=0x80; delay_18B20(10); }

return(dat); }

2.2.3 ds18b20的温度转换

温度传感器是DS18B20的核心部分,该功能部件可以完成对温度的测量,通过软件编程可将-55~+125℃范围内的温度值按9位、10位、11位、12位的转换精度进行量化,以上的转换精度都包括一个符号位,因此对应的温度量化值分别是0.5℃、0.25℃、0.125℃、0.0625℃,即最高转换精度为0.0625。芯片出厂时默认为16位的转换精度。当接收到温度转换命令(命令代码44H)后开始转换,转换完成后的温度以16位带符号拓展的二进制补码形式表示,存储在高速缓存器RAM的第0、1字节中,二进制数的前5位是符号位。

如果测得的温度大于0,这5位为0,只要将测得的数值乘上0.0625,既可以得到实际温度,如果温度小于0,这5位为1,测得的数值需要取反加1,再乘上0.0625即可得到实际温度。 程序如下:

readandtrans_temp() //读取温度值、转换及其计算 {

unchar a,b;

ds1820rst(); //18b20初始化

ds1820wr(0xcc); //写入跳过读18b20内部芯片序列号命令字 ds1820wr(0x44); //写入启动温度转换命令字 ds1820rst();

ds1820wr(0xcc); //写入跳过读序列号命令字 ds1820wr(0xbe); //写入读取温度数据命令字

a=ds1820rd(); //读取低八位 b=ds1820rd(); //读取高八位 tvalue=b; //高八位左移 tvalue<<=8;

tvalue=tvalue|a; //高八位左移与低八位线或

tvalue=tvalue*0.0625*10; //温度值扩大10倍,精确到1位小数 return(tvalue); //返回值 }

2.2.4 数据采集模块的程序流程

数据采集的程序初始化即DS18b20的程序初始化→采集温度→等待温度转换→读取温度送给单机处理,特别要注意的是,如果主机只对一个DS18B20进行操作时,就不需要读取ROM编码以及匹配ROM编码了,只要用跳过ROM(0CCH)命令就可以进行温度转换和读取操作(本设计主机只对一个从机工作)。

8

如图2-6所示:

开始

ds18b20初始化

产生一个应答号 N 有应答? Y 调用写字节函数 跳过读序列号

进行温度转换 读取温度信号

温度计算

计数,加一,在循环当中加 结束 个延时程序

图2-6 温度数据采集程序流程图

2.3 键盘功能模块软件设计

键盘分为编码键盘和非编码键盘。靠软件编程来识别的键盘成为非编码键盘,非编码键盘又分为独立键盘和矩阵式键盘。

本系统设置了两个独立键盘,一个“+”键(P2.1)和一个“-”键(P2.2),分别对应两个I/O口,当系统上电时,初始的设置温度为30摄氏度,此时两个按键可以在此基础上设置温度的增减。

按键作为优先级高的功能控制键,系统要实时响应该中断。在该中断的响应过程中,系统进入温度设置界面,不断扫描按键子程序,按下两个加减键中的一个,设置温度值通过每按一次就加或减1来实现,并将此设置温度值显示在LCD1602液晶界面上。 2.3.1 按键与单片机连接图 如图2-7所示:

9

联系合同范文客服:xxxxx#qq.com(#替换为@)