PIC 定时器0中断

2019-04-15 11:51发布

#include       //调用头文件,可以去PICC18软件下去查找PIC18FXX2.H __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()延时函数来让数码管闪是不可能实现的。必须用定时器中断。