各位单片机高手。。急救啊。。帮忙看一个程序。。谢谢...

2019-07-16 05:22发布

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十进制计数单元的值拆分为高四位和低四位,分送7AH79H单元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 各位大侠帮忙看一个程序。。
小弟初学。。完全看不明白啊。。谢谢各位了。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。