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

📄 88998.asm

📁 电子信息工程微机原理实验红绿灯程序设计举例
💻 ASM
字号:
CODE SEGMENT          ;定义代码段
ASSUME CS:CODE        ;段寄存器说明
ORG 1000H             ;指定地址伪指令
INTQ EQU INTREEUP
AB DW ?               ;设置参数变量
CC DB ?
AA DB ?
COU DB ?
CON DB ?
HU DB ?
DE DB ?
BD DB ?
BB DB ?
START: MOV BD,0
       MOV CC,0
       MOV AB,0
       MOV BB,0
       MOV HU,0
  MOV DX,04BH
  MOV AL,0BEH        ;置8253通道2方式控制字
  OUT DX,AL
  MOV DX,04AH
  MOV AX,2710H       ;置8253通道2计数初值
  OUT DX,AL
  MOV AL,AH
  OUT DX,AL
  MOV AL,13H         ;初始化8259 ICW1
  MOV DX,20H
  OUT DX,AL
  MOV AL,08H         ;初始化8259 ICW2
  MOV DX,21H
  OUT DX,AL
  MOV AL,03H         ;初始化8259 ICW4
  OUT DX,AL
  MOV AL,0FBH        ;初始化8259 0CW1
  OUT DX,AL
  MOV AX,0H          ;置8259中断向量
  MOV ES,AX
  MOV DI,0028H
  LEA AX,INTQ        ;有效地址传送
  STOSW              ;字符串存储指令
  MOV AX,CS
  STOSW
  STI                ;开中断
  
  
  
          MOV DX,73H
          MOV AL,81H   ;8255初始化
          OUT DX,AL
          MOV DX,71H
          MOV AL,36H   ;所有路口红灯亮
          OUT DX,AL
          CALL DELAY2  ;过程调用指令
CYCLE1:    MOV COU,2
        
START1:   MOV AL,81H
          OUT 73H,AL
          MOV CH,1     ;置倒计时初值
          MOV CL,9
          
NS:       MOV AL,1EH   ;NS方向绿灯亮,通车
          OUT 71H,AL
          CALL NS1
          CALL DELAY2
          CMP CL,8     ;比较指令
          JNE NS       ;条件转移指令(ZF=0,转至标号出执行)
          CMP CH,0   ;比较指令
          JNZ C1
          MOV AA,5
          MOV CH,0
          MOV CL,4
          
I1:       CALL NS1        ;显示黄灯倒计时
          MOV AL,2EH      ;等待,黄灯闪烁5S
          MOV DX,71H
          OUT DX,AL
          CALL DELAY1
          MOV AL,3EH
          OUT DX,AL
          CALL DELAY1
          DEC AA     ;减一指令
          JNZ I1
          CALL NS1
          
D1:       JMP START2
C1:       DEC CH
          JMP NS     ;无条件转移指令

START2:   MOV CL,9
          MOV CH,1
          
EW:       MOV AL,33H         ;EW方向绿灯亮,通车
          OUT 71H,AL
          CALL EW1
          CALL DELAY2

          CMP CL,8
          JNE EW
          CMP CH,0
          JNZ C2
          MOV AA,5
          MOV CH,0
          MOV CL,4
          
I2:       CALL EW1               ;显示黄灯倒计时
          MOV AL,35H             ;等待,黄灯闪烁5S
          MOV DX,71H
          OUT DX,AL
          CALL DELAY1
          MOV AL,37H
          OUT DX,AL
          CALL DELAY1
          DEC AA
          JNZ I2
          CALL EW1
          
D2:     DEC COU              ;判断是否到了晚上
        JZ START3      ;条件转移指令(ZF=1)
        JMP START1
        
C2:       DEC CH
          JMP EW
          
START3:MOV CON,10           ;晚间黄灯数码管闪烁程序

CYCLE2:MOV DX,71H
       MOV AL,3FH
       OUT DX,AL
       MOV BL,00H
       MOV AL,80H
       OUT 0DFH,AL
       MOV AL,BL
       OUT 0DEH,AL
       MOV AL,81H
       OUT 0DFH,AL
       MOV AL,BL
       OUT 0DEH,AL
       MOV AL,84H
       OUT 0DFH,AL
       MOV AL,BL
       OUT 0DEH,AL
       MOV AL,85H
       OUT 0DFH,AL
       MOV AL,BL
       OUT 0DEH,AL          ;黄灯亮,数码管亮
       CALL DELAY1          ;延时0.5S
       MOV DX,71H
       MOV AL,2DH
       OUT DX,AL
       MOV BL,3FH
       MOV AL,80H
       OUT 0DFH,AL
       MOV AL,BL
       OUT 0DEH,AL
       MOV AL,81H
       OUT 0DFH,AL
       MOV AL,BL
       OUT 0DEH,AL
       MOV AL,84H
       OUT 0DFH,AL
       MOV AL,BL
       OUT 0DEH,AL
       MOV AL,85H
       OUT 0DFH,AL
       MOV AL,BL
       OUT 0DEH,AL          ;黄灯灭,数码管灭
       CALL DELAY1          ;延时0.5S
       DEC CON              ;判断是否到了白天
       JNZ  CYCLE2
       JMP  CYCLE1
       
DELAY1: MOV AX,AB         ;延时0.5S
        ADD AX,1     ;加法指令
     Y1:CMP AB,AX
        JL Y1       ;条件转移(大于)
        RET        ;返回指令
        
DELAY2: CALL DELAY1      ;延时1S
        CALL DELAY1
        RET
NS1:      MOV AL,80H
          OUT 0DFH,AL   ;8279初始化
          MOV BX,OFFSET TABLE1
          MOV AL,CL
          XLAT      ;查表指令{(BX)+(AL)——AL
          OUT 0DEH,AL    ;数码管显示倒计时
          CMP CL,0
          JNZ A1
B1:       MOV CL,9
          JMP NEXT1
A1:       DEC CL


NEXT1:    MOV AL,81H       ;8279初始化
          OUT 0DFH,AL
          MOV BX,OFFSET TABLE2
          MOV AL,CH
          XLAT
          OUT 0DEH,AL     ;数码管显示倒计时
          RET
EW1:      MOV AL,84H
          OUT 0DFH,AL
          MOV BX,OFFSET TABLE1
          MOV AL,CL
          XLAT
          OUT 0DEH,AL

          CMP CL,0
          JNZ A2
B2:        MOV CL,9
          JMP NEXT2
A2:        DEC CL

NEXT2:    MOV AL,85H
          OUT 0DFH,AL
          MOV BX,OFFSET TABLE2
          MOV AL,CH
          XLAT
          OUT 0DEH,AL
          RET
        
INTREEUP: PUSH AX           ;中断服务程序
H1:  IN AL,72H         ;读8255C口
     AND AL,01H
     CMP AL,0
     JG STOP           ;PC0为1转STOP程序
     INC CC
     CMP CC,50
     JL K
     MOV CC,0
     INC AB
     INC HU
     CMP HU,3
     JGE H2
     MOV AL,7FH        ;指示工作灯亮
     OUT 72H,AL
     POP AX
     IRET
K:  POP AX
    IRET
STOP:                  ;紧急情况程序
    MOV AL,36H
    OUT 71H,AL         ;红灯全亮
    INC BD
    CMP BD,50
    JL K
    MOV BD,0
    INC BB
    CMP BB,3
    JGE H4
    MOV AL,7FH         ;指示工作灯亮
    OUT 72H,AL
    JMP K
H2:MOV AL,80H          ;指示工作灯灭
    OUT 72H,AL
    CMP HU,4
    JGE H3
    JMP K
H3:MOV HU,0
   JMP K
H4: MOV AL,80H         ;指示工作灯灭
    OUT 72H,AL
    CMP BB,4
    JGE H5
    JMP K
H5:MOV BB,0
   JMP K

TABLE1 DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH
TABLE2 DB 3FH,06H,5BH,4FH,66H,6DH,7DH
CODE  ENDS
END START
          
          

⌨️ 快捷键说明

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