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

📄 改好的源程序.asm

📁 是基于微机(8086)的交通灯控制。8086与8255相连
💻 ASM
字号:
;设置数据段,以及端口地址分配
   data segment
        pb db ?
        porta equ 1024h
        portb equ 1025h
        portc equ 1026h
        ptcon equ 1027h
        mess db 'ENTER ANY KEY CAN EXIT TO DOS!',0dh,0ah,'$'
data ends


;设置堆栈段和代码段
stack segment stack
        sta dw 50 dup(?)
        top equ length sta
   stack ends

 code segment
       assume cs:code,ds:data,es:data,ss:stack


start:          mov ax,data
                mov ds,ax
                mov es,ax
                mov ah,09h          ;显示
                mov dx,offset mess
                int 21h
                mov dx,ptcon         ;输入控制字
                mov al,80h      ;工作在方式0
                out dx,al ;A、B、C口都为输出

;初始化设置
mov dx,portb          ;控制4个黄灯灭
mov al,0ffh
out dx,al
mov dx,portc         ;控制4个绿灯灭
mov al,0f0h           ;4个红灯亮
out dx,al                    

   call delay1            ;延时
mov pb,11111010b     ;1,3路口绿灯亮
mov al,11110101       ;2,4路口红灯亮

;开始控制程序
lll:        mov dx,porta           ;点亮2,4红灯
            out dx,al
           mov dx,portc          ;点亮1,3绿灯
            out dx,pb
            mov cx,0x0ah           ;延时程序循环10次,实现10S延时    
222:       call delay1
            DEC cx                 
            jnz  222               ; 延时10S
       
            or al,00000101       ;1,3绿灯灭,其它绿灯亮灭不变
            out dx,al   
            mov cx,0003h       ;黄灯闪烁次数
           
333:        mov dx,portb       ;绿灯亮的相应位置黄灯亮
            and al,11111010b  ;1,3黄灯亮
            out dx,al
            call delay1   
            or al,00000101b  ;1,3黄灯灭
            out dx,al         
            dec  cx            ;实现3次闪烁
            jnz 333

           
            mov  al,11111010       ;1,3路口红灯亮
             out dx,al
            mov dx,portc       ;控制绿灯
            mov al,11110101b  ;2,4绿灯亮
            out dx,al
            
              mov cx,0x0ah           ;延时程序循环10次,实现10S延时    
444:       call delay1
            DEC cx                 
            jnz  444              ; 延时10S
             
             or al,00001010;     2,4路口绿灯灭,其他绿灯状态不变
             out dx,al

555:        
            and al,11110101b  ;2,4黄灯亮,其他黄灯不变
            out dx,al
            call delay1   
            or al,00001010b  ;2,4黄灯灭,其它不变
            out dx,al         
            dec  cx            ;实现3次闪烁
            jnz 555
            
            jmp lll      ;继续控制红绿灯
ppp:    mov ax,4c00h     ;退出,回到DOS
            int 21h

;延时程序;用来进行1S钟的延迟
      delay1:PUSHF
      PUSH   BX
      PUSH   CX
MOV   BX,3E8H        ; BX的值为1000
LP2:  MOV CX,176H    ;设定循环次数
LP1:  PUSHF
      POPF
      LOOP  LP1      ;CX减1后若不等于0转LP1
      DEC    BX
      JNZ     LP2
      POP    CX
      POP   BX
      POPF
      RET
  end

⌨️ 快捷键说明

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