|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
急问:调试时的中断问题 |
作者:wildship 栏目:单片机 |
我编了一个中断程序,采用的芯片是90LS8535,PD2作为外部中断0的入口,进入中断程序后跳不出来,请各位高手帮忙指点一下,谢了。 中断程序如下: #pragma interrupt_handler controlchange:2 void controlchange() { MCUCR=0X00; DDRD=0X8B; CLI(); for(;;) { if(checkbit(PIND,4)==1) { PORTD &= 0X01; PORTC = 0X48; } if(checkbit(PIND,5)==1) { PORTD &= 0X02; PORTC = 0X50; } if(checkbit(PIND,6)==1) { PORTD &= 0X08; } if(checkbit(PIND,3)==1) break; } } 我是想用PD2的高电平再跳出中断,不知这样是不是可行?望高手指点一二。 满足if中的条件也不执行其下面的动作。 |
2楼: | >>参与讨论 |
作者: 音乐乐乐 于 2005/1/2 22:39:00 发布:
查一下你的触发方式设置 是不是设置成电平方式触发了?改为沿触发 |
3楼: | >>参与讨论 |
作者: wildship 于 2005/1/3 16:18:00 发布:
不行啊,我改过来了还是不行啊 我改过来了,也不行的。主要是进入程序后不执行if中的语句(条件满足也不执行),各位高手帮帮忙啊,看看是什么原因,谢谢了~~!!! * - 本贴最后修改时间:2005-1-3 16:25:52 修改者:wildship |
4楼: | >>参与讨论 |
作者: 音乐乐乐 于 2005/1/3 20:20:00 发布:
checkbit(PIND,3)怎么写的? 有没有把PD最为输入?DDRD=0x00; |
5楼: | >>参与讨论 |
作者: wildship 于 2005/1/3 21:45:00 发布:
谢谢 音乐乐乐 ,现在搞定了。 谢谢 音乐乐乐 大侠。 是读IO口的问题,后来我改成了在if前添加了: PIND&=0b00010000,条件语句条件改为PIND==0x10(以第一个为例),就能进去了。但我不清楚这样为什么就行呢? checkbit(var,n)是查看位的宏函数,在源程序里有定义的,但写上去后不能判断了,为什么? 另:乐乐大侠,有没有其它的判断变量的位的方法,望赐教,谢谢了。 |
6楼: | >>参与讨论 |
作者: winsu 于 2005/1/5 16:39:00 发布:
有个问题你没考虑. 如果你手动触发,那么要考虑振荡现象. |
7楼: | >>参与讨论 |
作者: 音乐乐乐 于 2005/1/5 20:20:00 发布:
唉,开始给你回了一大堆网络断了 简单点吧 #define CHECK_BIT(x,y) ((x)&(1<<(y))) 判断时:if(CHECK_BIT(PIND,2))或者if(!CHECK_BIT(PIND,2)) 如一定要和1比较,这样 #define CHECK_BIT(x,y) (((x)&(1<<(y)))>>(y)) |
8楼: | >>参与讨论 |
作者: wildship 于 2005/1/6 17:33:00 发布:
谢谢了,各位!!!!!! 这两天在忙着开题的事,看到这么多的人看这个帖子,谢谢大家的关心。 特别谢谢乐乐大侠和winsu。 乐乐大侠可不可以告诉我你的E-mail,我的事wildship◎sina.com,以后还要多多请教。 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |