资源描述
实 验 报 告
( 2014 – 2015 学年 第 一 学期)
课程名称
微型计算机接口技术
实验名称
流光发生器设计
实验时间
2014
年
11
月
25
日
指导单位
指导教师
学生姓名
班级学号
学院(系)
计算机软件
专 业
软件工程
实 验 报 告
实验名称
流光发生器设计
指导教师
韩崇
实验类型
验证
实验学时
2
实验时间
2014.11.25
一、 实验目的和要求
1.掌握8254的结构、工作原理、工作方式、初始化编程及使用方法。
2.完成相应的硬件电路连线并编写程序,使8254的三个计数器输出不同周期的方波信号,控制三个发光二极管,达到流光效果。
二、实验环境(实验设备)
PD-32开放式微型计算机教学实验装置、8254定时器/计数器模块
Windows 操作系统
三、实验原理及内容
8254有3个独立的16位计数器,每个计数器有3个引脚,GATE、CLK、OUT。每个计数器有6种工作方式,其中方式2、3有具有初值自动重装功能,所以可以选择计数器工作在方式3,输出的是连续信号,输出信号的周期Tout =N×TCLK,。初始化编程时,程序员向计数初值寄存器写入的计数初值,将自动送入16位减1计数器。当GATEi=1时,每一个CLKi信号的下降沿使减1计数器减1,当计数器见到某个规定的数值时,OUTi端产生输出信号。在计数过程中,锁存器随减1计数器的变化而变化。8254使用单一+5v电源有24个引脚,采用双列直插式封装。8254的3个计数器均有6种工作方式,其主要区别在于:(1)输出波形不同;(2)启动计数器的触发方式不同;(3)计数过程中门控信号GATE对计数操作的影响不同;(4)有的工作方式具备“初值自动重装”功能。初值自动充装的功能是:当计数器减到规定的数值后,计数初值将会自动地装入计数器重新计数。8254 的6种工作方式分别是:方式0——计数结束输出正跃变信号。其工作特点是:(1)写入控制字后,OUT端输出低电平,写入计数初值后,OUT端保持低电平,计数器开始对CLK脉冲进行减1计数。当计数值减为0时,OUT端输出变为高电平。此信号可用于向CPU发出中断请求。(2)在计数过程中,如果改变计数初值,则在写入新的计数初值后,计数器将以新的值为计数初值,重新开始减1计数。(3)GATE为计数控制信号,当GATE=1时,允许计数;GATE=0时,停止计数。 方式1——单脉冲发生器。其工作特点是:(1)写入控制字后,OUT端输出高电平,写入计数初值后,OUT端保持高电平,计数器由GATE的上升沿启动。GATE启动后,OUT变为低电平,每来一个CLK脉冲,计数器减1,当计数器减到0时,OUT端输出高电平,在OUT端输出一个负脉冲,负脉冲宽度为计数初值乘以CLK脉冲周期。(2)在计数器未减到0时,如果门控信号GATE再来一个正脉冲,计数初值将重新装入计数器,计数器从初始值开始重新作减1计数。(3)在计数过程中,程序员可装入新的计数初值,但计数过程不收影响。只有当GATE再一次出现0→1的跃变后,计数器才能按照新的计数初值作减1计数。 方式2——分频器。其工作特点是:(1)写入控制字后,OUT端输出为高电平,写入计数初值后,如果GATE为高电平,计数器开始减1计数,当计数器减到1时,OUT端输出低电平,经过一个CLK周期,又变为高电平,并且计数初值自动重装,计数器开始重新计数,周而复始。OUT端输出时连续的负脉冲,负脉冲宽度为一个CLK周期。(2)如果在减1计数过程中,GATE变低,则暂停计数,GATE的上升沿使计数器恢复初值,并从初值开始减1计数。(3)在计数过程中,如果GATE为高电平,程序员写入新的计数初值,不会影响正在进行的减1计数过程,只有计数器减到1之后,计数器才装入新的计数初值,并且按新的计数初值开始计数。 方式3——方波发生器。其工作特点是:(1)当计数初值为偶数时,每来一个CLK脉冲,计数值减2,当计数值减到0时输出端改变极性,内部完成初值自动安装,继续计数。输出端为1:1的方波,正负脉冲的宽度均为N/2个CLK周期。(2)如果计数初值为奇数,输出正脉冲宽度=Tclk×(N+1)/2,;输出负脉冲宽度=Tclk×(N-1)/2。实验证明:实际装入的初值以及自动重装的初值,均为编程时写入的初值减1。 方式4——软件触发的单脉冲发生器。其工作特点是:(1)写入控制字后,OUT端输出高电平,若当前GATE为高电平,写入计数初值后,开始作减1计数,当计数值减到0时,OUT变低,在OUT端输出一个宽度为一个CLK周期的负脉冲。(2)当GATE=1时,允许计数,GATE=0时,停止计数。(3)在计数过程中,如果改变计数值,则按新的计数值重新开始计数。 方式5——硬件触发的单脉冲发生器。其工作特点是:(1)写入控制字后,OUT端输出为高电平。写入计数初值后,只有在GATE端出现0→1跃变时,计数初值才能装入计数器,开始作减1计数,当计数值减为0时,OUT端输出一个CLK周期的负脉冲。(2)在计数过程中,若GATE端再次出现0→1跃变,则计数初值重新装入计数器,作减1计数。(3)在计数过程中,如果改变计数初值,不影响当前计数过程;若有GATE上升沿触发,则按新的计数初值重新开始计数。 一个
详细程序为: CDPORT3 EQU 212H ;
CHDBIT1 EQU 00H
CHDBIT2 EQU 00H
START: NOP ;启动延时
MOV DX,CCONPORT ;写入控制字(计数器0)
MOV AL,CCONBIT1
OUT DX,AL
MOV DX,CDPORT1 ;写入初值(计数器0)
MOV AL,CHDBIT1
OUT DX,AL
MOV DX,CCONPORT ;写入控制字(计数器1)
MOV AL,CCONBIT2
OUT DX,AL
MOV DX,CDPORT2 ;写入初值(计数器1)
MOV AL,CHDBIT1
NOP
NOP
OUT DX,AL
MOV DX,CCONPORT ;写入控制字(计数器2)
MOV AL,CCONBIT3
OUT DX,AL
MOV DX,CDPORT3 ;写入初值(计数器2)
MOV AL,CHDBIT2
OUT DX,AL
WT: NOP
JMP WT
CODE ENDS
END BEG
四、实验小结(包括问题和解决方法、心得体会、意见与建议等)
该实验在施行第二种方案时,出现了许多问题。
1. 一开始编程,计算初值使用公式:Tout =N×TCLK,.,由于未考虑到人们视觉能分辨的闪烁时间为0.4秒而设置过小的时间间隔,没有达到实验要求效果,而后通过计算得N=23500和N=32900。
2 . 未考虑到8254内部的计数器是16位,将十进制数误当成二进制的放到 EAX中,正确的输入为 MOV AX,VALUE1 OUT DX,AL MOV AL,AH OUT DX,AL .
3. 要正确设置读/写方式,先读低8位后读高8位。
4. 编程过程中,要使用NOP 语句,避免运行时间过短。
五、指导教师评语
成 绩
批阅人
日 期
展开阅读全文