arm力天电子 lpc2148基于DS18B20的温度控制系统程序代码之dat=(...
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 date17{
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显示,不能显示正常温度怎么解决