微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > arm力天电子 lpc2148基于DS18B20的温度控制系统程序代码之dat=(...

arm力天电子 lpc2148基于DS18B20的温度控制系统程序代码之dat=(...

时间:10-02 整理:3721RD 点击:

arm力天电子 lpc2148基于DS18B20的温度控制系统程序代码之dat=(j《《7)|(dat》》1)详解

//读一位数据(读位程序)
1unsigned char tmpreadbit(void)       //read a bit
2{
3   unsigned char dat;
4   DS_OUT();      //端口设置为输出
5   DS_L();        //DS=0
6   //Delayn(1);     //2uS
7   DS_IN();       //input
8   //Delayn(1);
9  if(DS_R()!=0)
10     dat=1;
11   else
12      dat=0;
13   DelaynUs(50);   
14   return (dat);
15}

//读一个字节数据 (读字节程序)

16unsigned char tmpread(void)   //read a byte date
17{
18  unsigned char i,j,dat;  
19  dat=0;                    //令dat初始值为0,代码23处将会用到
20  for(i=1;i<=8;i++)
21  {
22    j=tmpreadbit();
23    dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里
24  }
25  return(dat);

26}

任意取一个字节,本文以1011 1010为例

首先由读位程序读取第7位1,执行22得j=1,执行23得dat=1xxx xxxx,  详解如下:

j<<7得到1xxx xxxx

dat>>1得到0xxx xxxx(注意:dat初始值为0,即代码19)

然后执行|(位或)运算,得到dat=1xxx xxxx

然后由读位程序读取第6位0,执行22得j=0,执行23得dat=01xx xxxx  详解如下:

j<<7得到0xxx xxxx

dat>>1得到01xx xxxx(此时,dat的值不再是0,而是上一步得到的1xxx xxxx)

然后执行|(位或)运算,得到dat=01xx xxxx

剩余位的计算方法同上,故略去.

最终主机读到的字节数据是0101 1101 ,最低位在最前面

转自http://blog.csdn.net/yueniaoshi/article/details/7835790

谢谢小编分享呀

哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦

求教下,这个程序在protuse中仿真,用lcd1602显示,不能显示正常温度怎么解决

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top