第九章串行总线接口技术.pptVIP

  • 6
  • 0
  • 约4.72万字
  • 约 159页
  • 2017-02-16 发布于上海
  • 举报
* * C语言程序: sbit DQ=P1^0; … void delay(unsigned int i) /*延时10us左右*/ { unsigned int j; for (j=i;j﹥0;j--); } bit reset(void) /*复位函数, 返回值为0复位成功; f返回值为1复位失败*/ { bit flag; DQ=0; /*在数据线上产生500us的低电平 */ delay(50); DQ=1; /*数据线拉高 ,延时30us*/ delay(3); * * flag=DQ; /*读取数据线状态flag =0:复位成功; flag =1:复位失败*/ delay(25); /*延时250us*/ return(flag); } void ds18b20_init(void) { while(1) { if(!reset ()) /*收到ds18b20的应答信号*/ { DQ=1; delay(30); /*延时300 us */ break; } else reset(); /*否则再发复位信号*/ } } * * 2.写时序 DS18B20写时序如图9-21,单片机在t0时刻将总线拉至低电平,从t0时刻开始的15us之内应将要写的数据位送到总线上。在t0后的15—60us内对总线采样,若为低电平,写入的是0,连续写2位之间的间隙应大于1us 。若为高电平,写入的为1。 图9-21 DS18B20写时序 * * 汇编语言程序: DQ BIT P1.0 … DELAY15US:MOV R7,#07H DJNZ R7,$ RET DELAY60US:MOV R7,#1EH DJNZ R7,$ RET WRITE_BYTE: MOV R7,#08H ;将累加器A中数循环写(先低位,后高位)入 DS18B20 SETB DQ NOP NOP * * LOOP1:CLR DQ ; 产生15us的负脉冲 CALL DELAY15US RRC A ; 将最低位数据移到cy MOV DQ,C ; 将最低位数据位送数据线 CALL DELAY60US ; 产生60us的负脉冲 SETB DQ ; 数据线拉高,为写入下一位做准备 CALL DELAY15US DJNZ R7,LOOP1 RET * * C语言程序: Sbit DQ=p1^0; void delay(unsigned int i) { unsigned int j; for (j=i;j﹥0;j--); } void wrbyte(unsigned char data) { uchar i; for(i=8;i0;i--) /*循环写8位(先低位,后高位)*/ { DQ=0; /*产生15us的负脉冲*/ delay(1); DQ=data0x01; /*将当前数据位送数据线*/ data=data1; /*将下一位数据移到最低位*/ delay(5); /*延时60us*/ DQ=1; /*数据线拉高,为写入下一位做准备*/ delay(1); } } * * 3.读时序 DS18B20读时序如图9-22,单片机在t0时刻将总线从高拉至低电平,保持1us。在t1时刻将总线拉高,延时15us。在t2时刻读取数据,并延时至少45us。在t3时刻将数据线拉高至少1us,为写入下一位数据做准备 。 图9-22 DS18B20读时序 * * 汇编语言程序: DQ BIT P1.0 … DELAY15US:MOV R7,#07H DJNZ R7,$ RET DELAY60US:MOV R7,#1EH DJNZ R7,$

文档评论(0)

1亿VIP精品文档

相关文档