PIC 定時器0中斷
__CONFIG(1,XT) ; //晶振為外部4M
__CONFIG(2,WDTDIS) ; //看門狗關閉
__CONFIG(4,LVPDIS) ; //禁止低電壓編程
#define uint unsigned int
#define uchar unsigned char
uint count=0;
void timer0init(void)
{
T0CS=0; //TMR0工作于定時器方式
PSA=1; //TMR0不分頻
TMR0IF=0; //TMR0IF是中斷標志,定時一段時間就會輸出1
TMR0IE=1; //允許TMR0中斷
T0CON=0x88; //16bit定時方式
TMR0=0xff13;//晶振4M,定時250us(就是先在TMR0L和TMR0H中存入一定的數,使
計時時間為計數器中剩余的空間次數*執行每次的時間)
GIE=1; //
}
void interrupt ISR(void)
{
if(TMR0IF==1) //達到了250us
{
TMR0=0xff13; //重新裝入初值
TMR0IF=0; //中斷標志位清零,方便下一次中斷產生時
判斷
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均為數字口,模擬量輸入禁止
TRISD=0B11111110;
timer0init();
while(1)
{
if(count==0)
{
RD0=1;
delayms(400);
}
else RD0=0;
}
}
這個效果比較單一,只能顯示一閃一閃;但定時器中斷卻能夠用在數碼管動態掃描中,如果不用定時器中斷,只用delayms()延時函數來讓數碼管閃是不可能實現的。必須用定時器中斷。


評論