970 likes | 1.13k Views
吉林大学工学部计算机硬件基础课程 微机原理与接口技术. 侯彦利. 第 7 章 可编程接口芯片. 可编程定时 / 计数器 8253 可编程并行接口 8255A 串行通讯基本概念. 7.1 定时 / 计数器 8253 芯片. 常用定时方法: 软件定时:采用软件编程来实现定时和计数要求 , 通用灵活 , 但占用 CPU 时间; 硬件定时:采用专用的硬件电路来实现。 定时 / 计数器从计数方式上分为加法计数器和减法计数器。 计数器启动后与 CPU 并行工作,不占 CPU 时间。. CLK 0. D 7. ~. D 0. GATE 0. OUT 0.
E N D
吉林大学工学部计算机硬件基础课程微机原理与接口技术吉林大学工学部计算机硬件基础课程微机原理与接口技术 侯彦利
第7章 可编程接口芯片 • 可编程定时/计数器8253 • 可编程并行接口8255A • 串行通讯基本概念
7.1 定时/计数器8253芯片 • 常用定时方法: • 软件定时:采用软件编程来实现定时和计数要求,通用灵活,但占用CPU时间; • 硬件定时:采用专用的硬件电路来实现。 • 定时/计数器从计数方式上分为加法计数器和减法计数器。 • 计数器启动后与CPU并行工作,不占CPU时间。
CLK0 D7 ~ D0 GATE0 OUT0 数 据 总 线 缓冲器 计数器 0 片 内 总 线 RD CLK1 WR 计数器 1 读/写 逻 辑 A0 GATE1 A1 OUT1 CS CLK2 计数器 2 控 制 寄存器 GATE2 OUT2 可编程定时器8253的内部结构图
CLK GATE OUT • 8253的功能: • 具有三个功能完全相同的独立的16位减法计数器;每个计数器都包括一个16位的初值寄存器、一个计数执行单元和一个输出锁存器; • 每个计数器的计数时钟频率最高为:2MHZ • 每个计数器可以按十进制数或二进制数预置初值; • 每个计数器有六种工作方式,可通过编程设定或改变; • 每个计数器的计数定时值,可由CPU随时读取; 计数 执行单元 初值寄存器 输出锁存器
8253的引线及功能 • D0~D7 :8位双向数据线; • CS:芯片选择; • RD、WR:读写控制信号; • A1,A0:地址线; • A1A0=00 计数器0 • A1A0=01 计数器1 • A1A0=10 计数器2 • A1A0=11 控制寄存器 • CLK:计数器的时钟信号输入端,最高计数频率2MHz; • GATE:门控信号;控制计数器的启动和停止; • OUT:计数器输出信号;
CLK GATE OUT 8253的工作原理 • 当置入初值后,计数执行单元开始对输入脉冲CLK进行减1计数,减到0时从OUT端输出一个信号; • 整个过程可以重复进行; 计数 执行单元 初值寄存器 输出锁存器
计数器的启动的方法 • 软启动:由程序指令启动。 • MOV AX, 500 • OUT 80H, AL • MOV AL, AH • OUT 80H, AL • 如果GATE为高电平,就启动计数; • 硬件启动:由外部信号启动。写入初值后并不启动计数,门控信号GATE由低变高电平后,在CLK的下降沿开始计数;
7.1.2 计数器的工作方式 • 8253一共有6种工作方式; • 在多数工作方式下,计数器每启动一次只工作一个周期;有两种工作方式可以进行自动重复计数; • MOV AL, 0B4H • OUT 43H, AL ;控制字送入控制寄存器 • MOV AX, 800 • OUT 42H, AL ;计数初值低8位送入计数器 • MOV AL, AH • OUT 42H, AL ;计数初值高8位送入计数器
方式0:计数结束中断 • 软件启动、不自动重复计数方式;计数结束后,OUT端输出为高电平,可以作为中断请求信号使用; • 1.只计数一个周期; • 2.在计数过程中GATE变为低电平,则暂停计数; • 3.在计数过程中,可以随时修改计数初值; N=4 CW WR CLK GATE OUT 4 3 2 1 0
注意,8253所有的6个工作方式都有下列共同点:注意,8253所有的6个工作方式都有下列共同点: • ⑴ 控制字写入计数器时,OUT端进入初始状态,不同的工作方式OUT端初始状态不一定相同。 • ⑵ 计数初值写入计数器之后,暂存在初值寄存器中,要经过一个时钟周期的上升沿和下降沿,计数初值才进入计数执行单元,开始计数。 • ⑶ 通常在每个时钟脉冲的上升沿,采样门控信号GATE。不同的工作方式下,门控信号的作用不同。 • ⑷ 在时钟脉冲的下降沿,计数器减1。 • (5) 计数初值也叫时间常数。
方式1:可重复触发的单稳态触发器 • 硬件启动、不自动重复的工作方式; • 当写入控制字后,OUT端输出高电平。写入计数初值后计数器并不开始工作;当GATE端由低到高触发后,在下一个CLK脉冲的下降沿开始计数,OUT端立刻由高到低,计数结束后OUT端输出高电平; 4 3 2 1 0
方式1的特点: • GATE的上升沿触发计数器,计数过程中GATE即使变低也不影响计数; • 可重复触发; • OUT端的负脉冲宽度=计数初值N×TCLK 4 3 2 1 0 如果CLK=2MHz,则:fc= 2MHz Tc=1/fc=0.5x10-6, 如果时间常数N=1000,则 OUT端的负脉冲宽度=NxTc =1000x 0.5x10-6 =500us 计数器0 CLK GATE OUT
N=3 CW WR CLK GATE 3 2 1 3 2 1 OUT 方式2:频率发生器 • 也叫分频器;可以软件启动,也可以硬件启动,计数器自动重复工作。 • 在写入控制字和计数初值期间GATE一直为高电平,则在下一个CLK开始计数,既软启动; • 若写入计数初值时GATE为低电平,则要等到GATE由低到高时才启动,即硬件启动; • 一旦计数器启动,计数器可以自动重复工作;GATE为低,停止计数;
N=3 CW WR CLK GATE 3 2 1 3 2 1 OUT • 写入控制字后,OUT为高电平。如果GATE为高,写入初值后开始减1计数。当计数值减到1时,OUT输出变为低电平,再经过一个CLK之后计数值减为0 ,OUT变为高电平,接着自动重新装入初值, 计数器重复工作。
【例题7-2】 • 设8253的端口地址为:40H~43H,用计数器2作频率发生器,二进制计数,输入脉冲信号为2M,计数初值为800,输出脉冲信号的频率是多少? • 控制字为:10110100B=0B4H • 输出脉冲信号的频率为:FOUT=FCLK/N=2X106/800=2500Hz
初始化程序: • MOV AL, 0B4H • OUT 43H, AL ;控制字送入控制寄存器 • MOV AX, 800 • OUT 42H, AL ;计数初值低8位送入计数器2 • MOV AL, AH • OUT 42H, AL ;计数初值高8位送入计数器2,计数器启动。
方式3-方波发生器 • 可以软启动,也可以硬件启动,计数器自动重复工作; • 写入控制字后,OUT为高电平。如果GATE为高,写入初值后开始减1计数。当计数值减到N/2时,OUT输出变为低电平,直到计数值减为0;接着自动重新装入初值, OUT变为高电平,计数器自动重复工作。 • OUT输出对称方波: • 若计数初值为奇数, OUT输出非对称方波: • GATE由高变低,停止计数。 N/2 (N+1)/2
【例题7-3】 • 设8253的端口地址为:FCF8H~FCFFH,利用计数器1作方波发生器,给定CLK1为2MHz,要求产生频率为1KHz的方波,BCD码计数。编程初始化8253。 • 计数器1工作在方式3:01110111B • 分频系数:N=FCLK/ FOUT =2×106/1000=2000
程序设计如下: • MOV DX, 0FCFBH • MOV AL, 01110111B ; • OUT DX, AL • MOV DX, 0FCF9H • MOV AX, 2000H ;BCD码计数初值 • OUT DX, AL ;写入计数初值低字节 • MOV AL, AH • OUT DX, AL ;写入计数初值高字节,计数器启动
N=4 CW WR CLK GATE 0 1 2 4 3 OUT 4 3 2 1 方式4:软件触发选通 • 软件启动、不自动重复计数方式;写入控制字后,OUT为高电平,计数器装入初值后即启动计数,计数结束时 OUT输出宽度为TCLK的负脉冲,如下: GATE为低,停止计数。
N=5 CW WR CLK GATE OUT 1 0 3 2 4 方式5:硬件触发选通 • 硬件启动、不自动重复的工作方式。GATE的上升沿触发计数器;计数结束时,在OUT端输出一个脉冲宽度为TCLK的负脉冲信号: GATE的上升沿,将重新计数。
8253的控制字 计数器选择: 00-选计数器0 01-选计数器1 10-选计数器2 11-无效 计数初值长度选择: 00-计数器中的数据锁存于缓冲器 01-只读/写低8位,高8 位默认为0 10-只读/写高8位,低8 位默认为0 11-先读/写低8位 后读/写高8位 方式选择: 000-方式0 001-方式1 X10-方式2 X11-方式3 100-方式4 101-方式5 数制选择:0 二进制 1 BCD码 二进制计数范围:0000~65536H;初值=0000,为最大计数值十进制计数范围:0000~10000;初值=0000,为最大计数值;
例如:利用计数器1作频率发生器,给定CLK1为2MHz,要求产生频率为1KHz的脉冲。计数器1工作在方式2:0111X100B例如:利用计数器1作频率发生器,给定CLK1为2MHz,要求产生频率为1KHz的脉冲。计数器1工作在方式2:0111X100B • 时间常数 N=fc/fo =2×106/(1×103)=2000 • 程序设计如下: • MOV AL,01110100B ; • OUT 83H,AL • MOV AX,2000 ;先写入低字节计数值, • OUT 81H,AL • MOV AL,AH ;后写入高字节计数值 • OUT 81H,AL • … ;OUT输出脉冲周期为1ms
例如:利用计数器2作脉冲发生器,给定CLK2为1MHz,要求产生周期为20ms的方波。例如:利用计数器2作脉冲发生器,给定CLK2为1MHz,要求产生周期为20ms的方波。 • 计数器2工作在方式3:1011X110B • 计数初值 N=fc/fo=1×106 ×20×10-3=20000=4E20H • 程序设计如下: • MOV AL,10110110B ;#2 ,方式3,二进制 • OUT 83H,AL • MOV AL,20H :先写入低字节计数值 • OUT 82H,AL • MOV AL,4EH ;后写入高字节计数值 • OUT 82H,AL • … ; OUT输出周期为20ms的方波
8253 GATE0 GATE1 GATE2 RD OUT0 WR OUT1 系 统 总 线 信 号 A1 A1 OUT2 A0 A0 CLK0 CLK1 & G CLK2 IOW CS A15 A14 & A13 A12 A11 A10 A9 A8 A2 A7 ≥1 A6 A5 C A4 B D7 D7 A3 A ~ ~ D0 D0 74LS138 IOR IOW IOR G2A Y0 G2B 8253与系统的连接
7.1.3 8253的应用 • 8253的初始化编程,主要设置两方面的内容,一是写入控制字,二是写入计数初值。 • 控制字写入8253的控制寄存器。3个控制字可以连续写入控制寄存器。 • 写入计数初值时注意两个问题:一是3个计数初值应写入相应的计数器中,不可混乱,二是要符合控制字的要求。
【例7-4】 • 8253与计算机系统的连接如图所示,三个计数器使用情况如下: • CNT0:对外部事件计数,计满100次向CPU发出中断请求。 • CNT1:产生1kHz方波。 • CNT2:标准定时,定时时间为1s。
计数器0应设置为方式0,完成计数功能。 • 计数器1应设置为方式3,CLK1输入的时钟脉冲频率为2MHz,输出频率为1kHz的方波,周期为1ms; • 计数器1的计数初值为2000。 • 计数器2设置为方式0,完成定时功能,定时1秒,利用OUT2向CPU发出一次中断请求,其输入时钟频率为1kHz,计数初值应为1000。 • 8253的端口地址为01FC~01FFH。
START: MOV DX, 01FFH • MOV AL, 10H • OUT DX, AL ;计数器0工作在方式0 • MOV DX, 01FCH • MOV AL, 100 • OUT DX, AL ;计数器0置初值 • MOV DX, 01FFH • MOV AL, 76H • OUT DX, AL ;计数器1工作在方式3 • MOV DX, 01FDH • MOV AX, 2000 • OUT DX, AL • MOV AL, AH • OUT DX, AL ;计数器1置初值
MOV DX, 01FFH • MOV AL, 0B0H • OUT DX, AL ;计数器2工作在方式0 • MOV DX, 01FEH • MOV AX, 1000 • OUT DX, AL • MOV AL, AH • OUT DX, AL ;计数器2置初值
【例题7-6】 • 在IBM PC/XT中定时器/计数器芯片8253,其计数器0(CNT0)工作在方式3,GATE0固定为高电平,OUT0作为中断请求信号接至8259A中断控制器的IRQ0,作为定时中断,用于时钟的时间基准。 • 计数器1工作在方式2,GATE1固定为高电平,OUT1的输出作为定时(约15us)信号,用于刷新动态RAM,在2ms内可以有132次刷新(128次是系统的最低要求)。
计数器2工作在方式3,输出1KHZ的方波,作为扬声器的音频信号源,GATE2由8255的PB0控制,OUT2与8255的PB1相与,这样利用8255的PB0、PB1同时为高电平的时间来控制喇叭发长音还是发短音。计数器2工作在方式3,输出1KHZ的方波,作为扬声器的音频信号源,GATE2由8255的PB0控制,OUT2与8255的PB1相与,这样利用8255的PB0、PB1同时为高电平的时间来控制喇叭发长音还是发短音。 • 三个计数器的输入时钟频率一样,为F=1.19MHZ
8253的端口地址为040H~043H,8255的端口地址为60H~63H,ROM-BIOS对8253的编程如下:8253的端口地址为040H~043H,8255的端口地址为60H~63H,ROM-BIOS对8253的编程如下: • 计数器0用于定时中断: • MOV AL, 00110110B ; • OUT 43H, AL • MOV AL, 0 ;计数初值为0000,即为最大。 • OUT 40H, AL • OUT 40H, AL
计数器1用于动态RAM的刷新: • MOV AL, 01010100B • OUT 43H, AL • MOV AL, 18 ;计数初值为18 • OUT 41H, AL
计数器2用于产生1KHZ的方波送至扬声器发声,声响子程序为BEEP,入口地址为FFA08H:计数器2用于产生1KHZ的方波送至扬声器发声,声响子程序为BEEP,入口地址为FFA08H: • BEEP PROC NEAR • MOV AL, 10110110B • OUT 43H, AL • MOV AX, 1331 ;计数初值为1331 • OUT 42H, AL • MOV AL, AH • OUT 42H, AL • IN AL, 61H ;读取8255B端口 • MOV AH, AL ;存在AH
OR AL, 03H • OUT 61H, AL ;输出至8255的B端口,使扬声器发声 • SUB CX, CX ;设置延时参数 • G7: LOOP G7 • MOV BH, 0 • DEC BX ;BL的值为控制长短声,BL=6(长),BL=1(短) • JNZ G7 • MOV AL, AH ;恢复8255B端口值,停止发声 • OUT 61H, AL • RET • BEEP ENDP
例7-2 • 写出8253的初始化程序。其3个计数器的时钟频率均为2MHz,计数器0在定时100us后产生中断请求;计数器1用于产生周期为10us的对称方波,计数器2每1 ms产生一个负脉冲,BCD码计数。 • 计数器0:方式0,时间常数=100us/0.5us=200 • 控制字为:00110000B • 计数器1:方式3,输出方波信号, • 时间常数=10us/0.5us=20 • 控制字为:01110110B • 计数器2:方式2, • 时间常数为= 1ms/0.5us=2000 • 控制字为:10110101B
8253的编程 • MOV DX,0FF07H ; • MOV AL,30H • OUT DX,AL • MOV AL,76H • OUT DX,AL • MOV AL,0B5H • OUT DX,AL • MOV DX,0FF04H ;计数器0 • MOV AX,200 ;先写入低字节计数值, • OUT DX,AL • MOV AL,AH • OUT DX,AL
MOV DX,0FF05H ;计数器1 • MOV AX,20 • OUT DX,AL • MOV AL,AH • OUT DX,AL • MOV DX,0FF06H ;计数器2 ,BCD码计数 • MOV AL, 00H • OUT DX,AL • MOV AL,20H • OUT DX,AL
8253的编程 • 例7-1 IBM-PC/XT中使用了一片8253,其3个计数器的输入时钟频率均为1.19MHz。 • 计数器0 (CNT0)为系统的电子钟提供时间基准,它的输出作为系统的中断源,接到8259的IR0端。 • 计数器1(CNT1)用于DRAM的定时刷新; • 计数器2(CNT2)作为扬声器的音频信号源,输出不同频率的方波信号。 • 8253的端口地址设为40H, 41H, 42H,43H
分析 • 计数器0:方式3,输出方波信号,时间常数= 65536 ,置入0000H,1.19MHz/65536=18.2Hz,每秒产生18.2次中断请求; • 计数器1:方式2,分频系数为18,OUT1的输出脉冲频率为1.19/18,即DRAM的定时刷新周期为15us; • 计数器2:方式3,控制扬声器发出1KHz的声音,时间常数为:1.19MHz/1KHz=1190=04A6H
CNT0: MOV AL,00110110B OUT 43H,AL MOV AL,00H OUT 40H,AL OUT 40H,AL CNT1: MOV AL, 01010100B OUT 43H,AL MOV AL,18 OUT 41H,AL CNT2: MOV AL, 10110110B OUT 43H,AL MOV AL,A6H OUT 42H,AL MOV AL,04H OUT 42H,AL …
7.2 可编程并行接口芯片8255 CPU与外设的数据交换,有并行和串行传送方式。接口可分为并行接口和串行接口。8255A是通用8位可编程并行输入输出接口芯片;
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 PA3 PA2 PA1 PA0 RD CS GND A0 A1 PC7 PC6 PC5 PC4 PC0 PC1 PC2 PC3 PB0 PB1 PB2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 PA4 PA5 PA6 PA7 WR RESET D0 D1 D2 D3 D4 D5 D6 D7 VCC PB7 PB6 PB5 PB4 PB3 • 引脚及功能 : • 40引脚,单一+5V电源,双列直插式; • D7~ D0:数据信号线; • CS:片选信号; • A0A1口地址选择信号; • WR:写信号; • RD:读信号线; • Reset复位信号高电平有效; • 8255复位后,各端口都被预置为输入状态。 • PA0 ~ PA7 :端口A的8条输入输出线 • PB0 ~ PB7 :端口B的8条输入或输出线 • PC0~ PC7 :端口C的8条输入或输出线,也可以用作控制信号的输出或状态信号的输入线;
内部结构 I/O A组 端口A PA7~PA0 A组 控制 电路 I/O A组 端口C 高4位 PC7~PC4 缓 冲 器 D7~D0 I/O B组 端口C 低4位 PC3~PC0 I/O RD WR A1 A0 RESET CS 读/写 控制 逻辑 B组 控制 电路 PB7~PB0 B组 端口B 内部逻辑 外设接口