PIC16f73定时器中断

2020-02-09 09:30发布

#include<pic16f7x.h>
unsigned int i=0,j=0,temp=0,t=0;
void tmint()                                                                          //TMR0初始化程序,使TMR0工作于定时器方式
        {
                T0CS = 0;                                                                 //TMR0时钟源选择,内部指令周期时钟
                PSA = 1;                                                                  //TMR0不分频,分配给WDT
                T0IF = 0;                                                                 //清除TMR0的中断标志
                T0IE = 1;                                                                 //TMR0中断允许
        }
main()
        {
                        GIE                = 1                ;                                        //        関总中断
                        PEIE        = 0                ;                                        //        関外設中斷
                        ADCON1        = 0x07        ;                                        //        A口全部配置為數字端口
                        TRISA        = 0x00        ;                                        //        A端口6路輸出       
                        tmint()        ;
                        while(1)
                                {
                                        if(t==1)
                                                {
                                                        t=0;
                                                        temp=~temp;
                                                        PORTA = temp;
                                                }
                                }
        }

void        interrupt MR0 ()
{


        if(T0IF==1)
        {       
                TMR0 = 0X08;                                                 //对TMR0写入一个调整值。因为与入TMR0后接着的
                                                                                        //两个周期能增量,中断需要别3个周期的响应时间,
                                                                                        //自动进行现场保护要消耗周期
                T0IF = 0;
                i=i+1;
                if(i==10000)
                        {
                                i=0;
                                t=1;
                        }
        }
       
}

请问,此方法是否正确,我在用SIM仿真时是PORTA口在680ms跳变一次。我把程序下到硬件里面,去点亮一个发光管,但没有反应。
请高手指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
16条回答
qqrenzhi
2020-02-09 14:02
在中断服务程序里写了初值的啊!
TMR0 = 0X08;  //对TMR0写入一个调整值。因为与入TMR0后接着的
//两个周期能增量,中断需要别3个周期的响应时间,
//自动进行现场保护要消耗周期

一周热门 更多>