写的是一个18b20的程序,c语言的函数是这样的
/***************分割线*****************************/
void TempDelay (unsigned char idata us)
{
while(us--);
}
/*******************分割线************************/
这是我查看keil4编译后的汇编代码
C:0x0535 AE07 MOV R6,0x07
C:0x0537 1F DEC R7
C:0x0538 EE MOV A,R6
C:0x0539 70FA JNZ TempDelay(C:0535)
/******************************************************/
我自己是这样算的,
MOV R6,0x07 ,1个机器周期
DEC R7 ,1个机器周期
MOV A,R6 ,1个机器周期
JNZ TempDelay(C:0535) ,2个机器周期
加起来,每次循环 用 5 个机器周期,
当输入 参数 us=50的时候,我在keil中用12MHZ的晶振模拟计时,得出结果是延时了350us,
按照我的算法,50*5* 1 us =250us ,与keil的模拟结果不符,不知道我这样计算有没有错误。
另外,这是ds18b20中 给18b20的初始化程序,按照说明书 延时的最小值是480us,无论是keil的模拟结果还是我的计算结果都与480us相差很远,
但我把程序烧录到单片机验证的时候,延时参数 写50是完全正常运行的,可以检测出温度,甚至我把参数改成40也可以,想问一下这是为什么呢? |