找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机汇编程序实现红绿灯转换

[复制链接]
跳转到指定楼层
楼主
ID:428737 发表于 2018-11-18 16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过masm软件运行该程序

单片机源程序如下:
  1. STACK SEGMENT STACK 'STACK'
  2.       DW 128 DUP(?)
  3. STACK ENDS
  4. DATA SEGMENT;定义8255和8253各端口地址数据
  5. PA8255 EQU 3000H
  6. PB8255 EQU 3200H
  7. PC8255 EQU 3400H
  8. CON8255 EQU 3600H
  9. CLK08253 EQU 3800H
  10. CLK18253 EQU 3A00H
  11. CLK28253 EQU 3C00H
  12. CON8253 EQU 3E00H
  13. DATA ENDS
  14. CODE SEGMENT
  15.      ASSUME CS:CODE,DS:DATA,SS:STACK
  16. START:
  17.      PUSH DS
  18.      SUB AX,AX
  19.      PUSH AX
  20.      MOV AX,DATA
  21.      MOV DS,AX
  22.      MOV DX,CON8253;初始化8253通道0
  23.      MOV AL,36H;00110110
  24.      OUT DX,AL
  25.      MOV DX,CLK08253
  26.      MOV AX,2710H
  27.      OUT DX,AL
  28.      MOV AL,AH
  29.      OUT DX,AL;通道0初始化完成,工作方式3,初始计数值为10000,周期为0.01s
  30.      MOV DX,CON8253;通道2初始化完成,工作方式3,计数初值为100,由clk0输入以后周期为1s
  31.      MOV AL,96H;10010110
  32.      OUT DX,AL
  33.      MOV DX,CLK28253
  34.      MOV AL,64H
  35.      OUT DX,AL
  36.      MOV DX,CON8255
  37.      MOV AL,80H
  38.      OUT DX,AL;8255初始化完成,A,B,C均工作在方式0,即基本的输入输出
  39.      MOV AL,10H;初始化各灯的状态
  40.      MOV DX,PA8255
  41.      OUT DX,AL;红灯全亮
  42.      MOV DX,PB8255
  43.      MOV AL,1FH
  44.      OUT DX,AL;黄灯全灭
  45.      MOV DX,PC8255
  46.      MOV AL,1FH
  47.      OUT DX,AL;绿灯全灭
  48.      CALL DELAY
  49. BEGIN:
  50.      MOV DX,CON8255
  51.      MOV AL,80H
  52.      OUT DX,AL
  53.      MOV AL,10H
  54.      MOV DX,PB8255
  55.      OUT DX,AL
  56.      MOV DX,PA8255
  57.      MOV AL,15H
  58.      OUT DX,AL;05H=00000101,2、4红灯亮
  59.      MOV DX,PB8255
  60.      MOV AL,1FH
  61.      OUT DX,AL;0FH=00001111,黄灯全灭
  62.      MOV DX,PC8255
  63.      MOV AL,1AH
  64.      OUT DX,AL;OAH=00001010,1,3绿灯亮
  65.      CALL DELAY
  66.      MOV DX,CON8253
  67.      MOV AL,70H
  68.      OUT DX,AL;通道1初始化完成,工作方式0,01110000
  69.      MOV DX,CLK18253
  70.      MOV AX,0BB8H
  71.      OUT DX,AL
  72.      MOV AL,AH
  73.      OUT DX,AL;0BB8H=3000,即通道1的计数值为3000,也就是30S
  74. LOP30_1:
  75.      MOV AL,0;扫描PC4口是否有高电平输入
  76.      MOV DX,CON8255
  77.      MOV AL,88H;88
  78.      OUT DX,AL;改PC口为输入方式,准备读入PC4的值
  79.      MOV DX,PC8255
  80.      IN AL,DX
  81.      AND AL,10H;取PC4的值
  82.      CMP AL,10H
  83.      JNZ LOP30_1;未检测到高电平则继续循环检测
  84.      MOV DX,CON8255
  85.      MOV AL,80H
  86.      OUT DX,AX      
  87.      MOV DX,PA8255
  88.      MOV AL,15H;05H=00000101;2,4红灯亮
  89.      OUT DX,AL
  90.      MOV DX,PC8255
  91.      MOV AL,1FH;0FH=00001111
  92.      OUT DX,AL;1、3绿灯灭
  93.      MOV DX,PB8255
  94.      MOV AL,1AH;0AH=00001010
  95.      OUT DX,AL;1、3黄灯开始闪
  96.      MOV CX,0
  97. LOP5_1:
  98.      MOV DX,CON8255;检测PC7高电平
  99.      MOV AL,88H
  100.      OUT DX,AL;改PC口为输入方式,准备读入PC7
  101.      MOV DX,PC8255
  102.      IN AL,DX
  103.      AND AL,80H;取PC7
  104.      CMP AL,80H
  105.      JNZ LOP5_1;如果不是高电平则不需要进行延时
  106.      CALL DELAY
  107.      INC CX
  108.      CMP CX,05H
  109.      JNZ LOP5_1   
  110.      MOV DX,CON8255
  111.      MOV AL,80H
  112.      OUT DX,AL
  113.      MOV AL,10H
  114.      MOV DX,PB8255
  115.      OUT DX,AL
  116.      MOV DX,PA8255
  117.      MOV AL,1AH
  118.      OUT DX,AL;0AH=00001010,1、3红灯亮
  119.      MOV DX,PB8255
  120.      MOV AL,1FH
  121.      OUT DX,AL;0FH=00001111,黄灯全灭
  122.      MOV DX,PC8255
  123.      MOV AL,15H
  124.      OUT DX,AL;05H=00000101,2、4绿灯亮
  125.      CALL DELAY
  126.      MOV DX,CON8253;重新写入方式控制字,0方式
  127.      MOV AL,70H
  128.      OUT DX,AL
  129.      MOV DX,CLK18253
  130.      MOV AX,0BB8H
  131.      OUT DX,AL
  132.      MOV AL,AH
  133.      OUT DX,AL;0BB8H=3000,即通道1的计数值为3000,也就是30S
  134. LOP30_2:
  135.      MOV AL,0;扫描PC4口是否有高电平输入
  136.      MOV DX,CON8255
  137.      MOV AL,88H
  138.      OUT DX,AL;改PC口为输入方式,准备读入PC4的值
  139.      MOV DX,PC8255
  140.      IN AL,DX
  141.      AND AL,10H;取PC4的值
  142.      CMP AL,10H
  143.      JNZ LOP30_2;未检测到高电平则继续循环检测
  144.      MOV DX,CON8255
  145.      MOV AL,80H
  146.      OUT DX,AX
  147.      MOV DX,PA8255
  148.      MOV AL,1AH;OAH=00001010,1,3路口红灯亮
  149.      OUT DX,AL
  150.      MOV DX,PC8255
  151.      MOV AL,1FH;0FH=00001111
  152.      OUT DX,AL;2、4绿灯灭
  153.      MOV DX,PB8255
  154.      MOV AL,15H;05H=00000101
  155.      OUT DX,AL;2、4黄灯开始闪烁
  156.      MOV CX,0
  157. LOP5_2:
  158.      MOV DX,CON8255;检测PC7高电平
  159.      MOV AL,88H
  160.      OUT DX,AL;改PC口为输入方式,准备读入PC7
  161.      MOV DX,PC8255
  162.      IN AL,DX
  163.      AND AL,80H;取PC7
  164.      CMP AL,80H
  165.      JNZ LOP5_2
  166.      CALL DELAY
  167.      INC CX
  168.      CMP CX,05H
  169.      JNZ LOP5_2
  170.      JMP START;下一次循环
  171.      
  172. DELAY PROC NEAR
  173.      MOV DX,120;延时子程序
  174. DELAY1:
  175.      MOV BX,1000
  176. DELAY2:
  177.      DEC BX
  178.      CMP BX,0
  179.      JNZ DELAY2
  180.      DEC DX
  181.      CMP DX,0
  182.      JNZ DELAY1
  183.      RET
  184. DELAY ENDP
  185. CODE ENDS
  186.      END START
复制代码

所有资料51hei提供下载:
123456.rar (1.15 KB, 下载次数: 7)


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

使用道具 举报

沙发
ID:1 发表于 2018-11-18 17:28 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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