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 0030HMAIN: MOV SP,#60H MOV PSW , #00H MOV P2,#0FFH LCALL CSHLOOP: 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 0100HCLOCK: PUSH PSW PUSH ACC SETB RS0 MOV TH0,#03CH MOV TL0,#0B0H INC R6 ;
定时器计数单元加1 LCALLMBXS ;
调码表刷新判断子程序 LCALL JTDPD ;
调交通灯状态判断子程序 CLRRS0 POPACC POPPSWCRETUN: RETI ;----------------------------;
码表刷新子程序;
设计思想:R6
为软件计数器,1s=20*50ms
,判断R6
单元的值能够被20
整除,即为整秒到,显示器应该减1 MBXS: PUSHPSW PUSH ACC MOV A,R6 LCALL ZMPD ;
调整秒判断子程序 MOV A , TIME1 LCALL HBCD MOV TIME2 , ADONE: 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 BZZT0: SJMPRTNZT2_1: MOV A,ZT CJNE A,#02H,ZT3 JB BZ,ZT2_2 CJNE R6,#20,RTN SETB BZ MOV R6,#00H SJMP RTNZT2_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 RTNZT3: 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 ZT0ZT4_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
单元减1RETN: RETHBCD: 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 RETPTDS: MOVR1,A ACALLPTDS1 MOV A,R1 SWAP APTDS1: ANL A,#0FH MOV @R0,A INC R0 RET;----------------------------;
显示器动态扫描子程序 ORG0D50HSSEE: MOVR5,#05HSSE2: MOV30H,#20H MOV 31H,#7EH MOV R7,#06HSSE1: 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 RETDDFF: 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 各位大侠帮忙看一个程序。。
小弟初学。。完全看不明白啊。。谢谢各位了。。
一周热门 更多>