完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ZT EQU 42H BZ BIT 00H tiME1 EQU 40H TIME2 EQU 41H ORG 0 LJMP MAIN ORG 0003H ;外中断0(紧急车辆)处理子程序入口 LJMP JJCL ORG 000BH LJMP CLOCK ORG 0030H MAIN: MOV SP,#60H MOV PSW , #00H MOV P2,#0FFH LCALL CSH LOOP: LCALL SSEE ;调动态扫描子程序 LCALL PTDS0 SJMP LOOP ;---------系统初始化子程序 ;做堆栈调整、8255初始化、定时器、中断初始化,显示缓冲区初始化、进入状态0,启动定时器 CSH: MOV 7EH,#10H MOV7DH,#10H MOV7CH,#10H MOV7BH,#10H MOV7AH,#00H MOV79H,#00H MOVTIME1 , #02H ;状态0持续为2s MOVTIME2 , #02H MOVA,#81H ;8255初始化 MOVDPTR,#0FF23H MOVX@DPTR,A MOVTMOD,#01H ;定时器T0定时50ms MOVTL0,#0B0H MOVTH0,#3CH CLR IT0 ;设置外中断0为电平方式工作 SETBPX0 ;设置外中断0为高级中断 ORLIE,#83H ;开放T0中断 MOVZT, #00H ;进入状态0 MOVP1, #0F6H MOVR6 , #00H MOVR5, #00H ; 软件计数器初始化 SETBTR0 ;启动T0 RET ;-------------------------------- ;交通灯定时中断服务子程序 ORG 0100H CLOCK: PUSH PSW PUSH ACC SETB RS0 MOV TH0,#03CH MOV TL0,#0B0H INC R6 ;定时器计数单元加1 LCALLMBXS ; 调码表刷新判断子程序 LCALL JTDPD ;调交通灯状态判断子程序 CLRRS0 POPACC POPPSW CRETUN: RETI ;---------------------------- ;码表刷新子程序 ;设计思想:R6为软件计数器,1s=20*50ms,判断R6单元的值能够被20整除,即为整秒到,显示器应该减1 MBXS: PUSHPSW PUSH ACC MOV A,R6 LCALL ZMPD ;调整秒判断子程序 MOV A , TIME1 LCALL HBCD MOV TIME2 , A DONE: POPACC POP PSW RET JTDPD: MOV A,ZT CJNE A,#00H,ZT1 CJNE R6,#40,ZT0 MOV ZT,#01H MOV TIME1, #59 MOV P1,#0EEH ; 切换到状态1 MOV R6,#0 LJMP RTN ZT1: MOV A,ZT CJNE A,#01H,ZT2_1 ;东西红,南北绿 CJNE R6,#100,ZT0 MOV R6,#00 INC R5 CJNE R5,#12,ZT0 MOV TIME1, #10 MOV R5,#00H MOV ZT,#02H MOV P1,#0DEH ;切换到状态2_0 MOV R7,#5 CLR BZ ZT0: SJMPRTN ZT2_1: MOV A,ZT CJNE A,#02H,ZT3 JB BZ,ZT2_2 CJNE R6,#20,RTN SETB BZ MOV R6,#00H SJMP RTN ZT2_2: MOVP1,#0FEH ; 切换到状态2_0 CJNE R6,#20,RTN CLR BZ MOV R6,#00H MOV P1,#0DEH ; 切换到状态2-1 DJNZ R7,ZT2_1 MOV TIME1, #59 MOV R6,#00H MOV ZT,#03H MOV P1,#0F5H SJMP RTN ZT3: MOV A,ZT CJNE A,#03H,ZT4_1 CJNE R6,#100,RTN MOV R6,#00 INC R5 CJNE R5,#12,RTN MOV TIME1, #5 MOV R5,#00H MOV ZT,#04H MOV P1,#0F3H ;切换到状态4_1 MOV R7,#5 CLR BZ SJMP ZT0 ZT4_1: MOV A,ZT CJNE A,#04H,ZT1 JB BZ,ZT4_2 CJNE R6,#10,ZT0 SETB BZ MOV R6,#00H SJMP ZT0 ZT4_2: MOVP1,#0F7H ; 切换到状态4_2 CJNE R6,#10,ZT0 CLR BZ MOV R6,#00H MOV P1,#0F3H ; 切换到状态4-1 DJNZ R7,ZT4_1 MOV TIME1, #59 MOV R6,#00H MOV ZT,#01H MOV P1,#0EEH SJMP ZT0 RTN: RETI ;------------------------------------- ;整秒判断子程序。; ;入口:(A)=软件计数器值 ;出口:整秒到,TIME1计数单元减1 ZMPD: MOVB , #20 DIV AB ;判断整秒到否? MOV A , B JNZ RETN ;整秒未到,返回 DEC TIME1 ;整秒到,TIME1单元减1 RETN: RET HBCD: MOV B , #100 DIV AB MOV A , B MOV B, #10 DIV AB SWAP A ORL A,B RET ;--------------------------- ;拆字子程序,将TIME2十进制计数单元的值拆分为高四位和低四位,分送7AH和79H单元 PTDS0: MOVR0,#79H MOV A,TIME2 ACALL PTDS RET PTDS: MOVR1,A ACALLPTDS1 MOV A,R1 SWAP A PTDS1: ANL A,#0FH MOV @R0,A INC R0 RET ;---------------------------- ;显示器动态扫描子程序 ORG0D50H SSEE: MOVR5,#05H SSE2: MOV30H,#20H MOV 31H,#7EH MOV R7,#06H SSE1: MOVR1,#20H MOV A,30H CPL A MOVX @R1,A MOV R0,31H MOV A,@R0 MOV DPTR,#DDFF MOVC A,@A+DPTR MOV R1,#21H MOVX @R1,A MOV A,30H RRA MOV30H,A DEC31H MOVA,#0FFH MOVX @R1,A DJNZR7,SSE1 DJNZR5,SSE2 RET DDFF: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH ;--------------------------------------- ;外中断模拟紧急车辆通行,四个路口全部红灯 JJCL: PUSHACC PUSH PSW PUSH P1 CLR TR0 ;停止T0计数器 JJLOOP:MOV P1 , #0F6H JNB p3.2, JJLOOP ;外中断撤除否? POP P1 POP PSW POP ACC SETB TR0 RETI END 各位大侠帮忙看一个程序。。 小弟初学。。完全看不明白啊。。谢谢各位了。。 |
|
相关推荐
1个回答
|
|
汇编啊 完全看不懂!!{:soso_e117:}
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
852 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
592 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
705 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
926 浏览 2 评论
657 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11992 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 20:43 , Processed in 0.622980 second(s), Total 73, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号