功能強(qiáng)大的時(shí)鐘中斷在單片機(jī)程序設(shè)計(jì)中,設(shè)置一個(gè)好的時(shí)鐘中斷,將能使一個(gè)CPU發(fā)揮兩個(gè)CPU的功效,大大方便和簡(jiǎn)化程序的編制,提高系統(tǒng)的效率與可操作性。我們可以把一些例行的及需要定時(shí)執(zhí)行的程序放在時(shí)鐘中斷中,還可以利用時(shí)鐘中斷協(xié)助主程序完成定時(shí)、延時(shí)等操作。下面以6MHz時(shí)鐘的AT89C51系統(tǒng)為例,說明時(shí)鐘中斷的應(yīng)用。定時(shí)器初值與中斷周期時(shí)鐘中斷無需過于頻繁,一般取20mS(50Hz)即可。如需要百分之一秒的時(shí)基信號(hào),可取1
功能強(qiáng)大的時(shí)鐘中斷
在單片機(jī)程序設(shè)計(jì)中,設(shè)置一個(gè)好的時(shí)鐘中斷,將能使一個(gè)
CPU發(fā)揮兩個(gè)CPU的功效,大大方便和簡(jiǎn)化程序的編制,提高系統(tǒng)的效率與可操作性。我們可以把一些例行的及需要定時(shí)執(zhí)行的程序放在時(shí)鐘中斷中,還可以利用時(shí)鐘中斷協(xié)助主程序完成定時(shí)、延時(shí)等操作。
下面以6MHz時(shí)鐘的
AT89C51系統(tǒng)為例,說明時(shí)鐘中斷的應(yīng)用。
定時(shí)器初值與中斷周期 時(shí)鐘中斷無需過于頻繁,一般取20
mS(50Hz)即可。如需要百分之一秒的時(shí)基信號(hào),可取
10mS(
100Hz)。這里取20mS,用定時(shí)器T0工作于
16位定時(shí)器方式(方式1)。T0的工作方式為:每過一個(gè)機(jī)器周期自動(dòng)加1,當(dāng)計(jì)滿0FFFFh,要溢出時(shí),便會(huì)產(chǎn)生中斷,并由硬件設(shè)置相應(yīng)的標(biāo)志位供軟件查詢。即中斷時(shí)比啟動(dòng)時(shí)經(jīng)過了N+1個(gè)機(jī)器周期。所以,我們只要在T0中預(yù)先存入一個(gè)比滿值0FFFFh小N的數(shù),然后啟動(dòng)定時(shí)器,便會(huì)在N個(gè)機(jī)器周期后產(chǎn)生中斷。這個(gè)值便是所謂的“初值”。下面計(jì)算我們需要的初值:時(shí)鐘為6MHz,
12個(gè)時(shí)鐘周期為一個(gè)機(jī)器周期,20mS中有
10000個(gè)機(jī)器周期。(10000)10=(2710)16,則0FFFFh-2710h+1=0D8F0h。由于響應(yīng)中斷、保護(hù)現(xiàn)場(chǎng)及重裝初值還需要7~8個(gè)機(jī)器周期,把這個(gè)值再加上7,即T0應(yīng)裝入的初值是0D8F7h。每次中斷進(jìn)入后,先把A及
PSW的值壓入堆棧,然后即把0D8F7h裝入T0。
設(shè)置一個(gè)單元,每次中斷加1 我們可以取內(nèi)部RAM中一個(gè)單元,取名為INCPI(Increase Per
Interrupt),在中斷中,裝完T0初值后,用INC INCPI指令將其加一。從這個(gè)單元中,無論中斷程序還是主程序,都可以從中獲得20mS的1~
256之間任意整數(shù)倍的信號(hào)。例如:有一段向
數(shù)碼管送顯的程序,需要每0.5秒執(zhí)行一次以便刷新顯示器,便可以設(shè)一單元(稱為等待單元)W_DISP,用/
MOV