请教C语言高手和汇编高手帮我看下下面一段程序时序有无出错,调试DS18B20很久了,一直不能调试通
程序如下: /**************************************************/ /*延时程序 /**************************************************/ void Delay(uint8 n) { while(--n); //采用12时钟,晶振为3.6864MHZ,一个机器周期3.25us 9个指令周期+一个RET 2指令周期 }
/**************************************************/ /*DS18b20 初始化程序 /**************************************************/ void Ds_Init(void) { uchar x; Ds_Data=1; //单片机初始状态 _nop_(); _nop_();
Ds_Data=0; Delay(20);//最小480us RESET PULSE
Ds_Data=1; Delay(1); //15-60us WAIT PULSE 我选择32.5us等待信号 //如果Ds_data持续0电平超过个机器周期 //初始化成功,返回1 while(!Ds_Data) //初始化失败,返回0 { Delay(5);//150us presence pulse (60-240)
Ds_Data=1; //上拉280 总计530US TX 时间 Delay(10); //return 1; } //else return 0; } 时序资料如图.所使用的P89V51RD2FN 型号单片机,晶振的频率是3.6864MHZ
现在我主要的问题就是程序是否正确,还有就是我的延迟时间推算的准确否.
我用示波器查看delay(1) 时间约为44US delay(10)时间约为280US delay(5) 时间约为152us delay(3)时间约为104us delay(20) 时间约为600us 那位汇编高手帮我算下 是不是延迟时间是准确的? 第一次在这个分坛发帖,希望路过看过的多多捧场!!! 调试出来也会与大家分享成果,尤其是调试过程遇到的问题,
网上有很所谓的调试成功的程序,看了是一头雾水,自己的硬件图都不给,单发程序,连晶振频率都不给,,,真郁闷这些人
|