《微机原理A》 第二十三讲:计数/定时技术(二) 主讲老师:王克义
《微机原理A》 第二十三讲:计数 /定时技术(二) 主讲老师:王克义
公 本讲主要内容 8253的初始化编程 8253的编程应用
本讲主要内容 • 8253的初始化编程 • 8253的编程应用
公 23.18253的初始化编程 1.内部寄存器的寻址 ·8253有三个独立的计数器通道,每个通道可以被cPU访 问的部件有: 8位的控制寄存器,它只能写入,不能读出; 16位的计数初值寄存器CR它只能写入,不能读出; ·16位的输出锁存器OL它只能读出不能写入; ·8253芯片是否被选中,决定于片选信号cS,通常CS接自 地址译码器输出
23.1 8253的初始化编程 1. 内部寄存器的寻址 • 8253有三个独立的计数器通道,每个通道可以被CPU访 问的部件有: • 8位的控制寄存器,它只能写入,不能读出; • 16位的计数初值寄存器CR,它只能写入,不能读出; • 16位的输出锁存器OL,它只能读出,不能写入; • 8253芯片是否被选中,决定于片选信号CS,通常CS接自 地址译码器输出
公 片8253占用四个连续的端口地址,分别对应 于三个计数初值寄存器端口和一个控制寄存器 端口。 ·由输入信号A1和A0的四种编码来选择四个端口 每个通道都各自有独立的控制寄存器,但三个 通道的控制寄存器都共用一个端口地址,即A1 和A0都为1时的端口地址。它是三个通道共同 使用的控制寄存器端口地址
• 一片8253占用四个连续的端口地址,分别对应 于三个计数初值寄存器端口和一个控制寄存器 端口。 • 由输入信号A1和A0的四种编码来选择四个端口 之一。 • 每个通道都各自有独立的控制寄存器,但三个 通道的控制寄存器都共用一个端口地址,即A1 和A0都为1时的端口地址。它是三个通道共同 使用的控制寄存器端口地址
·为了能够将每个通道的控制字写入它们各自的控 制寄存器中,使用控制字的D7和D6的编码,来标 志此控制字是写入哪个通道的控制寄存器中。 8253内部寄存器的寻址如表23-1所示
• 为了能够将每个通道的控制字写入它们各自的控 制寄存器中,使用控制字的D7和D6的编码,来标 志此控制字是写入哪个通道的控制寄存器中。 • 8253内部寄存器的寻址如表23-1所示
公 表23-18253内部寄存器的寻址 CS RD WR A1A0寄存器选择和操作 写通道0计数初值寄存器cR0 00000 0000 写通道1计数初值寄存器cR1 写通道2计数初值寄存器cR2 写控制寄存器 1000 0101010 读通道0输出锁存器OL0 读通道1输出锁存器OL1 读通道2输出锁存器OL2
CS RD WR A1 A0 寄存器选择和操作 0 1 0 0 0 写通道 0计数初值寄存器CR0 0 1 0 0 1 写通道 1计数初值寄存器CR1 0 1 0 1 0 写通道 2计数初值寄存器CR2 0 1 0 1 1 写控制寄存器 0 0 1 0 0 读通道 0输出锁存器OL0 0 0 1 0 1 读通道 1输出锁存器OL1 0 0 1 1 0 读通道 2输出锁存器OL2 表23-1 8253内部寄存器的寻址
公 2初始化编程顺序 设置控制字 写入计数初值 注意:必须按控制字D5,D4位规定的格式进行写入
2.初始化编程顺序 • 注意:必须按控制字D5,D4位规定的格式进行写入。 设置控制字 写入计数初值
公 3.8253的控制字 通道选择S, SCo RL,RuM2M BCD 计数制: 00通道0 0二进制计数 01通道1 02通道2 1十进制计数 11无效 工作方式: 读/写格式 00计数器锁存命令 000方式0 01只读/写计数器低8位 001方式1 10只读/写计数器高8位 X10方式2 11先读/写计数器低8位 x11方式3 后读/写计数器高8位 100方式4 101方式5 图2318253控制字格式
SC1 SC0 RL1 RL0 M2 M1 M0 BCD 00 通道0 01 通道1 02 通道2 11 无效 通道选择: 00 计数器锁存命令 01 只读/写计数器低8位 10 只读/写计数器高8位 11 先读/写计数器低8位 后读/写计数器高8位 读/写格式: 计数制: 0 二进制计数 1 十进制计数 工作方式: 000 方式0 001 方式1 x10 方式2 x11 方式3 100 方式4 101 方式5 图23.1 8253 控制字格式 3. 8253的控制字
公 需要说明的是: 当采用二进制计数时,如果是8位二进制计数 (计数值≤256),则在8253初始化编程的传送 指令“ MOV AL,n”中,n可以写成任何进制数 (二进制、十进制或十六进制)的形式; ·如果是16位二进制计数(计数值≤65536), 种方法是先把计算得到的十进制计数初值n转换成 4位十六进制数(即16位二进制),然后分两次 写入8253的指定端口
• 需要说明的是: • 当采用二进制计数时,如果是8位二进制计数 (计数值≤256),则在8253初始化编程的传送 指令“MOV AL, n”中,n可以写成任何进制数 (二进制、十进制或十六进制)的形式; • 如果是16位二进制计数(计数值≤65536),一 种方法是先把计算得到的十进制计数初值n转换成 4位十六进制数(即16位二进制),然后分两次 写入8253的指定端口
公 ·另一种方法是先把该十进制计数初值n直接传送给 AX,然后分两次写入8253指定端口,即: MOVAX. n OUT PORT,AL;先写低8位(PORT为端口号) MOV AL AH OUT PORT,AL;后写高8位
• 另一种方法是先把该十进制计数初值n直接传送给 AX,然后分两次写入8253指定端口,即: MOV AX , n OUT PORT, AL ;先写低8位(PORT为端口号) MOV AL, AH OUT PORT, AL ; 后写高8位