bit tempreadbit(void) //读一位数据函数 { uint i; bit dat; ds=0;i++; //延时 ds=1;i++;i++; dat=ds; i=8;while(i>0)i--; return(dat); }
时间: 2023-11-01 15:06:58 浏览: 106
这是一个读取单个DS18B20温度传感器数据的函数,返回值为一个位(0或1),表示读取到的数据。具体解释如下:
1. `uint i;` 定义一个无符号整型变量i
2. `bit dat;` 定义一个位类型变量dat
3. `ds=0;i++;` 将DS18B20传感器的数据总线拉低,并延时一段时间
4. `ds=1;i++;i++;` 将数据总线拉高,并延时一段时间
5. `dat=ds;` 将数据总线的值赋给dat变量
6. `i=8;while(i>0)i--;` 延时一段时间
7. `return(dat);` 返回读取到的数据值(0或1)
相关问题
void delay(uint count) { uint i; while(count) { i=200; while(i>0) i--; count--; } } void dsreset(void) { uint i; DS=0; i=103; while(i>0)i--; DS=1; i=4; while(i>0)i--; } bit tmpreadbit(void) { uint i; bit dat; DS=0;i++; DS=1;i++;i++; dat=DS; i=8;while(i>0)i--; return (dat); } uchar tmpread(void) { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmpreadbit(); dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 }
这段代码是实现了一些与 DS18B20 温度传感器有关的操作,具体来说:
- `delay` 函数是一个延时函数,输入的参数 `count` 表示需要延时的时间,单位为毫秒。
- `dsreset` 函数用于复位 DS18B20 温度传感器。
- `tmpreadbit` 函数用于从 DS18B20 温度传感器中读取一位数据,返回值为 `bit` 类型。
- `tmpread` 函数用于从 DS18B20 温度传感器中读取一个字节的数据,返回值为 `uchar` 类型。其中,该函数通过调用 `tmpreadbit` 函数读取一个字节的每一位,并将其组合成一个完整的字节。
需要注意的是,这段代码仅仅是 DS18B20 温度传感器的一部分操作,如果需要完整的代码,需要结合其他部分进行理解。
void tempwrite(uchar dat)//向DS18B20写一个字节数据函数 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) { ds=0; i++;i++; ds=1; i=8;while(i>0)i--; } else { ds=0; i=8;while(i>0)i--; ds=1; i++;i++; } } }逐行解释
这是一段用于向DS18B20写一个字节数据的函数。下面逐行解释:
```c++
void tempwrite(uchar dat)
```
函数声明,函数名为tempwrite,参数为一个无符号字符型变量dat。
```c++
{
uint i;
uchar j;
bit testb;
```
定义三个变量,i为无符号整型,j为无符号字符型,testb为单个位的布尔型。
```c++
for(j=1;j<=8;j++)
{
```
使用for循环,j从1循环到8。
```c++
testb=dat&0x01;
dat=dat>>1;
```
将dat的最低位赋值给testb,然后将dat右移一位。
```c++
if(testb)
{
ds=0;
i++;i++;
ds=1;
i=8;while(i>0)i--;
}
```
如果testb为真,即最低位为1,则先将ds引脚拉低,然后延时一段时间(i++表示延时),再将ds引脚拉高,最后将i赋值为8并延时,等待DS18B20读取数据。
```c++
else
{
ds=0;
i=8;while(i>0)i--;
ds=1;
i++;i++;
}
```
如果testb为假,即最低位为0,则先将ds引脚拉低,然后延时一段时间,再将ds引脚拉高,最后将i赋值为0并延时,等待DS18B20读取数据。
```c++
}
}
```
循环结束,函数执行完毕。
阅读全文