5096|8

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

51单片机外部中断问题 [复制链接]

小女子我初学单片机,很多不懂得地方,向大家请教下啊
关于使用外部中断点亮发光二极管的问题,为实现同一功能,写了两方案,具体程序和问题如下
方案一:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT
MAIN: SETB EA  /*首先开启总中断 */
SETB EX0  /*开启外部中断 0 */
SETB IT0  /* 设置成 下降沿触发方式*/
MOV R7,#8
MOV DPTR,#TMPDATE
L0: SJMP L0

INT: DJNZ R7,L1   /*外部中断 0 每按一次主板上的"INT0"键,中断响应,调用该函数,我们从P2口输出点亮发光二极管*/
MOV R7,#8
L1: MOV A,R7
MOVC A,@A+DPTR
CPL A                   P口输出低电平时点亮发光二极管
MOV P2,A
RETI   

tmpdate: DB 01H,02H,04H,08H,10H,20H,40H,80H /*定义常量做为输出*/

END
现象:每按一次键,P2口接的发光二极管按顺序点亮相应的一位,但当第8次按键时,所有二极管都亮了:L
理论上只亮最边上的一位啊
方案二
只是改变了查表的方法,直接改变地址指针
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT
ORG 0030H
MAIN:SETB EA
     SETB EX0
     SETB IT0
     MOV DPTR,#TABLE
     MOV R1,#08H
LOOP:LJMP LOOP

INT: CLR A
     MOVC A,@A+DPTR
     CPL A
     MOV P2,A
     DJNZ R1,L1
     MOV R1,#08H
     MOV DPTR,#TABLE
     SJMP L2
L1:  INC DPTR   
L2:  RETI

TABLE:DB 01H,02H,04H,08H,10H,20H,40H,80H
END
结果正常
问题:为什么第一种情况会8个二极管全亮,我没有给P2口送#00H(即表中没有#0FF数据项)啊:Q
没想通,请大虾赐教啊,谢谢了
此帖出自51单片机论坛

最新回复

呵呵,看来现在汇编还是有很多人在用啊。 由此看来,还是不能把汇编丢弃了,毕竟汇编是基础  详情 回复 发表于 2009-10-12 21:59
点赞 关注
 

回复
举报

370

帖子

0

TA的资源

纯净的硅(中级)

沙发
 

中断位不会自动清零.

51单片机外部中断问题
小女子我初学单片机,很多不懂得地方,向大家请教下啊
关于使用外部中断点亮发光二极管的问题,为实现同一功能,写了两方案,具体程序和问题如下
方案一:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT
MAIN: SETB EA  /*首先开启总中断 */
SETB EX0  /*开启外部中断 0 */
SETB IT0  /* 设置成 下降沿触发方式*/
MOV R7,#8
MOV DPTR,#TMPDATE
L0: SJMP L0

INT: DJNZ R7,L1   /*外部中断 0 每按一次主板上的"INT0"键,中断响应,调用该函数,我们从P2口输出点亮发光二极管*/
MOV R7,#8
L1: MOV A,R7
MOVC A,@A+DPTR
CPL A                   P口输出低电平时点亮发光二极管
MOV P2,A
RETI   


中断随设定的是边沿,但也是硬逻辑把边沿变成电平,所以需要你清0.
此帖出自51单片机论坛
 
 
 

回复

370

帖子

0

TA的资源

纯净的硅(中级)

板凳
 

你好.

有空91365027QQ群内交流.
此帖出自51单片机论坛
 
 
 

回复

1759

帖子

0

TA的资源

裸片初长成(高级)

4
 
INT: DJNZ R7,L1   /*外部中断 0 每按一次主板上的"INT0"键,中断响应,调用该函数,我们从P2口输出点亮发光二极管*/
MOV R7,#8
L1: MOV A,R7
MOVC A,@A+DPTR

虽然表里面没有0FFH的数据 但是执行你的程序的时候 容易出现0FFH,就是DJNZ R7,L1 你在前面加上一句判断R7是否为0 为0就跳转 那么就能避免这个情况发生
此帖出自51单片机论坛
 
个人签名南京璞晓电子   www.cpx0.com需要
msn:njlianjian@hotmail.com
 
 

回复

196

帖子

0

TA的资源

五彩晶圆(中级)

5
 
同意楼上的观点!
此帖出自51单片机论坛
 
 
 

回复

1668

帖子

0

TA的资源

裸片初长成(初级)

6
 
MOV R7,#8
这句话改成
MOV R7,#7

重新编译看看。
此帖出自51单片机论坛
 
 
 

回复

54

帖子

0

TA的资源

纯净的硅(初级)

7
 
哈哈,有C的源程序嗎啡
此帖出自51单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

8
 
谢谢各位了,问题解决了
原因出在没正确理解DJNZ这条指令

INT: DJNZ R7,L1  
       MOV R7,#8
L1: MOV A,R7

当R7=1,执行DJNZ时,它就顺序执行下一条了,即重新赋值8
然后查表,表的首地址加8后超出了原来表的范围,而表中的第1个数据项却没有得到输出,
所以出现二极管全亮现象

解决方案:将表的第一项数据加到表最后,总共表中有9个数据,而有效的只有后8项,因为第一项永远都不会被取出执行。
tmpdate: DB 01H,02H,04H,08H,10H,20H,40H,80H,01H

问题解决了,好高兴啊:D
此帖出自51单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

6366

帖子

4929

TA的资源

版主

9
 
呵呵,看来现在汇编还是有很多人在用啊。
由此看来,还是不能把汇编丢弃了,毕竟汇编是基础
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表