本文目錄一覽:
- 1、設51單片機晶振頻率為12MHZ,延時1m的子程序
- 2、請教老師,51單片機在12M晶振,C語言編程時,延時函數120次=1ms(書本上是這樣的,不懂),是怎樣得來的?
- 3、單片機外接12M的晶振,1ms的基準延時函數用C語言怎麼寫?
設51單片機晶振頻率為12MHZ,延時1m的子程序
猜想你問的是1ms.
下面為你寫出1ms的程序:
用的是11.0592M的,你如果真的需要是12M的,那自己直接修改成12M就可以了。調用的時候直接把uinsigned int ms改成1就是1ms.
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp;
tmp = 11059200/12;
tmp = (tmp * ms)/1000;
tmp = 65536 – tmp;
tmp = tmp + 18;
T0RH = (unsigned char)(tmp 8);
T0RL = (unsigned char)tmp;
TMOD = 0xF0;
TMOD |= 0x01;
TH0 = T0RH;
TL0 = T0RL;
ET0 =1;
TR0 = 1;
}
請教老師,51單片機在12M晶振,C語言編程時,延時函數120次=1ms(書本上是這樣的,不懂),是怎樣得來的?
C的話其實時間沒有辦法完全定性地計算的
如果非得精確的話只能使用定時器了,或者彙編的也行
不過時間要求精度不是很高的話使用下面的代碼就行了
當時使用示波器把時間完全調準的,65536ms範圍內還是比較準的,已經可以滿足通常的要求了:
#include “reg51.h” //頭文件包含
//宏定義
#define uint unsigned int
#define uchar unsigned char
void delay(uint ms) // 毫秒級延時(AT89C52 @ 11.0592MHz)
{
uint ti;
while(ms–)
{
for(ti=0;ti112;ti++){}//112
}
}
調用方式如下:
delay(400); //開機延時400ms
夠詳細了吧?!
單片機外接12M的晶振,1ms的基準延時函數用C語言怎麼寫?
/*———————————————–
名稱:delay1ms()
功能:延時1ms
晶振:12MHz 機器周期1us
時間計算:t=2+1+995+2=1000us =1.000ms
———————————————–*/
void delay1ms(void) //延時1ms子程序
{
unsigned char i,j;
for(i=5;i0;i–)
for(j=98;j0;j–);
}
對應彙編
/*———————————————–
名稱:delay1ms
功能:延時1ms
晶振:12MHz 機器周期1us
時間計算:t=2+1+995+2=1000us =1.000ms
———————————————–*/
LCALL DELAY1MS ;2us
DELAY1MS:
MOV R6,#5 ;1us
DEL1: MOV R7,#98 ;1us
DJNZ R7,$ ;2*98=196us
DJNZ R6,DEL1 ;2us DLE1執行完所用時間(1+196+2)*5=995us。
RET ;2us
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/308719.html