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跳变一次。我把程序下到硬件里面,去点亮一个发光管,但没有反应。
请高手指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
qqrenzhi
1楼-- · 2020-02-09 10:08
怎么没人顶一下啊!?
liansh
2楼-- · 2020-02-09 11:37
SIM仿真没问题多数不会是程序上的问题。看看你的电路连接吧,芯片是否工作,LED有没有限流电阻什么的。
yklstudent
3楼-- · 2020-02-09 12:48
定时器初始化没有写TMR0值嘛
跟这个又关系嘛?
qqrenzhi
4楼-- · 2020-02-09 14:02
在中断服务程序里写了初值的啊!
TMR0 = 0X08;  //对TMR0写入一个调整值。因为与入TMR0后接着的
//两个周期能增量,中断需要别3个周期的响应时间,
//自动进行现场保护要消耗周期
liansh
5楼-- · 2020-02-09 16:30
 精彩回答 2  元偷偷看……
qqrenzhi
6楼-- · 2020-02-09 19:59
我已经设置了AD的啊!全部为数字IO啊!
ADCON1 = 0x07 ; // A口全部配置為數字端口
TRISA = 0x00 ; // A端口6路輸出

一周热门 更多>