打印

请大家帮助分析一下TMR0程序

[复制链接]
2050|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
田宏亮|  楼主 | 2007-12-19 12:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能:
    定时器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;
        }
    }
}
沙发
anxiangbo| | 2007-12-19 13:32 | 只看该作者

楼主用哪个版本的编译器

楼主用哪个版本的编译器

使用特权

评论回复
板凳
田宏亮|  楼主 | 2007-12-19 13:50 | 只看该作者

RE

anxiangbo你好
我的MAPLB是7.5的,C编译器是MAPLB C18 V3.0

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

25

帖子

2

粉丝