标题:
单片机汇编程序实现红绿灯转换
[打印本页]
作者:
lltt
时间:
2018-11-18 16:23
标题:
单片机汇编程序实现红绿灯转换
通过masm软件运行该程序
单片机源程序如下:
STACK SEGMENT STACK 'STACK'
DW 128 DUP(?)
STACK ENDS
DATA SEGMENT;定义8255和8253各端口地址数据
PA8255 EQU 3000H
PB8255 EQU 3200H
PC8255 EQU 3400H
CON8255 EQU 3600H
CLK08253 EQU 3800H
CLK18253 EQU 3A00H
CLK28253 EQU 3C00H
CON8253 EQU 3E00H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV DX,CON8253;初始化8253通道0
MOV AL,36H;00110110
OUT DX,AL
MOV DX,CLK08253
MOV AX,2710H
OUT DX,AL
MOV AL,AH
OUT DX,AL;通道0初始化完成,工作方式3,初始计数值为10000,周期为0.01s
MOV DX,CON8253;通道2初始化完成,工作方式3,计数初值为100,由clk0输入以后周期为1s
MOV AL,96H;10010110
OUT DX,AL
MOV DX,CLK28253
MOV AL,64H
OUT DX,AL
MOV DX,CON8255
MOV AL,80H
OUT DX,AL;8255初始化完成,A,B,C均工作在方式0,即基本的输入输出
MOV AL,10H;初始化各灯的状态
MOV DX,PA8255
OUT DX,AL;红灯全亮
MOV DX,PB8255
MOV AL,1FH
OUT DX,AL;黄灯全灭
MOV DX,PC8255
MOV AL,1FH
OUT DX,AL;绿灯全灭
CALL DELAY
BEGIN:
MOV DX,CON8255
MOV AL,80H
OUT DX,AL
MOV AL,10H
MOV DX,PB8255
OUT DX,AL
MOV DX,PA8255
MOV AL,15H
OUT DX,AL;05H=00000101,2、4红灯亮
MOV DX,PB8255
MOV AL,1FH
OUT DX,AL;0FH=00001111,黄灯全灭
MOV DX,PC8255
MOV AL,1AH
OUT DX,AL;OAH=00001010,1,3绿灯亮
CALL DELAY
MOV DX,CON8253
MOV AL,70H
OUT DX,AL;通道1初始化完成,工作方式0,01110000
MOV DX,CLK18253
MOV AX,0BB8H
OUT DX,AL
MOV AL,AH
OUT DX,AL;0BB8H=3000,即通道1的计数值为3000,也就是30S
LOP30_1:
MOV AL,0;扫描PC4口是否有高电平输入
MOV DX,CON8255
MOV AL,88H;88
OUT DX,AL;改PC口为输入方式,准备读入PC4的值
MOV DX,PC8255
IN AL,DX
AND AL,10H;取PC4的值
CMP AL,10H
JNZ LOP30_1;未检测到高电平则继续循环检测
MOV DX,CON8255
MOV AL,80H
OUT DX,AX
MOV DX,PA8255
MOV AL,15H;05H=00000101;2,4红灯亮
OUT DX,AL
MOV DX,PC8255
MOV AL,1FH;0FH=00001111
OUT DX,AL;1、3绿灯灭
MOV DX,PB8255
MOV AL,1AH;0AH=00001010
OUT DX,AL;1、3黄灯开始闪
MOV CX,0
LOP5_1:
MOV DX,CON8255;检测PC7高电平
MOV AL,88H
OUT DX,AL;改PC口为输入方式,准备读入PC7
MOV DX,PC8255
IN AL,DX
AND AL,80H;取PC7
CMP AL,80H
JNZ LOP5_1;如果不是高电平则不需要进行延时
CALL DELAY
INC CX
CMP CX,05H
JNZ LOP5_1
MOV DX,CON8255
MOV AL,80H
OUT DX,AL
MOV AL,10H
MOV DX,PB8255
OUT DX,AL
MOV DX,PA8255
MOV AL,1AH
OUT DX,AL;0AH=00001010,1、3红灯亮
MOV DX,PB8255
MOV AL,1FH
OUT DX,AL;0FH=00001111,黄灯全灭
MOV DX,PC8255
MOV AL,15H
OUT DX,AL;05H=00000101,2、4绿灯亮
CALL DELAY
MOV DX,CON8253;重新写入方式控制字,0方式
MOV AL,70H
OUT DX,AL
MOV DX,CLK18253
MOV AX,0BB8H
OUT DX,AL
MOV AL,AH
OUT DX,AL;0BB8H=3000,即通道1的计数值为3000,也就是30S
LOP30_2:
MOV AL,0;扫描PC4口是否有高电平输入
MOV DX,CON8255
MOV AL,88H
OUT DX,AL;改PC口为输入方式,准备读入PC4的值
MOV DX,PC8255
IN AL,DX
AND AL,10H;取PC4的值
CMP AL,10H
JNZ LOP30_2;未检测到高电平则继续循环检测
MOV DX,CON8255
MOV AL,80H
OUT DX,AX
MOV DX,PA8255
MOV AL,1AH;OAH=00001010,1,3路口红灯亮
OUT DX,AL
MOV DX,PC8255
MOV AL,1FH;0FH=00001111
OUT DX,AL;2、4绿灯灭
MOV DX,PB8255
MOV AL,15H;05H=00000101
OUT DX,AL;2、4黄灯开始闪烁
MOV CX,0
LOP5_2:
MOV DX,CON8255;检测PC7高电平
MOV AL,88H
OUT DX,AL;改PC口为输入方式,准备读入PC7
MOV DX,PC8255
IN AL,DX
AND AL,80H;取PC7
CMP AL,80H
JNZ LOP5_2
CALL DELAY
INC CX
CMP CX,05H
JNZ LOP5_2
JMP START;下一次循环
DELAY PROC NEAR
MOV DX,120;延时子程序
DELAY1:
MOV BX,1000
DELAY2:
DEC BX
CMP BX,0
JNZ DELAY2
DEC DX
CMP DX,0
JNZ DELAY1
RET
DELAY ENDP
CODE ENDS
END START
复制代码
所有资料51hei提供下载:
123456.rar
(1.15 KB, 下载次数: 7)
2018-11-18 16:23 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2018-11-18 17:28
补全原理图或者详细说明一下电路连接即可获得100+黑币
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1