Delay软件延时
Delay軟件延時是什么?
讓單片機等待一段時間再繼續往下執行之后的代碼,在此期間不能執行除了中斷的任何操作,在此期間單片機就一直數數
為什么要用Delay軟件延時?
可以讓單片機等待固定時間,在進行別的操作
但是不能亂使用Delay延時,不然會使單片機執行效率下降,也會浪費大量單片機資源。(解決方案:用定時器做資源分配,短延時(小于10ms)使用Delay,如果是長延時就需要使用定時器了)
怎么使用Delay延時
1.使用STC-ISP生成Delay軟件延時函數
1)在選項卡中選中軟件延時計算器
2)選擇系統頻率,比賽時應該看題目具體要求是12MH還是11.0592MH,然后將用戶程序運行時IRC頻率與系統頻率進行同步
3)選擇想要的定時長度
4)選擇8051指令集,藍橋杯比賽要選擇Y5,因為藍橋杯板是15系列的板,如果使用89系列的板就要選擇Y1了。
5)復制生成的代碼,到程序里進行復制
?2.Delay函數在程序中的運用
/************************************************* 程序功能:在P34口上輸出方波:周期是2ms(頻率500Hz),高電平時間1ms,低電平時間1ms。注意:1. 用STC-ISP生成固定的Delay軟件延時;生成時,8051指令集選擇STC-Y52. _nop_() 函數需要#include "intrins.h"3. 本程序運行時鐘:12MHz *************************************************/ #include <STC15F2K60S2.H> #include "intrins.h"void Delay1ms() //@12.000MHz {unsigned char i, j;i = 12;j = 169;do{while (--j);} while (--i); }void main(void) {while(1){P34 = 1;Delay1ms();P34 = 0;Delay1ms();} }?通用Delay函數
如果需要進行延時時間不一樣的延時,按照上面的方法,就需要生成很多個不同的延時函數,所以我們可以使用通用延時函數來進行延時。
但是這種延時的方法,帶來的誤差比較大,因為本身STC-ISP生成的延時函數就產生了一定的誤差,又在通用延時函數又寫入了for循環,循環的執行是需要消耗一定時間的,所以導致的誤差會比較大。
//通用毫秒延時函數 void vDelay_Ms(unsigned int ms) //@12.000MHz {unsigned char i, j;unsigned char k;for(k=0;k<ms;k++){i = 12;j = 169;do{while (--j);} while (--i);} }//通用微秒延時函數 void vDelay_Us(unsigned int us) //@12.000MHz {unsigned int k;for(k=0;k<us;k++){_nop_();_nop_();_nop_();_nop_();} }總結
- 上一篇: 天田AMADA数控折弯机触摸屏维修RGM
- 下一篇: 开幕在即!众星齐聚八泉峡推介会 为山西加