注:未记录芯片的引脚和具体工作方式,主要记录芯片的各控制字或命令字的初始化编程要点,其字格式也并未给出,可翻阅书籍查找。
CONTENTS
- 可编程中断控制器Intel 8259A
- 可编程定时/计数器芯片8253
- 可编程并行接口芯片8255A
- 可编程串行接口芯片8251A
- 具体代码的编写方式(汇编,可先行看此)
写入到芯片端口 OUT指令
从芯片端口读 IN指令
1.可编程中断控制器Intel 8259A
对应写入的芯片端口地址:(小—偶地址,大—奇地址)
ICW1 | ICW2 | ICW3 | ICW4 | OCW1 | OCW2 | OCW3 |
---|---|---|---|---|---|---|
小 | 大 | 大 | 大 | 大 | 小 | 小 |
a.初始化编程:根据使用要求,在正常操作开始前写入
写入顺序(要考虑题意是否需要此命令字):ICW1 -> ICW2 -> ICW3 -> ICW4
芯片控制初始化命令字ICW1:需要ICW4?单、多片8259?电平、边沿?
中断类型初始化命令字ICW2:一般写入最小的中断类型号
主 / 从片初始化命令字ICW3:主从格式不同
方式控制初始化控制字ICW4:嵌套?缓冲?EOI?88/85?
b.工作方式编程:OCW1、OCW2、OCW3 %根据使用要求,在工作开始前或工作期间写入皆可
屏蔽操作命令字OCW1:对应位屏蔽或开放中断
中断方式操作命令字OCW2:中断结束?优先级循环?
状态操作命令字OCW3:读IRR、ISR或状态寄存器状 注:当需要读IMR时,按我的做题经验直接从大地址(奇地址)读
2.可编程定时/计数器芯片8253
芯片端口地址:
a.单字节,eg : 40H 41H 42H 43H
b.双字节,eg:310H 312H 314H 316H
计数器0(通道0) | 计数器1(通道1) | 计数器2(通道2) | 控制端口 |
---|---|---|---|
40H | 41H | 42H | 43H |
310H | 312H | 314H | 316H |
一个控制字:初始化时先写控制字(写入控制端口),再送计数初值(写入相应计数器的端口)。
要根据计数初值字节数来选用具体的读写格式和计数制。
当计数初值为两字节时,先写入低字节再高字节。
3.可编程并行接口芯片8255A
芯片端口地址:eg : 40H 41H 42H 43H
A口 | B口 | C口 | 控制口 |
---|---|---|---|
40H | 41H | 42H | 43H |
a.方式选择控制字:写入控制口
b.C口置位/复位控制字:写入控制口,对C端口任意位置复位
有需求的话一般先a后b
4.可编程串行接口芯片8251A
一个控制口地址(先写a后b)
a.方式控制字:写入控制口,若有同步字符,则需要在此后写入字符,同样写入控制口
b.命令控制字:写入控制口
c.状态字
5.具体代码的编写方式
eg.控制字为10110000B,写入控制口地址为单字节34H
MOV AL,10110000B
OUT 34H,AL
eg.控制字为10110000B,写入控制口地址为双字节310H,要用DX做跳板
MOV DX,310H
MOV AL,10110000B
OUT DX,AL
eg.读取指定端口的内容如上,单字节直接读,双字节需要借助DX
IN AL,30H ;单字节端口
MOV DX,310H ;双字节端口
IN AL,DX
中断服务程序普通EOI命令:
MOV AL,20H
OUT 小地址,AL
IRET
中断服务子程序的装载(借助DOS功能调用装载),即写入中断向量表
MOV DS,n_CS ;n的基地址,基地址为16位时要借助AX跳板
MOV DX,n_IP ;n的偏移地址
MOV AL,n ;中断类型号n
MOV AH,25H
INT 21H