51單片機(jī)定時(shí)工作在方式1,是16位計(jì)數(shù)方式,如果晶振頻率是12M,機(jī)器周期 是1us,那么最大的定時(shí)時(shí)間也只有65.536ms,要直接定時(shí)1秒是不可能的。
但是,可以定時(shí)50ms,采用中斷方式,每50ms定時(shí)到,要中斷一次的,在中斷程序就對(duì)中斷計(jì)數(shù),中斷20次的時(shí)間就是50msX20=1000ms=1秒。有了1秒計(jì)時(shí),那1分鐘就容易了,對(duì)1秒再計(jì)數(shù)啊,60秒就是1分啦。
可能你沒有寫過(guò)時(shí)鐘程序吧,電子鐘程序就是這種方法,再計(jì)60分為1小時(shí),24小時(shí)為一日,依此,可以計(jì)年月日呢。這有什么難的。
關(guān)鍵是對(duì)中斷計(jì)數(shù),就可以解決長(zhǎng)時(shí)間定時(shí)了。
51單片機(jī)最大硬件定時(shí)時(shí)間,就是定時(shí)器能定時(shí)的 時(shí)間,最長(zhǎng)時(shí)間=65536*Tc
Tc=fosc/12,fosc 是單片機(jī)的晶振頻率。
以頻率=12M為例吧,Tc=1us
最大定時(shí)時(shí)間=65536us=65.536ms。
其實(shí),不用管最大定時(shí)時(shí)間是多少,要定時(shí)再長(zhǎng)的時(shí)間也是可以的,采用中斷的方式計(jì)數(shù)嗎。
如:定時(shí)50ms,中斷方式,中斷一次,就是50ms,中斷20次就是1秒。
有了1秒以后,什么分,小時(shí),都可以計(jì)了。
采用定時(shí)器定時(shí)很精確的,如果定時(shí)時(shí)間為1ms,那循環(huán)1000次就是1s。定時(shí)初值要看你采用的晶振頻率了,下面是12M晶振,定時(shí)器0的定時(shí)1ms程序。
timer0() interrupt 1 // 1ms延時(shí)(12.0MHz)
{
TR0=0;
ET0=0;
TH0=0xfc;
TL0=0x18;
if(delayTimes1!=0) delayTimes1--;
TR0=1;
ET0=1;
}
當(dāng)要程序中把delayTimes1賦值1000后,等到delayTimes1為0的時(shí)候定時(shí)1s鐘到
這是我個(gè)人學(xué)習(xí)時(shí)的一點(diǎn)心得,我感覺應(yīng)該是一個(gè)比較清楚的版本了。雖然有快一年沒有學(xué)習(xí)單片機(jī)了,但是想起這些知識(shí)還是頗感熟悉。
首先你需要明白一個(gè)等價(jià)條件和一些基本理論知識(shí),這既是學(xué)習(xí)后面的前提,同時(shí)也是基礎(chǔ)。(以下內(nèi)容僅指單片機(jī)而言,并且晶振頻率是11.0592MHz)CPU內(nèi)部每經(jīng)過(guò)一個(gè)機(jī)器周期(即一定的時(shí)間間隔),定時(shí)器就自動(dòng)加一;反之,定時(shí)器每自動(dòng)加一,就表示CPU內(nèi)部經(jīng)過(guò)了一個(gè)機(jī)器周期(可以類比我們使用的電子表)。二者在大多數(shù)情況下是等價(jià)的,而只有在討論純概念范疇時(shí)二者才是不一樣的(哲學(xué)用語(yǔ))。因此要想設(shè)置定時(shí)器,關(guān)鍵是要知道一個(gè)機(jī)器周期的大小(即時(shí)間間隔):一個(gè)機(jī)器周期=12個(gè)時(shí)鐘周期=12個(gè)振蕩周期=12個(gè)晶振周期=12個(gè)節(jié)拍,而一個(gè)振蕩周期或者是一個(gè)晶振周期則等于晶振頻率的倒數(shù)即1/fosc,由此可知一個(gè)機(jī)器周期=12/fosc。以本例來(lái)說(shuō),一個(gè)機(jī)器周期=0.000001085s,也就是1.085us。因此當(dāng)我們知道了需要定時(shí)的時(shí)間之后(比如定時(shí)50ms),即知道了包含多少個(gè)機(jī)器周期之后(50ms/1.085us=46083),我們就知道了應(yīng)該往定時(shí)器的計(jì)數(shù)寄存器中寫多大的初值(即寫入(65536-46083));同樣,當(dāng)我們?cè)诳吹蕉〞r(shí)器的計(jì)數(shù)寄存器當(dāng)中的數(shù)值后(比如(65536-46083)/256中的46083——其實(shí)是在程序中看到的),也就知道了定時(shí)一次的時(shí)間是多少(即用46083*1.085us=50ms)。
假設(shè)石英晶振頻率為12mhz,單片機(jī)為51 匯編: delay: mov r4, #10 dly0: mov r5, #120 dly1: mov r6, #200 dly2: mov r7, #250 dly3: djnz r7, dly3 djnz r6, dly2 djnz r5, dly1 djnz r4, dly0 ret c51: void delay() { tmod=0x01; unsigned int i=24000; while(i--) { th0=-(50000/256); tl0=-(50000%256); while(tf0==0); tf0=0; } tr0=0; }。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁(yè)面生成時(shí)間:2.321秒