×
单片机 > 单片机程序设计 > 详情

PIC 定时器0中断

发布时间:2020-08-28 发布时间:
|
#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()延时函数来让数码管闪是不可能实现的。必须用定时器中断。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项