8255
和CPU一边相连的信号a
RESET-复位信号;
D7~D0 -数据线;
CS# -片选信号;
RD# -读出信号;
WR# -写入信号;
A1、A0-端口选择信号
和外设一边相连的信号
PA7~PA0—A组数据信号;
PB7~PB0—B组数据信号;
PC7~PC0—C组数据信号。
有三种基本工作方式:
p方式0——基本的输入输出方式;
p方式1——选通的输入输出方式;
p方式2——双向传输方式;
eg. 应用1:多片8255的连接
某微机系统有两片8255芯片:J1和J2;
J1、J2的A1/A0分别和系统地址总线的A2/A1连接;
其它控制信号分别连在一起,然后与系统相关信号连接;
系统靠片选信号CS#来区分对J1和J2的访问;
solu:
A8A7 A6 A5 A4 A3 A2 A1 A0 (Y4 Y5)
0 1 1 1 0 0 0 0 0 00E0H
0 1 1 1 0 0 1 1 0 00E6H
0 1 1 1 0 1 0 0 0 00E8H
0 1 1 1 0 1 1 1 0 00EEH
J1:端口A,方式0,输出
端口B,方式0,输入
端口C高4位,输出
端口C低4位,输入
控制字:10000011 83H
1 | MOV AL,83H |
J2:端口A,方式0,输入
端口B,方式1,输出
端口C高4位,输出
端口C低4位,配合端口B工作,可任意为1或0,此处0
控制字:10010100 94H
1 | MOV AL,94H |
eg. 8255工作于方式0
端口地址
A端口:00D0H; B端口: 00D2H;
C端口:00D4H; 控制端口:00D6H;
A端口:方式0,输出 (传送字符的通道)
B端口:未用
C端口高4位:方式0,输出(PC6作为STB#信号输出端)
C端口低4位:方式0,输入 (PC2作为BUSY信号输入端)
控制字:
10000001 81H
A端口:00D0H; B端口:00D2H;
C端口:00D4H; 控制端口:00D6H
1 | MOV AL, 81H |
eg. 8255工作于方式1
设8255端口地址:
A端口00C0H; B端口 00C2H;
C端口00C4H; 控制端口 00C6H
A端口作为数据通道,工作在方式1,输出方式。PC7自动作为OBF#信号输出端,PC6自动作为ACK#信号输入端。CPU控制PC0产生选通脉冲。OBF#此处无用,悬空。
PC3自动作为INTR信号输出端。中断类型号0BH
中断入口地址在2CH~2FH
1 | MAIN:MOV AL,0A0H |
8253
8254&8253不同点:
- 只有8254内部有状态寄存器;
- 8253有2种方式读出计数值,8254增加了读出控制字命令,有3种方式可读出计数值和状态值
8253内部有三个计数器,他们的结构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系:
- 一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有
- 一个8位的控制寄存器,
- 16位的计数初值寄存器CR
- 计数执行部件CE
- 输出锁存器OL
控制字
8253初始化program
8253CNT0~ CNT2端口地址:0200H~0202H
控制寄存器端口地址:0203H
eg. 端口地址:0200H~0203H
CNT0工作于方式3,二进制计数,计数初值65536
CNT0控制字:00 11 011 0 36H
1 | ;CNT0初始化编程 |
eg. 端口地址:0200H~0203H
CNT1工作于方式2,BCD计数,计数初值1023H
CNT1控制字:01 11 010 1 75H
1 | ;CNT1初始化编程 |
eg. 端口地址:0200H~0203H
CNT2工作于方式3,二进制计数,计数初值255
CNT2控制字:10 01 011 0 96H
1 | ;CNT2初始化编程 |
8253的锁存读出命令program
方法:
(1)写锁存命令,使计数值锁存到输出寄存器OL;
(2)读锁定的计数值
eg. 若8253端口地址200H~203H,已知CNT1已经工作,现需要读出CNT1的当前计数值
;锁存命令, CNT0、
CNT1和 CNT2分别为00H、40H和80H
1 | MOV AL,40H ;锁存命令, CNT0、 CNT1和 CNT2分别为00H、40H和80H |
8253 工作mode
软件触发计数启动
- 模式0-计数结束中断
- 模式4-软件触发延时选通
硬件触发计数启动
- 模式1-可编程单拍
- 模式5-硬件触发延时选通
周期信号发生器
- 模式2-频率发生器
- 模式3-方波发生器
8253实例
eg. OUT0输出接8259A的IRQ0,用作PC实时时钟的定时中断请求信号。
工作于方式3,
CNT0的控制字
0011 011 0 36H
计数器初值为0000H,
对应最大方波周期: T=65536*838ns» 55ms。
输出信号频率: f=1/T=18.206Hz
1 | MOV AL, 36H |
用来为动态存储器的刷新提供定时信号。
工作于方式2。
CNT1的控制字
0101 010 0 54H
计数器初值为18H。
对应最大方波周期: T=18*838ns» 15us。
每次刷新512单元,128次刷新全部64KB。所需时间:
15us*128 »1.92ms<2ms
1 | MOV AL, 54H |
GATE2接至并行接口8255A的PB0位,用它控制通道2的计数过程。
输出OUT2经过一个与门,这个与门受PB1位控制。扬声器可由PB0或PB1分别控制发声。8255A的端口地址为60H~63H。
若要求扬声器发出600Hz的声音,可将计数器2设定为方式3,作为方波发生器
1 | MOV AL, 10110110B ;方式3,写入16位计数值 |
eg.
1 | NAME EX_1 |