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-05 07:04:59 浏览: 45
这段代码是一个函数,用于读取单总线设备(例如DS18B20温度传感器)发送的1位数据。
逐行解释如下:
- `bit tempreadbit(void)`:这是函数的声明,返回值类型为`bit`,函数名为`tempreadbit`,函数不需要参数。
- `{`:函数体开始。
- `uint i;`:定义一个无符号整型变量`i`,用于后面的循环。
- `bit dat;`:定义一个位变量`dat`,用于存储读取到的数据位。
- `ds=0;i++;`:将单总线上的数据引脚(DS)置为低电平,然后延时一段时间。
- `ds=1;i++;i++;`:将单总线上的数据引脚(DS)置为高电平,然后再次延时一段时间。
- `dat=ds;`:将单总线上的数据引脚的电平读入`dat`中。
- `i=8;while(i>0)i--;`:设置循环次数为8,然后进行一个空循环,用于延时一定时间。
- `return(dat);`:返回读取到的数据位`dat`。
- `}`:函数体结束。
需要注意的是,这段代码并不完整,还缺少了函数调用的部分。如果要使用这个函数,需要在程序中调用它并将返回值保存到一个变量中。
相关问题
bit tempreadbit(void) //读一位数据函数 { uint i; bit dat; ds=0;i++; //延时 ds=1;i++;i++; dat=ds; i=8;while(i>0)i--; return(dat); }
这是一个读取单个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 温度传感器的一部分操作,如果需要完整的代码,需要结合其他部分进行理解。
阅读全文