找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1242|回复: 0
打印 上一主题 下一主题
收起左侧

[微机]建立在8086CPU 8253与8255芯片之上的交通灯控制系统 Proteus仿真

[复制链接]
跳转到指定楼层
楼主
这是我上个月做的单片机交通灯设计,用了一个星期的时间,
附件里面包含交通灯的单片机源代码,
和proteus(proteus)仿真工程文件以及设计的文档都是自己原创的,
请大家多多指教
最终呈现的结果是:通行时间30s,间隔时间 3s,在间隔时间里黄灯闪烁3次每0.5s闪烁一次
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

单片机源程序如下:
  1. ;8255的地址
  2. PA                EQU                08H        
  3. PB                EQU                0AH
  4. PC                EQU                0CH
  5. CONW                EQU                0EH

  6. ;8253的地址
  7. AD82530                EQU                10H
  8. AD82531                EQU                12H
  9. AD82532                EQU                14H
  10. AD8253CONW        EQU                16H
  11. ;============================
  12. STACK        SEGMENT        STACK      
  13.         DB        200        DUP(0)
  14. STACK ENDS
  15. ;============================

  16. DATA        SEGMENT
  17.         ;延时
  18.         ONE                DB  6                ;灯组1延时
  19.         TWO_1                DB  1                ;灯组2亮延时
  20.         TWO_2                DB  1                ;灯组2灭延时
  21.         THREE                DB  6                ;灯组3延时
  22.         FOUR_1                DB  1                ;灯组4亮延时
  23.         FOUR_2                DB  1                ;灯组4灭延时
  24.         ;闪烁次数
  25.         C2                DB  2                ;闪烁3次
  26.         C4                DB  2
  27.         ;灯组定义
  28.         TF1                BYTE                081h        ;第一组灯
  29.         TF2                BYTE                082h        ;第二组灯亮(黄灯亮)
  30.         TF3                BYTE                080h        ;第二组灯灭(黄灯灭)
  31.         TF4                BYTE                024h        ;第三组灯
  32.         TF5                BYTE                044h        ;第四组灯亮(黄灯亮)
  33.         TF6                BYTE                004h        ;第四组灯灭(黄灯灭)
  34. DATA        ENDS
  35. ;=============================
  36. CODE        SEGMENT
  37. ASSUME        CS:CODE, DS:DATA
  38. START:
  39.         PUSH        DS
  40.         MOV        AX, DATA
  41.         MOV        DS, AX
  42.         ;=================
  43.         ;设置中断向量8253
  44.         CLI               
  45.         MOV        AX, 0
  46.         MOV        ES, AX            
  47.         MOV        SI, 08H              
  48.         MOV        AX, OFFSET TIME_INT           
  49.         MOV        ES:[SI], AX
  50.         MOV        AX, CS               
  51.         MOV        ES:[SI+2], AX
  52.         ;=================
  53.         ;初始化8255A
  54.         MOV        AL, 80H
  55.         OUT        CONW, AL
  56.         ;初始化8253
  57.         MOV        AL, 36H
  58.         OUT        AD8253CONW, AL
  59.         MOV        AX, 32500        ;计数初值,0.5s
  60.         OUT        AD82530, AL
  61.         MOV        AL, AH
  62.         OUT        AD82530, AL

  63.         ;===============
  64.         W:
  65.                JMP        W        ;循环等待中断
  66. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
  67. ;第一组灯判断
  68. DENG1:        MOV        AL, ONE
  69.         CMP        AL, 0                ;中断判断
  70.         JNE        DENG1ON                ;跳转第一组灯
  71.         JE        DENG2                ;跳转第二组灯判断
  72. DENG1ON:
  73.         DEC ONE                        ;定时减1
  74.         MOV DX,PC
  75.         MOV AL,TF1                ;第一组灯亮
  76.         OUT DX,AL
  77.         RET
  78. ;第二组灯判断
  79. DENG2:
  80.    ;第二组灯亮判断
  81.    DENG2_1:
  82.            MOV        AL, TWO_1
  83.            CMP        AL, 0                ;中断判断
  84.            JNE        DENG2ON                ;跳转第二组灯亮
  85.            JE        DENG2_2                ;跳转第二组灯灭判断
  86.            
  87.    DENG2ON:
  88.            DEC TWO_1                ;定时减1
  89.            MOV DX,PC
  90.            MOV AL,TF2                ;第二组灯亮
  91.            OUT DX,AL
  92.            RET
  93.            
  94.    ;第二组灯暗判断
  95.    DENG2_2:        
  96.            MOV        AL, TWO_2
  97.            CMP        AL, 0                ;中断判断
  98.            JNE        DENG2OFF        ;跳转第二组灯灭
  99.            CMP        C2,0                ;判断闪烁次数
  100.            JE        DENG3                ;跳转第三组灯判断
  101.            
  102.    DENG2OFF:
  103.            DEC TWO_2
  104.            MOV DX,PC
  105.            MOV AL,TF3                ;第二组灯灭
  106.            OUT DX,AL
  107.            CMP C2,0                ;闪烁次数未到
  108.            JNE RE_DENG2                ;重置第二组灯
  109.            RET

  110. ;第二组灯重置
  111. RE_DENG2:
  112.    DEC C2
  113.    MOV AL,1
  114.    MOV TWO_1,AL
  115.    MOV TWO_2,AL
  116.    RET

  117. ;第三组灯判断   
  118. DENG3:        MOV        AL, THREE
  119.         CMP        AL, 0                ;中断判断
  120.         JNE        DENG3ON                ;跳转第三组灯
  121.         JE        DENG4                ;跳转第四组灯
  122. DENG3ON:
  123.         DEC THREE
  124.         MOV DX,PC
  125.         MOV AL,TF4                ;第三组灯亮
  126.         OUT DX,AL
  127.         RET
  128. ;第四组灯判断
  129. DENG4:
  130.    DENG4_1:
  131.            MOV        AL, FOUR_1
  132.            CMP        AL, 0                ;中断判断
  133.            JNE        DENG4ON                ;跳转第四组灯亮
  134.            JE        DENG4_2                ;跳转第四组灯灭判断
  135.            
  136.    DENG4ON:
  137.            DEC FOUR_1
  138.            MOV DX,PC
  139.            MOV AL,TF5                ;第四组灯亮
  140.            OUT DX,AL
  141.            RET
  142.            
  143.    DENG4_2:        
  144.            MOV        AL, FOUR_2
  145.            CMP        AL, 0                ;中断判断
  146.            JNE        DENG4OFF        ;跳转第四组灯灭
  147.            CMP        C4,0                ;判断闪烁次数
  148.            JE        RE_ALL                ;重置所有灯组
  149.            
  150.    DENG4OFF:
  151.            DEC FOUR_2
  152.            MOV DX,PC
  153.            MOV AL,TF6                ;第四组灯灭
  154.            OUT DX,AL
  155.            CMP C4,0                ;闪烁次数未到
  156.            JNE RE_DENG4                ;重置第四组灯
  157.            RET

  158. ;重置第四组灯
  159. RE_DENG4:
  160.    DEC C4
  161.    MOV AL,1
  162.    MOV FOUR_1,AL
  163.    MOV FOUR_2,AL
  164.    RET

  165. ;重置所有灯组
  166. RE_ALL:        
  167.         MOV AL,6
  168.         MOV ONE,AL
  169.         MOV THREE,AL
  170.         MOV AL,2
  171.         MOV C2,AL
  172.         MOV C4,AL
  173.         MOV AL,1
  174.         MOV TWO_1,AL
  175.         MOV TWO_2,AL
  176.         MOV FOUR_1,AL
  177.         MOV FOUR_2,AL
  178.         RET               
  179. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  180. TIME_INT:                        ;定时器中断处理函数
  181.         CALL        DENG1
  182.         IRET
  183. CODE        ENDS
  184.         END START
复制代码
仿真工程: 交通灯控制系统.rar (26.93 KB, 下载次数: 0)

评分

参与人数 2黑币 +80 收起 理由
wpppmlah + 30 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表