单片机设置12分频c语言,AT89C51单片机,如何实现延迟一秒
滿意答案
愛(ài)在身邊lovely
2013.09.07
采納率:59%????等級(jí):12
已幫助:7408人
其實(shí)可以用C語(yǔ)言實(shí)現(xiàn)的,先要定義好定時(shí)器的初值
不管你使用多大的晶振,使用51單片機(jī),一般都是12分頻出來(lái),也就可以得出一個(gè)機(jī)器周期
機(jī)器周期=12/n(n指晶振頻率),假設(shè)你要定時(shí)的時(shí)間為M
那么定時(shí)的初值為:
M/機(jī)器周期=初值;
TH0=(65536-初值)%256;
TL0=(65536-初值)/256;
將(65536-初值)所得的值化成16進(jìn)制,其高位就是TH0的值,低位為TL0的值
例如用12M晶振做1ms定時(shí)計(jì)算如下:
機(jī)器周期=12/12*10^6=1us(微秒)
定時(shí)初值=(1*10^-3)/(1*10^-6)=1000;
所以:TH0=(65536-1000)%256;
TL0=(65536-1000)/256;
將65536-1000=64536化為16進(jìn)制為:0xFC18
TH0=0xFC;
TL0=0X18;
定好初值后要延遲一秒就定一個(gè)延時(shí)參數(shù),這里使用1000就行了(定時(shí)為1ms)中斷程序?yàn)?
timer0() interrupt 1 // 1ms延時(shí)(12.0MHz)
{
TR0=0;
ET0=0;
TH0=0xfc;
TL0=0x18;
if(delayTimes1!=0) delayTimes1--;
TR0=1;
ET0=1;
}
調(diào)用程序大致為:
if(delay_flag==0)
{
delay_flag=1;
delayTimes1=1000;
}
if(delayTimes1==0)
{
delay_flag=0;
這里寫定時(shí)到的操作就行了;
}
(在主程序中使用delay_ms()這樣的程序會(huì)影響程序運(yùn)行速度的,使用中斷就不會(huì))
00分享舉報(bào)
超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的单片机设置12分频c语言,AT89C51单片机,如何实现延迟一秒的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言不同类型指针间的强转,C语言中不同
- 下一篇: android注解的作用,Android