定時(shí)器的應(yīng)用---中斷方式---讓8個(gè)LED燈,左右各4個(gè)來(lái)回亮
/***************************
中斷方式 是主程序?qū)W⒂谄渌氖虑椋?/p>
待定時(shí)器中斷時(shí)才執(zhí)行中斷子程序。
*****************************/
#include
#define LED P1
#define count 50000 // 50000 * 1us = 0.05s 機(jī)器周期1us 12MH晶振
#define TH_M1 (65536-count)/256 //TMOD 寄存器 方式 1 , 2^8 = 256 THX跟TLX都是8位 除以256取商賦值高4位
#define TL_M1 (65536-count)%256 //將余數(shù)賦值低4位
int Count=0; //計(jì)算TO中斷次數(shù)
main()
{
IE = 0x82; // EA=1, 1000 0010 1000開(kāi)啟總中斷 0010 T0中斷
TMOD = 0x01; // 方式1
TH0 = TH_M1; // 設(shè)置T0計(jì)數(shù)值高8位,
TL0 = TL_M1; // 低8位
TR0 = 1; // 啟動(dòng) T0
LED = 0xf0; // 1111 ,0000 右邊亮 共陽(yáng)極
while(1); // 無(wú)窮循環(huán)
}
void timer0(void)interrupt 1 //定時(shí)器Timer0 中斷 1
{
TH0 = TH_M1; //設(shè)置TO 高4位
TL0 = TH_M1; //低4位
if(++ Count==5) //已經(jīng)中斷5次
{
Count=0; //中斷次數(shù)歸0
LED^=0xff; // LED = LED ^ 0XFF ^ 異或 1111 0000 ^ 1111 1111 = 0000 1111 LED取反
}
}
IE寄存器