PIC 定時(shí)器0中斷
__CONFIG(1,XT) ; //晶振為外部4M
__CONFIG(2,WDTDIS) ; //看門狗關(guān)閉
__CONFIG(4,LVPDIS) ; //禁止低電壓編程
#define uint unsigned int
#define uchar unsigned char
uint count=0;
void timer0init(void)
{
T0CS=0; //TMR0工作于定時(shí)器方式
PSA=1; //TMR0不分頻
TMR0IF=0; //TMR0IF是中斷標(biāo)志,定時(shí)一段時(shí)間就會輸出1
TMR0IE=1; //允許TMR0中斷
T0CON=0x88; //16bit定時(shí)方式
TMR0=0xff13;//晶振4M,定時(shí)250us(就是先在TMR0L和TMR0H中存入一定的數(shù),使
計(jì)時(shí)時(shí)間為計(jì)數(shù)器中剩余的空間次數(shù)*執(zhí)行每次的時(shí)間)
GIE=1; //
}
void interrupt ISR(void)
{
if(TMR0IF==1) //達(dá)到了250us
{
TMR0=0xff13; //重新裝入初值
TMR0IF=0; //中斷標(biāo)志位清零,方便下一次中斷產(chǎn)生時(shí)
判斷
count++;
if(count==4000)
{
count=0;
}
}
}
void delayms(uint x)
{
uint i,j;
for(i=0;i<=110;i++)
for(j=0;j<=x;j++);
}
void main(void)
{
ADCON1=0X06; //所有IO均為數(shù)字口,模擬量輸入禁止
TRISD=0B11111110;
timer0init();
while(1)
{
if(count==0)
{
RD0=1;
delayms(400);
}
else RD0=0;
}
}
這個(gè)效果比較單一,只能顯示一閃一閃;但定時(shí)器中斷卻能夠用在數(shù)碼管動(dòng)態(tài)掃描中,如果不用定時(shí)器中斷,只用delayms()延時(shí)函數(shù)來讓數(shù)碼管閃是不可能實(shí)現(xiàn)的。必須用定時(shí)器中斷。
評論