8253的初始化编程
8253的初始化编程内容:一是首先向控制寄存器写入控制字,以选定计数通道(三个中之一),规定该计数的工作方式和计数方式以及计数初值的长度和装入顺序(初值写入方式);二是向已选定的计数器按控制字的要求写入计数初值。8253初始化的要求:(1)对每个计数器,控制字必须写在计数值之前。这是因为计数器的读写格式由它的控制字决定。(2)计数值必须按控制字所规定的格式写入。若控制字规定只写8位,只需写入一次(8位)计数值即可(规定写低8位则高8位自动置0,规定写高8位则低8位自动置0);规定写16位时必须写两次,先写低8位,后写高8位。当初值为0时,也要分两写入,因在二进制计数时,“0”表示65336,在BCD码计数时“0”表示10000104。(3)对所有方式计数器都可以在计数过程中或计数结束后改变计数值,重写计数值也必须遵守控制字所规定的格式,并且不会改变当前计数器的工作方式。(4)计数值不能直接写到减1计数器中,而只能写入计数值寄存器中,并由写操作之后的下一个CLK脉冲将计数值寄存器的内容装入减1计数器开始计数。(5)初始化编程必须明确各个计数器的控制字和计数值不是写到同一个地址单元。各个计数器的控制字各自独立确定,但它们都写入同一个端口地址(控制字寄存器)中,各个计数器的计数值则根据需要独立确定并写入各自计数器的相应寄存器中。例1:设8086系统中8253的三个计数器的端口地址为060H,062H和064H,控制口地址为066H,要求计数器0为方式1,按BCD计数;计数初值为1800D,计数器1为方式0,按二进制计数;计数初值为1234H,计数器2为方式3,按二进制计数;当计数初值为065H时,试分别写出计数器0,1,2的初始化程序。计数器0的初始化:计数0的控制字:00100011B23HMOVAL,23H;计数器0的控制字OUT066H,AL;控制字写入8253的控制器
fMOVAL,18H;取计数初值的高8位,低8位00可不送
fOUT060H,AL;计数初值送计数器0端口计数器1和初始化:计数器1的控制字:01110000B70HMOVAL,70H;计数器的控制字:方式0,送高8位和低8位,二进制计数OUT066H,AL;控制字写入8253的控制器MOVAL,034H;取计数初值的低8位OUT062H,AL;计数初值的低8位,写入计数器1端口MOVAL,12H;取计数初值的高8位OUT062H,AL;计数初值的高8位写入计数器1端口计数器2的初始化:计数器2的控制字:10010110B96HMOVAL,96H;计数器2的控制字96H:方式3,只送低8位,二进制计数OUT066H,AL;控制字r