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

📄 交通灯05042005.asm

📁 我们做微机硬件综合实验做的一个交通信号灯实时控制系统设计
💻 ASM
字号:
      .model      small
      .stack
      .data
count       DB    0
running     db    'running',13,10,'$'
message     db    'inter',13,10,'$'
time        db    '.','$'

      .code
main  proc  far
start:
      mov   ax,@data
      mov   ds,ax
      
      cli   ;中断标志置0      IF<-0

      mov   ah,09
      lea   dx,running
      int   21h

      mov   al,0fh      ;0bH
      mov   ah,35h
      int   21h
      push  es
      push  bx
      push  ds
      
      ;设置两个中断向量

      mov   ax,seg interproc
      mov   ds,ax
      mov   dx,offset interproc
      mov   al,0fh
      mov   ah,25h
      int   21h
      pop   ds
      pop   bx
      pop   es

      mov   al,0bh      ;0bH
      mov   ah,35h
      int   21h
      push  es
      push  bx
      push  ds
      mov   ax,seg timeproc
      mov   ds,ax
      mov   dx,offset timeproc
      mov   al,0bh
      mov   ah,25h
      int   21h
      pop   ds
      pop   bx
      pop   es
      
      ;保存原8259屏蔽字
      in    al,21h
      push  ax
      
      in    al,0a1h
      push  ax

      mov   al,071h
      out   21h,al
      
      mov   al,0fdh
      out   0a1h,al
      
      ;初始化8253,设置两个计数器的工作方式
      ;定时器0    工作方式3(方波方式)     10ms
      mov   dx,213h
      mov   al,16h      ;控制字
      out   dx,al

      mov   dx,210h
      mov   al,64h
      out   dx,al
      
      ;定时器1    工作方式2(分频方式)     100个数
      mov   dx,213h
      mov   al,54h      ;控制字
      out   dx,al
      
      mov   dx,211h
      mov   al,00001010b
      out   dx,al
      
      ;初始化8255,设置各端口的工作模式
      mov   dx,233h
      mov   al,10001111b      ;控制字
      out   dx,al
      
      ;将8255的pc2置1,允许中断
      mov   dx,233h
      mov   al,00000101b
      out   dx,al
      
repeat:      ;开中断,等待
      sti
      
      ;从8255的A端口送出红绿灯信号
      mov   dx,230h
      mov   al,01000010b      ;主绿支红
      out   dx,al
      
      mov   ah,1        ;Ctrl+C
      int   16h
      jz    repeat
      cli
      pop   ax
      out   0a1h,al
      pop   ax
      out   21h,al
      sti
      ;返回DOS
      mov   ax,4c00h
      int   21h
main  endp

interproc   proc  near  ;中断处理程序
      ;保存现场
      cli
      push  ds
      push  ax
      push  cx
      push  dx
      
      mov   ax,@data
      mov   ds,ax
      
      mov   ah,09
      lea   dx,message
      int   21h
      
      mov   dx,231h
      in    al,dx
      
            ;主干道有3辆车吗?
      mov   dx,232h
      in    al,dx

      and   al,11100000b      ;7,6,5
      cmp   al,11100000b
      jz    goend
      
      ;清除秒计算器
      mov   count,0
      
      ;送主干道黄灯,支干道红灯数据
      mov   dx,230h
      mov   al,11000010b      ;主黄支红
      out   dx,al
      sti
      ;计数
suchao:
      cmp   count,4
      jnz   suchao
      
      ;秒计数器清零,送主干道红灯,支干道绿灯数据
      mov   count,0
      
      mov   dx,230h
      mov   al,10000001b      ;主红支绿
      out   dx,al
      
captain:
      cmp   count,25
      jz    cipher
      
      ;主干道有3辆车吗?
      mov   dx,232h
      in    al,dx

      and   al,11100000b      ;7,6,5
      cmp   al,11100000b
      jnz   captain

cipher:
      ;秒计数器清0,并送主干道红灯,支干道黄灯数据
      mov   count,0
      
      mov   dx,230h
      mov   al,10000011b      ;主红支黄
      out   dx,al
      
smartcat:
      cmp   count,4
      jnz   smartcat
goend:
      mov   al,20h
      out   20h,al
      out   0a0h,al
      ;恢复现场
      pop   dx
      pop   cx
      pop   ax
      pop   ds

      iret  ;退出中断
interproc   endp

timeproc    proc  near  ;时间中断
      ;保存现场
      cli
      push  ds
      push  ax
      push  cx
      push  dx

      mov   ax,@data
      mov   ds,ax

      inc   count
      
      mov   ah,09
      lea   dx,time
      int   21h

      mov   al,20h
      out   20h,al
      out   0a0h,al
      
      ;恢复现场
      pop   dx
      pop   cx
      pop   ax
      pop   ds
      sti
      iret  ;退出中断

timeproc    endp

      end   start
      
      
      


      
      
      

⌨️ 快捷键说明

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