[PIC®/AVR®/dsPIC®产品] PIC12F629电平变化中断无法进入,请教

[复制链接]
 楼主| daiqh 发表于 2014-2-22 17:36 | 显示全部楼层 |阅读模式
本帖最后由 daiqh 于 2014-2-22 17:53 编辑

用的是PIC12F629 MPLAB IDE 环境 。程序如下,我想当GP4有电平变化时进入中断,但无法进入,已经对着手册查看多次,但还是找不到原因,请教各位。

//主程序
void main(void)
{
unsigned char temp=1;

TRIS0 = 0;//GP0输出
GPIO0 = 1;//初始化输出1,亦就是白灯一上电就亮
TRIS4 = 1;//GP4输入
GPPU = 0;//各IO口独自控制上位
WPU4 = 1;//上拉
GPIE = 1;//使能电平变化
IOC4 = 1;//使能GP4 电平变化中断
GIE = 1;//开全局中断允许
while(1);
}

//中断
void interrupt isr_server(void)
{
    if(GPIF)//如果电平发生变化
    {
         if(GPIO4) //如果变化后的值为1,则证明是从0->1 相当于黄灯控制线断开
        {
            GPIO0 = 0; //关白灯 同时黄灯也关了
        }
    }
}


yklstudent 发表于 2014-2-22 19:09 | 显示全部楼层
你的配置位设置呢
yewuyi 发表于 2014-2-22 21:18 | 显示全部楼层
我印象中,电平变化进入中断函数后,要首先去读一下相关寄存器去释放它
zhimagod 发表于 2014-2-23 08:41 | 显示全部楼层
本帖最后由 zhimagod 于 2014-2-23 09:18 编辑

仔细看数据手册3.2.2

另外你的IO配置也有问题,看数据手册3.1 (虽然中断问题不一定是这个引起但是最好加上这个CMCON的初始化)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
dogglove 发表于 2014-2-23 08:49 | 显示全部楼层
按手册的设置,应该没有问题,
youluo235 发表于 2014-2-23 09:25 | 显示全部楼层
对照寄存器手册,把历程中的代码初始化设置那段粘过来,对比寄存器,看看和你的程序有什么地方不同没,或是少了个寄存器的设置了。
 楼主| daiqh 发表于 2014-2-23 19:39 | 显示全部楼层
yklstudent 发表于 2014-2-22 19:09
你的配置位设置呢

查到了,的确是配置位问题呢,忽略了有这一个设置,把GP4设置为CLKOUT了。
 楼主| daiqh 发表于 2014-2-23 19:43 | 显示全部楼层
yewuyi 发表于 2014-2-22 21:18
我印象中,电平变化进入中断函数后,要首先去读一下相关寄存器去释放它

多谢版主的关注啦,是配置没设置好呢
 楼主| daiqh 发表于 2014-2-23 19:45 | 显示全部楼层
zhimagod 发表于 2014-2-23 08:41
仔细看数据手册3.2.2

另外你的IO配置也有问题,看数据手册3.1 (虽然中断问题不一定是这个引起但是最好加上 ...

多谢指点,现在把比较器关了.CMCON = 0x07;
 楼主| daiqh 发表于 2014-2-23 20:02 | 显示全部楼层
本帖最后由 daiqh 于 2014-2-23 21:37 编辑
yewuyi 发表于 2014-2-22 21:18
我印象中,电平变化进入中断函数后,要首先去读一下相关寄存器去释放它

但还有另外一个问题想请教的,我现在把配置位设置为:

__CONFIG(0x01B4)
也就是
INTOSC:GP4、GP5作IO口
WDTE:禁止看门狗
PWRTE:禁止上电延时定时器
MCLR:GP3使能MCLR
BODEN:禁止欠压测试
CP:禁止程序保护
CPD:禁数据保护

发现上电后,程序会延时约1秒左右再运行的
感觉复位有问题,电路中MCLR引脚是悬空的,按手册说明接了一个上拉电阻到MMCLR还是一样,是什么原因呢
yklstudent 发表于 2014-2-23 21:53 | 显示全部楼层
猜想多半是硬件复位电路的问题
 楼主| daiqh 发表于 2014-2-23 21:59 | 显示全部楼层
yklstudent 发表于 2014-2-23 21:53
猜想多半是硬件复位电路的问题

能具体些吗?既然我禁止了上电延时了,然后再外接了复位电路,但还是有这现象
 楼主| daiqh 发表于 2014-2-23 22:22 | 显示全部楼层
yklstudent 发表于 2014-2-23 21:53
猜想多半是硬件复位电路的问题

应该证明是软件问题了,手上两块板子,一块是原版本可正常运行的,另一块是自己打的板子,把自己的芯片焊到原版本上面运行会出现同样的现象。
yklstudent 发表于 2014-2-24 12:16 | 显示全部楼层
daiqh 发表于 2014-2-23 22:22
应该证明是软件问题了,手上两块板子,一块是原版本可正常运行的,另一块是自己打的板子,把自己的芯片焊 ...

原板和你打的板子程序不同??????????不然何以得出是程序的问题
 楼主| daiqh 发表于 2014-2-24 13:52 | 显示全部楼层
yklstudent 发表于 2014-2-24 12:16
原板和你打的板子程序不同??????????不然何以得出是程序的问题 ...

程序当然是不一样了,现在把GPPU=0放前面,程序运行就正常了
塞北天空的雨 发表于 2016-4-28 14:09 | 显示全部楼层
yewuyi 发表于 2014-2-22 21:18
我印象中,电平变化进入中断函数后,要首先去读一下相关寄存器去释放它

叶爷,我想问一下,从外部引脚输入信号来计数的话。用电平变化中断还是计数器优先呢?师兄说用定时器功耗更低。我想做低功耗,但是我不太明白这个说法
yewuyi 发表于 2016-4-28 16:42 | 显示全部楼层
塞北天空的雨 发表于 2016-4-28 14:09
叶爷,我想问一下,从外部引脚输入信号来计数的话。用电平变化中断还是计数器优先呢?师兄说用定时器功耗 ...

多开一个电平变化中断,功耗相差了了,当然因为MCU代码运行基本上都要有定时器,此时再开电平变化中断,功耗理论上还是会高一点的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

95

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部