完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在用STC89C52,来实现用两位共阴极数码管对外部中断0也就是P3.2口按下次数显示时,实际运行后发现会出现按到某个数值时,再次按下时并不反应,数字停止不动。请教大神,这是什么原因,恳请大神们帮帮忙,实在是搞不懂。程序如下:
ORG 0000H ;上电复位入口地址 LJMP MAIN ORG 0003H ;外部中断入口 LJMP IOTN0 ORG 0100H MAIN: MOV IE,#81H ;开总中断,开INT0中断 MOV TCON,#00H ;设置INT0为低电平触发 MOV P0,#0FFH ;1111 1111 MOV R0,#00H ;0000 0000 MOV R1,#00H ;0000 0000 MOV R2,#0AH ;0000 1010 MOV R3,#0AH ;0000 1010 MOV DPTR,#TAB ;将TAB这个表的首地址赋值给数据指针DPTR MOV SP,#60H START:MOV A,R0 ;将0000 0000给A MOVC A,@A+DPTR ;将A中的值,加上DPTR里的值,访问程序段中这个地址的值,取出来送给A。 MOV P2,A ;将A送到P2口 CLR P0.0 ;显示个位数 ACALL DELAY1MS ;调用延时函数 SETB P0.0 ;灭掉个位数 MOV A,R1 ;将0000 0000给A MOVC A,@A+DPTR ;将A中的值,加上DPTR里的值,访问程序段中这个地址的值,取出来送给A。 MOV P2,A ;将A送到P2口 CLR P0.1 ;显示十位数 ACALL DELAY1MS ;调用延时函数 SETB P0.1 ;灭掉十位数 JMP START ;循环执行START IOTN0:MOV IE,#00H ;关中断 JB P3.2,LOOP0 ;位判1转 ACALL DELAY250MS ;调用延时函数 JNB P3.2,$ ;位判0转 INC R0 ;R0<--(R0)+1 DEC R2 ;R2<--(R2)-1 MOV A,R2 ;将R2给A JZ LOOP1 ;对A判0转 MOV IE,#81H CLR IE0 ;开中断 REti ;中断返回 LOOP0: RET ;返回 LOOP1: MOV R0,#00H ;0000 0000给R0 MOV R2,#0AH ;0000 1010给R2 INC R1 ;R1<--(R1)+1 DEC R3 ;R3<--(R3)-1 MOV A,R3 ;R3给A JZ LOOP2 ;对A判0转 MOV IE,#81H ;开中断 RETI ;中断返回 LOOP2: MOV R1,#00H ;0000 0000给R1 MOV R3,#0AH ;0000 1010给R3 MOV IE,#81H ;开中断 RETI ;中断返回 TAB:DB 0F6H,50H,0C7H,0D3H,71H,0B3H,0B7H,0D0H,0F7H,0F3H ;0123456789 DELAY250MS:MOV R6,#250 ;1us DL1:MOV R7,#249 ;1us DL0:NOP ;1us NOP ;1us DJNZ R7,DL0 ;(2+2)*249=996 DJNZ R6,DL1 ;1+(2+996)*250=249 501 us=250ms RET ;返回 DELAY1MS:MOV R7,#249 ;1us DL:NOP ;1us NOP ;1us DJNZ R7,DL ;1+(2+2)*249=997us=1ms RET ;返回 END |
|
相关推荐
15个回答
|
|
|
|
|
|
|
|
|
|
谢谢你,那个,我是新手,不太会那设置断点调试。呃,我的那个现象是:上电后,我每按一次按钮,就进入一次中断,然后数码管就相当于计数我按的次数,即,假设我按了三次,数码管就显示3,但有时候我接着再按,他就不计数,数码管就一直显示3不动,无论我怎么按都没变化了,我个人认为这是所谓的死机(程序跑飞)应该不是主循环的问题。 |
|
|
|
|
|
|
|
RET改为RETI应该就可以啦
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
对按键按下次数的计算处理做复杂了,有些难理解,另外P0口是需要接上拉电阻的,复位电路里的电阻最好是10K的
|
|
|
|
按键那里的话,我是用中断0口,对该口进行电平检测,(这里有软件延时,为了按键去抖)检测到低电平就进入中断,中断是用数据表(TAB)的形式进行查询(按一次,数据表就会查询到下一个数据)并赋给数码管以显示数值,START那里的话是利用眼睛的扫描频率,对数码管进行动态显示。而后面的上啦电阻等方面,我认为是次要的,应该不影响死机,我还查了一下,有人认为是堆栈溢出,但我也不是很懂。。。 |
|
|
|
这是这个实验的题目:试利用外部中断输入的原理实现扰动监查的功能,即通过人为方式将外部中断输入引脚接地,从而产生低电平中断(模拟低电平干扰),能够通过两位的LED显示器显示干扰的次数 |
|
|
|
用你的程序和电路图,做了仿真,把
LOOP0: RET ;返回 的RET改为RETI后,没发现死机的问题,显示数字可以在0-99之间循环,不过是需要按键释放后才会更新显示。 或者你再测试一下,把遇到的问题详细描述一下,比如死机时是什么状态,什么情况下会死机 |
|
|
|
用你的程序和电路图,做了仿真,把
LOOP0: RET ;返回 的RET改为RETI后,没发现死机的问题,显示数字可以在0-99之间循环,不过是需要按键释放后才会更新显示。 或者你再测试一下,把遇到的问题详细描述一下,比如死机时是什么状态,什么情况下会死机 |
|
|
|
仿真是应该没问题,但实物是不行的,我把程序烧进单片机后,刚开始没问题,但按了几个循环后,就会出现死机现象(假设我从00开始按,按一次,变为01,再按一次,变为02,以此类推,有时候我按到25,接着再按一次,应该是26,但他一直是25,无论我再怎么按,也不会变化。)复位后,又能重新开始,正常运行,但按了十几下,又会死机,自从复位后,我就不能按一个循环了,都是按到某个数后就死机。 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
795 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
668 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
845 浏览 0 评论
1508 浏览 3 评论
由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常?
2409 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
3681 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-28 17:49 , Processed in 0.497594 second(s), Total 51, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号