⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jdd5.asm

📁 单片机AT89c52 城市道口交通等控制系统的模型的设计
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        OUTT00:    POP 	 PSW               ;恢复状态字(出栈)
                   POP   ACC               ;恢复累加器
                   SETB  ET0               ;开放T0中断
                   RETI                    ;中断返回
;
  INT22:           DEC   TIME
                   MOV   A,TIME
                   CJNE  A,TIMED1,LOOP111    ; 判断是否小于110秒
         LOOP111:   JC    LOOP221           ; 120-110
                   MOV   EW,#66H          ;   I
                   MOV   SN,#55H          ;   I
                   LJMP  OUTT01            ; 120-110

         LOOP221:   MOV   A,TIME
                   CJNE  A,TIMED2,LOOP331   ; 判断是否小于70秒
         LOOP331:   JC    LOOP441           ; 110-70
                   MOV   EW,#6AH          ;   I
                   MOV   SN,#59H          ;   I
                   LJMP  OUTT01            ; 110-70


         LOOP441:   MOV   A,TIME
                   CJNE  A,TIMED3,LOOP551    ; 判断是否小于60秒
         LOOP551:   JC    LOOP661           ; 70-60
                   MOV   20H,EW           ;
                   CPL   04H              ;
                   CPL   00H
                   MOV   EW,20H             ;   I
                   MOV   SN,#59H          ;   I
                   LJMP  OUTT01            ; 70-60

         LOOP661:   MOV   A,TIME
                   CJNE  A,TIMED4,LOOP771    ; 判断是否小于10秒
         LOOP771:   JC    LOOP881           ; 60-10
                   MOV   EW,#99H            ;   I
                   MOV   SN,#59H          ;   I
                   LJMP  OUTT01            ; 60-10

         LOOP881:   MOV   A,TIME
                   JZ    OUT881
                   MOV   20H,EW           ;
                   CPL   06H              ;
                   CPL   02H
                   MOV   EW,20H           ;
                   MOV   20H,SN
                   CPL   02H
                   MOV   SN,20H          ;   I
                   LJMP  OUTT01            ; 70-60

         OUT881:    MOV  TIME,TIMED0         ;120秒初值
                   CPL  SNEWFLAG
         OUTT01:    LCALL  TUNBCD     ;
                    POP 	 PSW               ;恢复状态字(出栈)
                   POP   ACC               ;恢复累加器
                   SETB  ET0               ;开放T0中断
                   RETI                    ;中断返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           显示程序                  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 显示数据在70H-75H单元内,用六位LED共阳数码管显示,P0口输出段码数据,P2口作
; 扫描控制,每个LED数码管亮1MS时间再逐位循环。
          DISPLAY: MOV 		R1,#70H       ;指向显示数据首址
                   MOV 		R5,#0FEH      ;扫描控制字初值
             PLAY: MOV 		A,R5          ;扫描字放入A
                   MOV 		SCAN,A          ;从P2口输出
                   MOV 		A,@R1         ;取显示数据到A
                   MOV 		DPTR,#TAB     ;取段码表地址
                   MOVC		A,@A+DPTR     ;查显示数据对应段码
                   MOV 		LEDOUT,A          ;段码放入P0口
       LOOP6:      LCALL 	DL1MS         ;显示1MS
                   INC 		R1            ;指向下一地址
                   MOV 		A,R5            ;扫描控制字放入A
                   JNB 		ACC.2,ENDOUT    ;ACC.5=0时一次显示结束
                   RL 		A               ;A中数据循环左移
                   MOV 		R5,A            ;放回R5内
                   MOV 		LEDOUT,#0FFH
                   AJMP 	PLAY            ;跳回PLAY循环
           ENDOUT: MOV          LEDOUT,#0FFH            ;一次显示结束,P2口复位
                   MOV 		SCAN,#0FFH       ;P0口复位
                   RET                      ;子程序返回
             TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH
;共阳段码表          "0""1""2" "3""4""5""6""7" "8""9""不亮"“A”“-”
;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           延时程序                  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;1MS延时程序,LED显示程序用
             DL1MS: MOV 	R6,#14H
             DL1:   MOV 	R7,#19H
             DL2:   DJNZ 	R7,DL2
                    DJNZ 	R6,DL1
                    RET
;
;
TUNBCD:   PUSH   ACC
          PUSH   PSW
          PUSH   B
          MOV     A,TIME           ;
          MOV     B,#100          ;
          DIV     AB              ;
          MOV     72H,A
          JNZ   JJ0
          MOV   72H,#0AH    ;最高位为零,不点亮
JJ0:      MOV   A,  B
          MOV   B,#10          ;
          DIV     AB
          MOV     71H,A
          JNZ   JJ1
          MOV   A,72H    ;次高位为0,先看最高位是否为不亮
          SUBB  A,#0AH
          JNZ   JJ1
          MOV   71H,#0AH ;最高位不亮,次高位也不亮
JJ1:      MOV   70H,B
          POP   B
          POP   PSW
          POP   ACC
          RET
;119L车中断程序;
INT11:    PUSH   ACC
          PUSH   PSW
          CLR   EX1
          CLR   ET0
          CLR   TR0
          MOV   SN,#055H       ; 全红灯
          MOV   EW,#055H       ;
          MOV   TIMESFR,TIME  ;保存道口数据
          MOV   TIME,#0FH
          MOV   CONR5,#20
          LCALL TUNBCD
          SETB  ET1
          SETB  TR1
;          SETB  EX1
          POP   PSW
          POP   ACC
          RETI
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           15秒计时程序              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T1中断服务程序
            INTT1: PUSH  ACC           ;累加器入栈保护
                   PUSH  PSW           ;状态字入栈保护
                   CLR   ET1           ;关T0中断允许
                   CLR   TR1           ;关闭定时器T0
                   MOV   A,#0B7H       ;中断响应时间同步修正
                   ADD   A,TL1         ;低8位初值修正
                   MOV   TL1,A         ;重装初值(低8位修正值)
                   MOV   A,#3CH        ;高8位初值修正
                   ADDC  A,TH1         ;
                   MOV   TH1,A         ;重装初值(高8位修正值)
                   SETB  TR1           ;开启定时器T0
                   DJNZ  CONR5, OUTT333         ;20次中断未到中断退出
                   MOV	 CONR5,#14H           ;20次中断到(1秒)重赋初值
                   DEC   TIME
                   LCALL TUNBCD
                   MOV   A,TIME
                   JZ    OUT444
          OUTT333: SETB  ET1
                   POP   PSW
                   POP   ACC
                   RETI
            OUT444:CLR TR1
                   CLR ET1
                   MOV TIME,TIMESFR
                   LCALL TUNBCD
                   SETB  ET0
                   SETB  TR0
                   SETB  EX1
                   POP   PSW
                   POP   ACC
                   RETI






          END                     ;程序结束

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -