调试18F25K80定时器0 发现中断进不去,防震一下发现INTCON寄存器中的数据不对 写入的是0XE0 可仿真的结果是0X40 不得其解 求高人指点
代码如下
void tm0_init(void)
{
T0CON = 0X88;
// T0CONbits.TMR0ON = 0; //禁止TM0
// INTCONbits.TMR0IE = 1;
// INTCONbits.TMR0IF = 0;
// T0CONbits.T08BIT = 0; //16BIT
// T0CONbits.PSA = 0; //不要预分频
// PMD1bits.TMR0MD = 0;
// RCONbits.IPEN = 1;
// INTCON2bits.TMR0IP = 0;
// T0CONbits.TMR0ON = 1;
// INTCONbits.PEIE = 1;
// INTCONbits.GIE_GIEH = 1;
INTCON = 0XE0;
TMR0H = 0X63; //必须先写H 再写L
TMR0L = 0XBF;
}
extern unsigned char tx[7];
unsigned char ii = 0,jj = 0; //定时器技术 i=10ms 按键扫描 j=1s温度读取
int main(int argc, char** argv)
{
Nop();Nop();Nop();Nop();Nop();
io_init();
tm0_init();
// ReadTemperature();
// HEATER = 0;
ReadTemperature();
// //外设中断允许
// NOP();
// NOP();
// INTCONbits.GIE_GIEH = 1; //开总中断
// INTCON |= 0xc0;
//
while(1) //主循环读温度 数码显示
{
ReadTemperature();
// display_init();
display1;data_shuma = shuma[tx[0]];
delayms(1);
display2;data_shuma = shumadian[tx[1]];
delayms(1);
display3;data_shuma = shuma[tx[2]];
delayms(1);
display4;data_shuma = shuma[0];
delayms(1);
display5;data_shuma = shuma[2];
delayms(1);
display6;data_shuma = shuma[0];
delayms(1);
//
// HEATER ^=1;
// NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
}
// return (EXIT_SUCCESS);
}
void interrupt ISR(void) //不知道这样对不对
//void interrupt low_priority LOW_isr(void)
{
if(INTCONbits.TMR0IF ==1 )
{
INTCONbits.TMR0IF = 0;
// TMR0 = 0X63BF;
TMR0H = 0X63;
TMR0L = 0XBF;
ii++;
if(ii>=20)
{ ii=0;
HEATER^=1;
}
}
}
|