功能: 定时器0工作于16位定时模式,没有使用预分频器,每次定时中断时间约20ms,18次中断后把一状态标志(变量dddd)置1,主程序循环检测变量dddd,发现其值为1,则发一脉冲,并清除标志。
问题: 长时间用示波器观察,程序执行一段时间后,脉冲消失,经过一段时间后有恢复。 请大家帮忙分析一下原因。谢谢!
程序代码如下:
#include "p18f45j10.h"
void InterruptH_isr(void);
void init_board(void) { LATA=0x18; TRISA=0x00; T0CON=0x08; TMR0H=0x28; TMR0L=0x30; INTCON=0x20; RCONbits.IPEN=1; INTCON2bits.TMR0IP=1; }
volatile unsigned char dddd;
void main(void) { init_board(); T0CONbits.TMR0ON=1; INTCONbits.GIEH=1; while(1) { if(dddd) { dddd=0; PORTAbits.RA1=0; PORTAbits.RA1=1; } } }
#pragma code InterruptVectorHigh=0x08
void Interrupt_High(void) { _asm goto InterruptH_isr _endasm } #pragma code
#pragma interrupt InterruptH_isr void InterruptH_isr(void) { static unsigned char cnt20ms=0; if(INTCONbits.TMR0IF) { INTCONbits.TMR0IF=0; TMR0H=0x28; TMR0L=0x30; cnt20ms++; if(cnt20ms==18) { dddd=1; cnt20ms=0; } } }
|