140 likes | 392 Views
§8.2 8253 应用举例. 一、定时功能的应用 用 8253 产生各种定时波形. 例 8-1 已知: 8253 基地址为 310H , 3 通道所用时钟脉冲频率为 1MHz(=0.001ms) 。 要求: ( 1 )通道 0 输出频率为 2KHz 的方波; (2) 通道 1 产生宽度为 1ms 的负脉冲; ( 3 )通道 2 以硬件方式触发,输出单脉冲时间常数为 26 。. 分析 :通道 0 工作于方式 3 ,控制端 GATE 0 接 +5V , 时间常数 N0=1MHz/2KHz=500 ;
E N D
§8.2 8253应用举例 • 一、定时功能的应用 • 用8253产生各种定时波形 • 例8-1已知:8253基地址为310H,3通道所用时钟脉冲频率为1MHz(=0.001ms)。 • 要求: • (1)通道0输出频率为2KHz的方波; • (2)通道1产生宽度为1ms的负脉冲; • (3)通道2以硬件方式触发,输出单脉冲时间常数为26。 分析:通道0工作于方式3,控制端GATE0接+5V, 时间常数N0=1MHz/2KHz=500; 通道1工作于方式1,由控制端GATE1的正跳变触发,OUT1的宽 度为初值,单次触发,时间常数N1=1ms/0.001ms=1000; 通道2工作于方式5,由控制端GATE2的正跳变触发,可连续触发,时间常数N2=26。
00 11 011 1 码制 ;通道0初始化程序 MOV DX,316H ;置方式 MOV AL, 00110111B OUT DX,AL MOV DX,310H ;置初值 MOV AL,00H OUT DX,AL MOV AL,05H OUT DX,AL 通道 工作方式 数据读写方式 ;通道2初始化程序 MOV DX,316H ;置方式 MOV AL, 10011011B OUT DX,AL MOV DX,314H ;置初值 MOV AL,26H OUT DX,AL ;通道1初始化程序 MOV DX,316H ;置方式 MOV AL, 01110011B OUT DX,AL MOV DX,312H ;置初值 MOV AL,00H OUT DX,AL MOV AL,10H OUT DX,AL
例8-2要求用8253产生一如图所示的信号波形。已知8253的地址为216H~219H,外部时钟脉冲频率为1MHz。请编写8253初始化程序和使其工作的程序。例8-2要求用8253产生一如图所示的信号波形。已知8253的地址为216H~219H,外部时钟脉冲频率为1MHz。请编写8253初始化程序和使其工作的程序。 1)确定通道工作方式 2)确定时间常数 通道0: 2ms / 1μs=2000=07D0H 通道0时间常数写入216H端口 通道0:方波发生器,方式3 通道1:速率发生器,方式2 二个通道的工作方式控制字分别写至控制端口219H。 通道1: 102ms / 2ms=51=33H 通道1时间常数写入217H端口
MOV DX,219H MOV AL,36H ;通道0控制字0011,0110 OUT DX,AL ;向控制口写通道0工作方式控制字 MOV DX,216H MOV AL,0D0H OUT DX,AL ;向通道0口写时间常数低8位二进制数 MOV AL,07H OUT DX,AL ;向通道0口写时间常数高8位二进制数 MOV DX,219H MOV AL,54H ;通道1控制字0101,0100 OUT DX,AL ;向控制口写通道1工作方式控制字 MOV DX,217H MOV AL,33H OUT DX,AL ;向通道1口写时间常数8位二进制数
控制LED的点亮或熄灭 例8-3 假设在一个8086的系统中,使用8253控制一个LED的点亮或熄灭。8253各端口地址分别为81H,83H,85H,87H,CLK端输入的时钟信号频率为2MHz,LED点亮和熄灭的时间均为10s。 要求设计硬件电路和驱动程序。 • 分析: • 可以用周期为20s的方波信号驱动LED • 20s需要n=20/ 0.5μs=4*107个时钟周期 • 单一通道的计数初值最大为216=65536,因此需要多个定时器通道进行级连。 • 计数器0与计数器1级连: • 计数器0的初值=5000,f0=2×106Hz/5000=400Hz; 工作于方式2 • 计数器1的初值=8000, f0=400Hz/8000=1/20Hz ; 工作于方式3
+5V 译 码 器 M/IO 8253 A3~A15 CS GATA0 GATA1 A0 CLK0 2MHz A1 A2 A0 A1 OUT0 CLK1 D8~D15 WR RD WR RD OUT1 LED 用8253控制LED的点亮或熄灭
;初始化程序 MOV AL,00110101B ;通道0采用方式2 OUT 87H,AL ;向控制口写通道0工作方式控制字 MOV AL,00H OUT 81H,AL ;向通道0口写计数初值低字节 MOV AL,50H OUT 81H,AL ;向通道0口写计数初值高字节 MOV AL,01110111B ;通道1采用方式3 OUT 87H,AL ;向控制口写通道1工作方式控制字 MOV AL,00H ;向通道1口写计数初值低字节 OUT 83H,AL MOV AL,80H ;向通道1口写计数初值高字节 OUT 83H,AL
8253端口地址: F0H, F2H, F4H, F6H, 8253工作方式:计数器1工作于方式0,按BCD计数,先读写低字节,后读写高字节。 +5V +5V +5V D7-D0 OUT1 WR RD A1 A0 CS INTR WR RD A2 A1 GATE1 CLK1 M/ IO 译码 AB 二、计数功能的应用 例8-3:用8253设计一个自动计数系统(计数500向CPU提出中断申请)。
01 00 000 0 ;通道1初始化程序 MOV AL, 01110001B OUT 0F6H, AL MOV AL, 99H OUT 0F2H, AL MOV AL, 04H OUT 0F2H, AL 数据锁存命令 ;读通道1计数值程序 MOV AL, 01000000B OUT 0F6H, AL IN AL, 0F2H MOV AH, AL IN AL, 0F2H XCHG AH, AL 当前计数值的读取 (1)利用GATE控制信号,使计数器停止计数。故干扰了计数过程,需要硬件电路配合。 (2)利用计数器锁存命令锁存现行计数值,就可从相应的计数器通道中读取计数值。
三、8253在PC/XT中的应用 • 8253-5 • 引脚和功能与8253完全一致,性能略强。 • 端口地址:40H,41H,42H,43H • CLK0~2端输入的时钟信号相同f=1.19318MHz=1234DEH Hz • 计数器0——实时时钟 • 采用方式3 • GATE0=1,初始化后,一直处于计数工作状态 • 初值n=0, 即相当于216=65536。f0= f/65536=18.2Hz • 采用内部16位计数器,每中断1次加1,则计数器计满时所经历的时间=65536×1/18.2=3600秒=1小时 • 计数器1——动态RAM刷新定时器 • 采用方式2 • GATE1=1,初始化后,一直处于计数工作状态 • 初值n=18, f1= f/18=66.2878KHz, T1=15.09μs • OUT1的上升沿使D触发器输出置1,作为DMA请求信号,实现对DRAM的动态刷新。
计数器2——扬声器音调控制 • 采用方式3 • 初值n=533H, f2= f/533H=896Hz • GATE2受8255-3的PB0的控制,PB0=1时允许计数。 • OUT2输出的方波信号与PB1信号相与后送扬声器的驱动电路。 • 两种控制扬声器发声的方法 • PB0=1。扬声器的发声频率由n确定,发声时间长短由PB1信号确定。 • n=f/f2=1193180/f2=1234DE/ f2 • PB0=0,OUT2=1。扬声器的发声频率由PB1的状态变化的频率决定。
;发声频率由定时器2的初值n决定 MOV AL,10110110B ;通道2采用方式2 OUT 43H,AL MOV DX, 0012H ;被除数高16位,1193180=1234DEH MOV AX, 34DEH ;被除数低16位 DIV DI ;DI中存放频率值 OUT 42H,AL ;向通道2送低8位 MOV AL,AH OUT 42H,AL ;向通道2送高8位 IN AL,61H ;读入PB口 MOV AH,AL OR AL,03H ;使PB0,PB1置1 OUT 61H,AL ;接通扬声器,使之发声 …
发声长度→DX 设置BX0=0,BX1 =0 BX1 取反 1/2周期长度→CX CX-1=0? DX-1=0? ;发声频率由PB1的状态变化的频率决定 MOV DX,100 ;发声长度 IN AL,61H AND AL,0FCH ;使PB0,PB1置0 SOUND: XOR AL,02H ;PB1状态取反 OUT 61H,AL ; MOV CX,140H ;1/2周期长度 WAIT: LOOP WAIT ;延时 DEC DX JNZ SOUND …