第09章计数器和定时器电路

Download Report

Transcript 第09章计数器和定时器电路

定时/计数器可以实现定时与计数两个功能
,可用于:






系统时钟
DRAM刷新定时
定时采样
实时控制
脉冲的计数
。。。
软件方法:用一段程序实现延时
• 利用程序循环延迟指定的时间
• 缺点:CPU占用率?延时精度?兼容?
硬件方法:定时/计数器电路
• 利用脉冲计数在设定的时间输出定时信号
● 8253是一种硬件定时/计数器芯片
8253概貌





3个16位的定时/计数器(通道)
24引脚双列直插式
最高计数频率2MHz
TTL电平兼容
单电源+5V供电
(1) 3个独立的16位计数器通道
(2) 每个通道都可以通过编程设定为6种工
作方式之一
(3) 可设定为按二进制计数或二―十进制
计数
8253的内部结构和引脚信号
连接系统端的主要引线:
D7~D0
CS
RD
WR
A1,A0
 用于选择四个编址部件之一
计数通道的主要引线(每通道均相同):
CLKn
时钟脉冲输入,计数器的计时基准。
GATEn 门控信号输入,控制计数器的启停。
OUTn
计数器输出信号,不同工作方式下
产生不同波形。
(n = 0~2)
1. 设置8253的工作方式
2. 设置计数初值到初值寄存器
3. 第一个CLK信号使初值寄存器的内容置入
计数寄存器
4. 以后每来一个CLK信号,计数寄存器减1
5. 减到0时,OUT端输出一特殊波形的信号
注:以上计数过程中还受到GATE信号的控制
控制字寄存器
(A1A0 = 1 1 )
SC1 SC0 RL1 RL0 M2 M1 M0 BCD
计数器选择:
00 计数器0
读写操作
方式选择
01 计数器1
10 计数器2
1 1 无效
1 BCD码计数
0 2进制计数
00 计数器锁存,供CPU读
01只读/写计数器低字节
10只读/写计数器高字节
11先读/写计数器低字节,
后读/写高字节
8253控制字
000
001
10
11
100
101
方式 0
方式 1
方式 2
方式 3
方式 4
方式 5
若要用通道1,工作在方式2,按二--十
进制计数,计数值为1005H,端口地址为
04H~07H,则初始化编程为:
MOV AL,75H
OUT 07H,AL
MOV AL,05H
OUT 05H,AL
MOV AL,10H
OUT 05H,AL
读取通道0的16位计数值:
MOV AL,00H
OUT 07H,AL
IN AL,04H
MOV CL,AL
IN AL,04H
MOV CH,AL
工作方式
方式
1—— 方式
方式
方式
方式
方式
0—— 可重复 2—— 3—— 4—— 5——
计数结 触发的 频率发 方波发 软件触 硬件触
束中断 单稳态 生器
生器 发选通 发选通
触发器
8253的工作方式
1、方式0
(1)计数器只计数一遍
(2)输出信号OUT会在N+1个CLK脉冲后变高
(3)GATE变低电平可以停止计数过程
(4)改变计数立即有效
2、方式1
方式1特点:
(1)计数到0后,如果有外部触发,就可以
按原来的计数初值工作
(2)计数过程中GATE信号可以用作重新触
发,计数器重新计数
(3)改变计数初值并不是立即有效
3、方式2
方式2特点:
(1)不用重新设置计数值,计数器可以连续
工作
(2)以GATE信号停止计数。在GATE变成
高电平后的下一个CLK脉冲,计数器恢复
原来的初值,重新计数
(3)改变计数值不是立即有效
4、方式3
方式3特点:
(1)GATE信号由低变高可以使计数过程
重新开始
(2)改变计数初值并不影响现行的计数过
程
5、方式4
方式4特点:
(1)如果设置计数初值为N,则输出信号
OUT会在N+1个CLK脉冲后输出一个负脉
冲。
(2)改变计数值为立即有效
6、方式5
方式5特点:
(1)若设置计数值为N,则经过N+1个CLK
脉冲后OUT引脚输出一个负脉冲
(2)GATE信号重新触发,可以令计数器重
新计数
(3)改变计数初值并不是立即有效
0
1
2
3
4
5
初态
L
H
H
H
H
H
计数
开始
L
L
H
H
工作方式
OUT
计数
结束
3
重新装
入初值
GATE
2
H允许
L禁止
GATE 自动
自动
自动
G
G
G
H允许
L禁止
触发
触发
编程控制计算机扬声器发声:
(1)通过PB1对扬声器控制
PB0=0使得8253计数器2的OUT2输出
为高电平。然后通过编程使得PB1不断进
行反相操作,高低电平分别持续相同的时
间,使得输出一定频率的方波,驱动扬声
器发声
参考程序
START:
HERE:
IN
AND
AL,61H
AL,11111100B
;读取 B 口的状态
;PB0 =PB1 =0
XOR
OUT
AL,02H
61H,AL
;PB1 反相
;输出
MOV
LOOP
CX,320
HERE
;高低电平持续一定时间
JMP
START
(2)通过8253计数器2对扬声器控制
8255PB0端口输出为高电平,使能8253
计数器2;PB1端口也为高电平,打开与门
。计数器2工作在方式3,通过预置合适的
计数初值,使得计数器2输出一定频率的方
波
参考程序
WAIT:
MOV
OUT
AL , 10110110B
43H , AL
;设置 8253 计数器控制字
MOV
AX ,0800H
;计数初值选择 0800H
OUT
42H , AL
MOV
AL , AH
OUT
42H , AL
IN
OR
AL , 61H
AL , 03H
;令 PB0=PB1=1
OUT
61H , AL
;打开与门,使能 8253 计数器 2
MOV
BL , 06H
SUB
LOOP
CX , CX
WAIT
DEC
BL
JNZ
WAIT
AND
OUT
AL , 0FCH
61H , AL
INT
20H
;延时程序段。控制发声时间长度
;关闭与门,切断脉冲信号源停止发声
一、计算机钢琴程序
1、设计要求:
利用8253定时器的作用,通过控制计算机
内部的扬声器,当键盘输入为数字键1~8的
时候,依次发出1~8八个音调。当键盘输入
为CTRL+C时推出“钢琴”状态
2、设计思路
各音符的频率值
键入字符
1
2
3
4
5
6
7
8
音符
1
2
3
4
5
6
7
8
频率值
524 588
660
698
784
880
988
1048
要使计算机成为可以弹奏的钢琴,需要使用系统调用的01H功能
以接收键入字符,可以通过建立一张键入字符与频率值相关的表,
在程序中通过查表的方法将键入字符转化成频率值
接收键入字符
是CTRL+C键?
Y
N
键入字符值转化为查表偏移量
常数120000H作为被除数
查表所得频率值作为除数
相除得到计数初值
初始化8253计数器2
设置8255PB1=PB0=1
延时
关闭与门,切断脉冲信号源
结束
DATA SEGMENT
TABLE DW 524,588,660,784,880,988,1048
DATA ENDS
STACK SEGMENT
STA DB 20 DUP (?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
SING:MOV AH,01H
INT 21H
;接收键入字符
CMP AL,03H
;是CTRL+C键?
JZ DONE
;是则结束
SUB AL,31H
SHL AL,01
;转化为查表偏移量(每一表项占两字节)
MOV BL,AL
MOV AX,0000H
MOV DX,12H
MOV BH,00
DIV WORD PTR [TABLE+BX] ;相除求得频率值
MOV BX,AX
MOV AL,10110110B
OUT 43H,AL
;设置8253计数器控制字
MOV AX,BX
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
OR AL,03H
OUT 61H,AL
CALL DELAY
IN AL,61H
AND AL,0FCH
OUT 61H,AL
JMP SING
DONE:MOV AX,4C00H
INT 21H
DELAY PROC NEAR
PUSH CX
PUSH AX
MOV AX,03H
;打开与门
;软件延时
;结束
LOOP1:MOV CX,0FFFFH
LOOP2:DEC CX
JNZ LOOP2
DEC AX
JNZ LOOP1
POP AX
POP CX
RET
DELAY ENDP
CODE ENDS
END START
二、自动计数系统。
当工件从光源与光敏电阻之间通过时,CLK0
端即可接收到一个脉冲信号,由计数器0计数。每
当有80个工件通过后,由输出端OUT0输出一个
负脉冲作为中断请求信号通知CPU。CPU在处理
该中断的中断服务程序中启动计数器1,由OUT1
产生2000Hz的方波驱动蜂鸣器发声,提示工件以
满80个,5秒后扬声器停止发声。