這兩天寫lcd1602的驅(qū)動程序,要用到延時程序,都是從別人那考現(xiàn)成的,不知道怎么調(diào)試,昨天看了用keil調(diào)試延時程序的文章,今天調(diào)好了兩個程序,一個是1ms為基準的,1個100ms為基準的,
/*******************************延時函數(shù)******************************************/ #include <reg51.h> //#include <intrins.h> #define MHz 12 //晶振頻率
void delay_1ms(unsigned char delay); // 基準為1ms的延時函數(shù),最大255ms void delay_100ms(unsigned char delay);
/************************************1ms基準延時函數(shù)******************************/ /*延時函數(shù),基準值為1ms,最大255毫秒 */ /*********************************************************************************/ void delay_1ms(unsigned char delay) { unsigned char i,j,tmp; tmp = (char)((100*MHz)/12+23); //根據(jù)晶振頻率計算內(nèi)層循環(huán)初值,調(diào)整23可以對延時時間進行微調(diào) for(i=0;i<delay;i++) { for(j=0;j<tmp;j++); } }
/**********************************100ms基準延時函數(shù)******************************/ /*延時函數(shù),基準值為100ms,最大25 秒 */ /*********************************************************************************/ void delay_100ms(unsigned char delay) { unsigned char i; unsigned int j, tmp; tmp = (int)100*((100*MHz)/12-17); //根據(jù)晶振頻率計算內(nèi)層循環(huán)次數(shù),調(diào)整17可以對延時時間進行微調(diào) for(i=0;i<delay;i++) { for(j=0;j<tmp;j++); } }
|