10.1 8253定时计数器
两个寄存器占有同样的地址
接口中的寄存器其实就是端口
。
WR中第一个负脉冲:写命令字
WR中第二个负脉冲:写初值
自动重复计数:计数寄存器的值减到0,初值寄存器的值会自动导入到计数寄存器中
自动重复计数的才能输出连续的信号
前提是初值是偶数个
第三位和第四位的00将计数计数器的初值读入(最高两位所指定的计数器计数计数器的目前的状态)
因最大计数初值为0,则若选择BCD方式:0-1=9999;选二进制方式0-1=FFFF
软件启动方式:所以GATE端全接电源
- 前三行写入控制字
- 后面写入初值
- 0120H最低两位是0,则是控制器0的地址
- 因为是16位字,所以先放入AX,分两次写
- OUT指令不允许累加器操作数是AH,所以必须把AH送到AL中,再输出
10.2 可编程并行接口
可以让PC口的低四位获取某一个外设的状态信息,PC口的高四位获取另外一个外部设备的状态信息,这样扩大了它的应用范围。
- 这四个端口在一片芯片上则具有同样的高位地址
- REAST:复位信号
- 蓝色部分
- 8255初始化,A口输入,B口输出,C口低位输出
- MOV AL,1001
0
000B中的10010000B是方式控制字,位控制字最高位一定是1,红色位是C口高位的输出输入状态可为0也可为1(因为C端口的高四位没有用到),其他位均确定。C端口的PC0位作为输出位,所以一定要初始化,使用它的位控制字初始化 - MOV AL,中的0也是方式控制字,(位控制字最高位一定是0,其余三位即D6、D5、D4位可以是任意状态,通常选0。因为是PC0位则接着的3位也是0。最低位因为初始化希望灯不亮而是低电平则也为0),故位控制字为0)
- 酒红色部分(启动布防)
- PB7输出高电平,启动布防(MOV AL,80H(不一定是80H,只要保证最高位是1即可))
- 黑色部分
- 循环检测8个端口的状态(全0则无异常都正常)
- A端口的端口地址是1020H
- 红色部分
- 当认为有异常时,PC0位输出报警信号输出1
- C端口输出一个数AL 1(C0位是1(保证高电平),其他C1到C7都为0)
- 调用延迟
- C0位再输出0
- NOT AL(此时C0位已经是1,再按位取反将C0变为0,再输出)实现信号灯闪烁
- 信号灯闪10次,则给CX送10
- LOOP指令实现闪烁次数的循环
- 自动进入下一次检测过程,跳转到A
10.3 应用例
- 以子程序的方式将8255与8253的初始化
- PC7控制警灯,当其低电平时灯亮,要报警8253通道0需要输出连续方波,其gate端要有高电平(和PC6端连接在了一起,需要报警时,PC6端输出高电平),PC7端低电平亮警灯。
-