一、实验目的
-
熟悉 8253/4 在系统中的电路接法
-
掌握 8253/4 的工作方式及应用编程
二、实验设备、材料
-
上位机:A86集成环境软件
-
下位机:微机接口设备80486DX
-
数根单根线
-
实验箱如下图
三、实验内容
-
实验接线图如下(下图中O表示接线柱,红色线为实验需要接的线)
-
3 个计数/定时通道的引脚说明
1)CLK0-CLK2:计数脉冲信号输入,若CLK 为频率精确的时钟脉冲,则通道可作为定时器。
定时时间T=时钟脉冲周期t*计数初值N(1s=1MHz*N,1MHz=10^-6,故推出N=10^6) -
2)GATE0~GATE2:门控信号输入引脚。
3)OUT0~OUT2:输出引脚。其形式取决于工作方式。
-
方式三 可重复计数的方波发生器(N写入后在下一个时钟的下降沿开始计数,方式3计数到达一半时N/2=2变成下降沿,N依次减1直到变成0后再装入4,之后依次重复该操作)
-
控制字(由之前公式算出N=10^6,而计数方式只有BCD计数和二进制计数两种方式。二进制计数最大计数范围:0~65536,二进制计数时8253的每个计数器为16位,因此最大计数值为 2^16=65536,初始值可设置为1~65535,计数器从初始值递减至0,共计数65536次。
BCD计数最大计数范围:0~10000,BCD计数时8253的16位计数器被分成4位一组,每组表示1位十进制数(0~9)。初始值可设置为 1~9999(若写入 0,实际按 10000 处理),计数器从初始值递减至 0,共完成 10000 次计数。而N此时的值超过了BCD计数和二进制计数的最大值,故需要进行级联,将N分成100*10000一个进行二进制一个进行BCD)
-
实验要求:使用8253/4 两个计数通道级连,采用定时方式工作,周期性的点亮及熄灭发光二极管,周期为 1秒。
各通道工作方式:
计数器0工作方式3,初值为 10000;
计数器1工作方式3,初值100; -
补充
8253控制寄存器地址 203H
计数器0地址 200H
计数器1地址 201H
计数器2地址 202H
代码如下
.486
IO_ADDRESS EQU 200H ;8254基址值,CS0的起始地址
data segment d1 dw ?
data ends
CODE SEGMENT
ASSUME CS:CODE,ds:data
START:
mov ax, data
mov ds,ax
MOV DX, IO _ADDRESS+3 ;DX此时是203H,8253控制寄存器地址
MOV AL, 00110111B ;计数器0方式3,BCD码计数,先读写低字节再读写高字节
OUT DX, AL
MOV DX, IO_ADDRESS ;计数器0设置初值
MOV AL, 0
OUT DX, AL
OUT DX, AL ;写初值10000
MOV DX, IO_ADDRESS+3
MOV AL, 01010110B ;计数器1方式3,二进制计数
OUT DX, AL ;只输出低字节
MOV DX, IO_ADDRESS ;200H,通道0
INC DX ;自增1,201H,通道1
MOV AL, 100 ;写初值100
ddd: OUT DX, AL ;产生1S定时周期脉冲
nор
jmp ddd
HLT
CODE ENDS
END START
-
8254适用于要求更高的场合,更高频率、更稳定的操作,精度更高,有读回功能;8253适用于低频、简单的定时/计数需求。8254与8253引脚相同,24个引脚双列直插式封装。
四、实验步骤
-
运行软件,根据实验内容的描述,编写实验程序。
在已有实验程序的情况下选择:打开一>工程一>8253/4 定时/计数器(文件目录)一>.project (工程) -
双击 〝8253/4 定时/计数器”(文件名),屏幕显示源文件内容。使用“生成”菜单中“构建或重新构建” 选项,对实验程序进行汇编、连接。
-
选“启动调试〞,在状态栏显示程序编译、连接、传送整个过程的相关信息,汇编连接、传送无误的话光标移至源文件中的 START(程序的开始位置)。
-
在“调试”菜单中点击“开始调试”。进入调试环境,根据自己的要求选择调试操作,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化。我们选择“继续”操作,就是连续的运行程序
-
此时,K1 置高电平,然后L1指示灯1秒钟闪烁一次。
五、实验现象以及结论分析
-
1s内灯周期性的点亮和和熄灭
-
在实验过程中,想要产生想要的实验现象,注意在实验时打开门控信号开关
-
由于上述举例周期仅为1s,级联时二进制只用低8位,不需要拆成高字节和低字节。当周期达到3s及以上时使用二进制时会达到300及以上,次数超过了2^8=256需要拆成低8位和高8位来实现需要达到的数值。低8位能表达的最大的数为11111111=255,以300为例需要将高8位的最后一位置为1使数值达到256,再使低8位值达到300-256=44,故需要先读写低字节再读写高字节。