打印

PIC16F690中断奇怪的问题

[复制链接]
1011|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hellodjl|  楼主 | 2013-10-9 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想法是用定时器计算一定值到时候LED灯闪烁,但是发现有些这样的程序,可以正常实现,但是将RA5改为RA4,或者RC7均实现不了这样的功能,用延时函数可以实现这样的功能,不知道是什么原因,还请高手赐教,谢谢!!
#include<htc.h>
#define uint unsigned int
#define uchar unsigned char
uint intnum;
void init();
void main()
{
        init();
        while(1)
        {
                if(intnum==5)
                {
                        intnum=0;
                        RA5=!RA5;
                }       
        }
}

void init()
{   TRISA=0;
        TRISB=0;
        TRISC=0;
        PORTA=0;
        PORTB=0;
        PORTC=0;
        OPTION_REG=0x07;
        INTCON=0xa0;
        TMR0=61;
}

void interrupt time0()
{
        T0IF=0;
        TMR0=61;
        intnum++;
}
沙发
yewuyi| | 2013-10-9 09:08 | 只看该作者
这一段代码本身就是问题。


1、尽量别写if(intnum==5)这种代码,最好是写成:if(intnum>=5)
2、在不具备IO缓存器的型号中,尽量不要对IO口进行位操作,最好使用整体直接赋值的方式操作,或者是建立一个变量作为IO缓存器。
3、注意关闭IO口上的复合功能模块,特别是模拟模块

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
hellodjl + 3
板凳
hellodjl|  楼主 | 2013-10-9 11:44 | 只看该作者
谢谢,找到答案啦,是需要关闭模拟模块,谢谢版主!!

使用特权

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

本版积分规则

2

主题

153

帖子

1

粉丝