完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
首先给出protues仿真图,其中 LED数码管为共阴数码管
P0口为数码管段码口,段码口驱动为74HC573 P2口为数码管位码口,位码口驱动为74HC573 P1口控制发光二极管,驱动器74HC245 我自己鼓捣的程序完成了倒计时功能,并且可以自己设定初值,但是当我想要通过中断实现交通灯的特殊功能时,发现中断功能无效,比如说 如图 五个按键 连接p3.0到p3.4, JNB P3.0,STOP STOP: CLR P1 SETB P1.2 SETB P1.6 REti 理论上当对应P3.0的按键按下时,跳转到STOP实施中断,然后四个路口的红灯全部都亮 然而我加进去后按了没有反应 程序清单如下,望解惑,谢谢。 ORG 0000H AJMP MAIN ORG 000BH //T0中断向量入口地址 LJMP INT_T0 ORG 0030H MAIN: MOV P0,#0FFH //I/0口,寄存器初始化 MOV P2,#0FFH MOV P1,#0FFH MOV P1,#00H MOV P2,#00H MOV R7,#20 //定时计数器T0定时50ms,循环20次获得一秒定时 /*************T0初始化**************/ MOV TMOD,#01H //定时计数器T0,模式1,16位 MOV TH0,#3CH //50MS定时初值 MOV TL0,#0B0H SETB EA //开总中断 SETB ET0 //开T0中断 SETB TR0 //T0启动 SETB ES SETB EX0 SETB EX1 /********************************** 状态1: 东西红灯亮,倒计时初值20S 南北绿灯亮,倒计时初值17S **********************************/ MOV 50H,#16 MOV 51H,#12 STATE1: MOV R6,50H //东西方向倒计时初值20 MOV R3,51H //南北方向倒计时初值17 MOV P1,#00H SETB P1.6 //东西红灯20s SETB P1.0 //南北绿灯17s /********************************** 状态2: 南北绿灯17S倒计时完成,绿灯熄灭 黄灯点亮,倒计时初值3S **********************************/ STATE2: LCALL DISPLAY //调用显示子程序 CJNE R3,#00H,STATE2 //若倒计时未到0则继续调 CLR A MOV A,50H SUBB A,51H MOV R3,A //黄灯倒计时初值3 CLR P1.0 //绿灯熄灭 SETB P1.1 //黄灯点亮 /********************************** 状态3: 南北黄灯灭,红灯倒计时初值20s 东西红灯灭,绿灯亮,倒计时初值17s **********************************/ STATE3: LCALL DISPLAY CJNE R3,#00H,STATE3 ;ADDC A,#3 MOV R3,50H //南北黄灯灭,红灯倒计时初值20s ;SUBB A,#3 CLR P1.1 SETB P1.2 MOV R6,51H //东西红灯灭,绿灯亮,倒计时初值17s CLR P1.6 SETB P1.4 /********************************** 状态4: 南北持续红灯 东西绿灯灭,黄灯倒计时初值3s **********************************/ STATE4: LCALL DISPLAY CJNE R6,#00H,STATE4 CLR A MOV A,50H SUBB A,51H MOV R6,A //东西绿灯灭,黄灯倒计时初值3s CLR P1.4 SETB P1.5 CLR P1.0 /********************************** 状态5: 黄灯倒计3s完成后所有状态完成, 返回状态1,循环 **********************************/ STATE5: LCALL DISPLAY CJNE R6,#00H,STATE5 LCALL DISPLAY JNB P3.0,STOP SJMP STATE1 //返回状态1 STOP: CLR P1 SETB P1.2 SETB P1.6 RETI ;显示子程序 DISPLAY: MOV DPTR,#TABLE MOV A,R6 MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P2,#11111111B MOV P0,A MOV P2,#11111110B LCALL DELAY_1MS MOV A,B MOVC A,@A+DPTR MOV P2,#11111111B MOV P0,A MOV P2,#11111101B LCALL DELAY_1MS MOV A,R3 MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P2,#11111111B MOV P0,A MOV P2,#11111011B LCALL DELAY_1MS MOV A,B MOVC A,@A+DPTR MOV P2,#11111111B MOV P0,A MOV P2,#11110111B LCALL DELAY_1MS RET ;T0中断子程序 INT_T0: DJNZ R7,NT0 //计数寄存器不为0则跳转,T0重新赋初值 MOV R7,#20 //计数寄存器赋值20 DEC R6 //东西方向倒计时数值减1 DEC R3 //东西方向倒计时数值减1 NT0: MOV TH0,#3CH //T0赋50MS初值 MOV TL0,#0B0H SETB TR0 //启动T0 RETI TABLE: DB 3fh,06h,5bh,4fh DB 66h,6dh,7dh,07h DB 7fh,6fh DELAY_1MS: //1MS软件延时子程序 MOV R5,#5 DELAY1: MOV R4,#200 DELAY2: DJNZ R4,DELAY2 DJNZ R5, DELAY1 RET DL10: MOV R7,#0AH DL: MOV R6,#0FFH DL6: DJNZ R6,DL6 DJNZ R7,DL RET END
|
|
相关推荐
3个回答
|
|
看不懂汇编程序呀
|
|
|
|
没办法,课程设计,我们老师强调得汇编语言,整了好久,好不容易有个大致程序雏形了,结果居然会在中断这步出问题。 |
|
|
|
还是尽量搞成C吧 坛里搞汇编的不多 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之设备组织架构
536 浏览 0 评论
531 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之设备树组成和结构
794 浏览 0 评论
【敏矽微ME32G070开发板免费体验】点亮WS2812B灯板
922 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核启动流程
879 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12160 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 20:34 , Processed in 0.710850 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号