void delay_us(u16 us) { u16 i; u8 m; for(i=0;i<us;i++) for(m=0;m<2;m++); } void delay_ms(u16 ms) { u16 m; for(m=0;m<ms;m++) delay_us(1100); }此程序的作用
时间: 2023-05-25 19:02:59 浏览: 43
这段程序的作用是实现延时功能,其中delay_us函数实现微秒级的延时,delay_ms函数实现毫秒级的延时。实现方法为循环计数,根据计数次数达到一定值来实现延时。其中,delay_ms函数中调用了delay_us函数,使得实现毫秒级延时时通过多次累加微秒级延时来实现。
相关问题
代码解释void COM(void) { U8 i; for(i=0;i<8;i++) { U8FLAG=2; while((!DHT_IO)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0; if(DHT_IO)U8temp=1; U8FLAG=2; while((DHT_IO)&&U8FLAG++); if(U8FLAG==1)break; U8comdata<<=1; U8comdata|=U8temp; }}
该代码是一个函数,函数名为COM,没有返回值(void)。该函数使用了一个循环,循环变量i从0开始,每次循环加1,直到i等于8时结束循环。循环体内部有一个赋值语句U8FLAG=2和一个while循环语句,while循环的条件是DHT_IO为假(即为0)。在while循环内部没有任何语句,因此该while循环将一直执行,直到DHT_IO为真(即为1)。
解读程序:uint8_t data_update(void) { if(i2c_irqflag == 1) return 0; if(firstEcho > threshold) { u8Echodata[0 + test_count] = 0x01; } else { u8Echodata[0 + test_count] = 0x00; } u8Echodata[1 + test_count] = firstEcho >> 8; u8Echodata[2 + test_count] = firstEcho; u8Echodata[3 + test_count] = secondEcho >> 8; u8Echodata[4 + test_count] = secondEcho; u8Echodata[5 + test_count] = thirdEcho >> 8; u8Echodata[6 + test_count] = thirdEcho; u8Echodata[7 + test_count] = firstEchoT; u8Echodata[8 + test_count] = secondEchoT; u8Echodata[9 + test_count] = thirdEchoT; u8Echodata[10 + test_count] = yuzhen >> 8; u8Echodata[11 + test_count] = yuzhen; u8Echodata[12 + test_count] = 0; for(uint8_t i = 0; i < 12; i++)//校验 { u8Echodata[12 + test_count] += u8Echodata[i + test_count]; } if(i2c_irqflag == 1) return 0; pEchodata = u8Echodata + test_count; if(test_count == 0) { test_count = 13; } else { test_count = 0; } return 1; } void delay_us(int xx) { int ii = 0; for(ii = 0; ii < xx; ii++) { __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop(); } }
这段程序定义了一个函数`data_update`和一个函数`delay_us`。
1. `uint8_t data_update(void)`: 这是一个数据更新的函数。首先判断`i2c_irqflag`是否为1,如果是,就返回0。接下来,根据`firstEcho`的值与阈值`threshold`的比较结果,将对应的值写入数组`u8Echodata`的相应位置。然后,将一些变量的值写入数组中。接下来,通过循环计算校验和,并将校验和写入数组中。最后,判断`i2c_irqflag`是否为1,如果是,就返回0。将数组指针`pEchodata`指向数组`u8Echodata`的相应位置。最后,根据`test_count`的值进行条件判断,修改`test_count`的值,并返回1。
2. `void delay_us(int xx)`: 这是一个微秒级延时的函数,与之前的解释相同。
以上是对给定代码的解读。如果还有其他问题,请随时提问。