打印
[PIC®/AVR®/dsPIC®产品]

PIC12F629电平变化中断无法进入,请教

[复制链接]
4895|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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的初始化)

使用特权

评论回复
5
dogglove| | 2014-2-23 08:49 | 只看该作者
按手册的设置,应该没有问题,

使用特权

评论回复
6
youluo235| | 2014-2-23 09:25 | 只看该作者
对照寄存器手册,把历程中的代码初始化设置那段粘过来,对比寄存器,看看和你的程序有什么地方不同没,或是少了个寄存器的设置了。

使用特权

评论回复
7
daiqh|  楼主 | 2014-2-23 19:39 | 只看该作者
yklstudent 发表于 2014-2-22 19:09
你的配置位设置呢

查到了,的确是配置位问题呢,忽略了有这一个设置,把GP4设置为CLKOUT了。

使用特权

评论回复
8
daiqh|  楼主 | 2014-2-23 19:43 | 只看该作者
yewuyi 发表于 2014-2-22 21:18
我印象中,电平变化进入中断函数后,要首先去读一下相关寄存器去释放它

多谢版主的关注啦,是配置没设置好呢

使用特权

评论回复
9
daiqh|  楼主 | 2014-2-23 19:45 | 只看该作者
zhimagod 发表于 2014-2-23 08:41
仔细看数据手册3.2.2

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

多谢指点,现在把比较器关了.CMCON = 0x07;

使用特权

评论回复
10
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还是一样,是什么原因呢

使用特权

评论回复
11
yklstudent| | 2014-2-23 21:53 | 只看该作者
猜想多半是硬件复位电路的问题

使用特权

评论回复
12
daiqh|  楼主 | 2014-2-23 21:59 | 只看该作者
yklstudent 发表于 2014-2-23 21:53
猜想多半是硬件复位电路的问题

能具体些吗?既然我禁止了上电延时了,然后再外接了复位电路,但还是有这现象

使用特权

评论回复
13
daiqh|  楼主 | 2014-2-23 22:22 | 只看该作者
yklstudent 发表于 2014-2-23 21:53
猜想多半是硬件复位电路的问题

应该证明是软件问题了,手上两块板子,一块是原版本可正常运行的,另一块是自己打的板子,把自己的芯片焊到原版本上面运行会出现同样的现象。

使用特权

评论回复
14
yklstudent| | 2014-2-24 12:16 | 只看该作者
daiqh 发表于 2014-2-23 22:22
应该证明是软件问题了,手上两块板子,一块是原版本可正常运行的,另一块是自己打的板子,把自己的芯片焊 ...

原板和你打的板子程序不同??????????不然何以得出是程序的问题

使用特权

评论回复
15
daiqh|  楼主 | 2014-2-24 13:52 | 只看该作者
yklstudent 发表于 2014-2-24 12:16
原板和你打的板子程序不同??????????不然何以得出是程序的问题 ...

程序当然是不一样了,现在把GPPU=0放前面,程序运行就正常了

使用特权

评论回复
16
塞北天空的雨| | 2016-4-28 14:09 | 只看该作者
yewuyi 发表于 2014-2-22 21:18
我印象中,电平变化进入中断函数后,要首先去读一下相关寄存器去释放它

叶爷,我想问一下,从外部引脚输入信号来计数的话。用电平变化中断还是计数器优先呢?师兄说用定时器功耗更低。我想做低功耗,但是我不太明白这个说法

使用特权

评论回复
17
yewuyi| | 2016-4-28 16:42 | 只看该作者
塞北天空的雨 发表于 2016-4-28 14:09
叶爷,我想问一下,从外部引脚输入信号来计数的话。用电平变化中断还是计数器优先呢?师兄说用定时器功耗 ...

多开一个电平变化中断,功耗相差了了,当然因为MCU代码运行基本上都要有定时器,此时再开电平变化中断,功耗理论上还是会高一点的

使用特权

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

本版积分规则

17

主题

95

帖子

2

粉丝