微机原理与接口技术
课程设计报告
设计题目: 交通灯控制实验
专
班
学
学
业
级
生 XXXXXXX
生 XXXXXXX
指导教师
梁莉
起止时间 15.06.29~15.07.03
2015 年 春季 学期
一.课程设计目的
用汇编语言独立完成一个程序题,以达到熟练运用汇编语言编程实现有比较完整功能的
程序的目的。
1.了解交通灯管理的基本工作原理。
2.熟悉 8255A 并行接口的各种工作方式和应用。
3. 熟悉 8254 计数器/定时器的工作方式及应用编程,掌握利用软硬件相结合定时的方法。
二.课程设计任务
十字路口交通灯的变化规律要求:
(1) 南北路口的绿灯、东西路口的红灯同时亮5秒左右。
(2) 南北路口的黄灯闪烁1次,亮3秒,同时东西路口的红灯继续亮。
(3) 南北路口的红灯、东西路口的绿灯同时亮5秒左右。
(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁1次,亮3秒。
(5) 转(1)重复。
三.总体设计方案
1.用实验系统 8255A 实现对信号灯的控制(所用端口自定);2 位数码显
示用 8255A 实现控制。
2. 实验系统 8254 的计数器 2 的 CLK2 接 OPCLK,频率为 1M;GATE2 已
接 +5V;定时采用软硬件相结合的方式实现。
⒊ 用实验系统的发光二极管模拟红绿灯。
四.实验原理
该实验中红绿灯采用 8255 和 8254 芯片来实现,利用 8254 芯片来做定时器,在 8255 芯片中
将 A 口当做输出口连接 LED 灯。
1.8254 芯片:
1.1、8254 芯片组成部分:
(1)数据总线缓冲器:
数据总线缓冲器是一个三态、双向 8 位寄存器主要作用是与 cpu 进行数据交换,8 位数据线
D7~D0 与 CPU 的系统数据总线连接,构成 CPU 和 8254 之间信息传送的通道,CPU 通过数据
总线缓冲器向 8254 写入控制命令、计数初始值或读取计数值。
2
(2)读写逻辑:
读写逻辑是芯片的控制部分,编程人员通过控制信号的选择来选择芯片的工作方式。读/写
控制逻辑用来接收 CPU 系统总线的读、写控制信号和端口选择信号,用于控制 8254 内部寄
存器的读/写操作。
(3)控制字寄存器:
控制寄存器是一个只能写不能读的 8 位寄存器,系统通过指令将控制字写入控制寄存器,设
定 8254 的不同工作方式。
(4)计数器;
8254 内部有三个结构完全相同而又相互独立的 16 位减“1”计数器,每个计数器有六种工
作方式,各自可按照编程设定的方式工作。
1.2、8254 芯片工作方式:
8254 芯片共有六种工作方式,分别对应与六种不同的用途。
(1)方式 0:计数结束中断方式,写入 N 后开始计数计数器为 0 ,OUT 输出 H.
(2)方式 1:可编程单稳态,外部 GATE 触发 OUT 输出单拍负脉冲宽度 N 个 CLK.
(3)方式 2:速率发生器,每 N 个 CLK 输一个宽度为一个 CLK 周期的负脉冲 ,不断重复.
(4)方式 3:方波发生器,N=偶,N/2 个 1,N/2 个 0N=奇,(N+1)/2 个 1,(N-1)/2 个 0 不
断重复.
(5)方式 4:软触发选通,写入 N 后开始计数计数器为 0,OUT 输出一个宽度为 CLK 周期的负
脉冲.
(6)方式 5:硬触发选通,写入 N 后 GATE 上升沿,开始计数计数器为 0 ,写入 N 后 GATE 上
升沿,开始计数计数器为 0 ,OUT 输出一个宽度为 CLK,周期的负脉冲,OUT 输出一个宽度
为 CLK,周期的负脉冲.
本次课设中,只是使用到了 8254 的工作方式 3,将其当做一个方波发生器来使用,为 8255
提供固定频率的方波信号,8255 以此来控制灯的点亮情况。使用 8254 的计数 0 和计数器 1
来进行级联,从 out1 中输出方波信号。
2、8255 芯片:
2.1、8255 芯片的组成部分:
8255 作为主机与外设的连接芯片,必须提供与主机相连的 3 个总线接口,即数据线、地址
线、控制线接口。同时必须具有与外设连接的接口 A、B、C 口。由于 8255 可编程,所以必须
具有逻辑控制部分,因而 8255 内部结构分为 3 个部分:与 CPU 连接部分、与外设连接部分、
3
控制部分。
(一)与 CPU 连接部分:
根据定义,8255 能并行传送 8 位数据,所以其数据线为 8 根 D0~D7。由于 8255 具有 3 个通
道 A、B、C,所以只要两根地址线就能寻址 A、B、C 口及控制寄存器,故地址线为两根 A0~
A1。此外 CPU 要对 8255 进行读、写与片选操作,所以控制线为片选、复位、读、写信号。
各信号的引脚编号如下:
(1)数据总线 DB:编号为 D0~D7,用于 8255 与 CPU 传送 8 位数据。
(2)地址总线 AB:编号为 A0~A1,用于选择 A、B、C 口与控制寄存器。
(3)控制总线 CB:片选信号、复位信号 RST、写信号、读信号。当 CPU 要对 8255 进行读、
写操作时,必须先向 8255 发片选信号选中 8255 芯片,然后发读信号或写信号对 8255 进行
读或写数据的操作。
(二)与外设接口部分:
根据定义,8255 有 3 个通道 A、B、C 与外设连接,每个通道又有 8 根线与外设连接,所以
8255 可以用 24 根线与外设连接,若进行开关量控制,则 8255 可同时控制 24 路开关。各通
道的引脚编号如下:
(1)A 口:编号为 PA0~PA7,用于 8255 向外设输入输出 8 位并行数据。
(2)B 口:编号为 PB0~PB7,用于 8255 向外设输入输出 8 位并行数据。
(3)C 口:编号为 PC0~PC7,用于 8255 向外设输入输出 8 位并行数据,当 8255 工作于应
答 I/O 方式时,C 口用于应答信号的通信。
(三)控制器:
8255 将 3 个通道分为两组,即 PA0~PA7 与 PC4~PC7 组成 A 组,PB0~PB7 与 PC0~PC3 组成
B 组。相应的控制器也分为 A 组控制器与 B 组控制器,各组控制器的作用如下:
(1)A 组控制器:控制 A 口与上 C 口的输入与输出。
(2)B 组控制器:控制 B 口与下 C 口的输入与输出。
2.2、8255 芯片工作方式:
8255 芯片共有三种不同的工作方式
方式 0:基本输入输出方式适用于无条件传送和查询方式的接口电路
方式 1:选通输入输出方式适用于查询和中断方式的接口电路
方式 2:双向选通传送方式
适用于与双向传送数据的外设
4
适用于查询和中断方式的接口电路
3.实验原理图
五.程序设计流程图
5
六.程序清单
.model small
.586
.stack
.data
p8255a=288h
p8255b=p8255a+1
p8255c=p8255a+2
p8255Ctrl=p8255a+3
;A 口地址
;B 口地址
;C 口地址
;控制口地址
;通道 0 地址
;通道 1 地址
;通道 2 地址
;控制口地址
db 'Press anykey to Exit',0dh,0ah,'$'
p8254a=280h
p8254b=p8254a+1
p8254c=p8254a+2
p8254Ctrl=p8254a+3
msg
.code
main
mov
mov
mov dx,offset msg
mov ah,09h
int
21h
proc
ax,@data
ds,ax
;建立数据段
;显示字符串
call
call
init8255
Appmain
mov ah,4ch ;返回 DOS
int 21h
ret
main endp
init8255
proc
mov dx,p8255Ctrl
mov al,8ah
out dx,al
ret
init8255
endp
Appmain proc
;控制口地址
;设置 8255 为 B,C 口输入,A 为输出
;控制字:10001010B
6
initk0:mov dx,p8254Ctrl
;初始化计数器 0,1
mov al,36h
out dx,al
mov dx,p8254a
mov ax,1000
out dx,al
mov al,ah
out dx,al
mov dx,p8254Ctrl
mov al,76h
out dx,al
mov dx,p8254b
mov ax,1000
out dx,al
mov al,ah
out dx,al
mov
bl,81h
;点亮 L7
dx,p8255c
al,dx
al,80h
hight
next:mov
in
and
jnz
cmp ah,1
jnz next
mov ah,0
jmp x
hight:mov ah,1
jmp next
x:
dl,0ffh
ah,06h
21h
done
mov
mov
int
jnz
mov
mov dx,p8255a
out
dx,al
mov bl,81h
al,bl
;判断是否 c 口为下降沿
;直接控制台 IO,相当于 C 中 while(!kbhit())
;等待按键
;al=输入字符
;若无按键,则继续
;输出
initk1:mov dx,p8254Ctrl
;初始化计数器 0,1,
mov al,36h
out dx,al
7
mov dx,p8254a
mov ax,3000
out dx,al
mov al,ah
out dx,al
mov dx,p8254Ctrl
mov al,76h
out dx,al
mov dx,p8254b
mov ax,1000
out dx,al
mov al,ah
out dx,al
next1:mov
dx,p8255c
al,dx
al,80h
hight1
in
and
jnz
cmp ah,1
jnz next1
mov ah,0
jmp x1
;判断是否 c 口为下降沿
hight1:mov ah,1
jmp next1
x1:
mov
mov
int
jnz
mov
dl,0ffh
ah,06h
21h
done
al,bl
mov dx,p8255a
;直接控制台 IO,相当于 C 中 while(!kbhit())
;等待按键
;al=输入字符
;若无按键,则继续
out
dx,al
mov bl,80h
;输出
initk2:mov dx,p8254Ctrl
;初始化计数器 0,1,
mov al,36h
out dx,al
mov dx,p8254a
mov ax,5000
8