在微机系统中,经常需要采用定时/计数器进行定时或计数控制。如在PC/XT系统中,8254的通道0用于系统时钟定时,通道1用于DRAM刷新定时,通道2用于驱动扬声器工作。接口电路如图7.29所示
图7.29 8254的接口电路
三个通道的时钟信号CLK2~CLK0由系统时钟4.77MHz经四分频后的1.19MHz提供。
计数器0工作在方式3,GATE0接高电平,OUT0接到8259A的IR0(总线的IRQ0)引脚,要求每隔55ms产生一次定时中断,用于系统实时时钟和磁盘驱动器的电机定时。
计数器1工作在方式2,GATE1接高电平,OUT1输出经D触发器后作为对DMA控制器8237A通道0的DREQ0信号,每隔15ms定时启动刷新DRAM。
计数器2工作在方式3,GATE2由8255A芯片的PB0控制,OUT2输出的方波和8255A芯片的PB1信号进行“与”操作,再经过驱动和低通滤波,产生驱动扬声器发声的音频信号。
计数初始值的计算如下。
计数器0:55ms(54.925 493ms)产生一次中断,即每秒产生18.206次中断请求,所以,
计数初始值=1.193 18MHz÷18.206=65 536(即0000H)
计数器1:在PC/XT计算机中,要求在2ms内进行128次刷新操作,由此可计算出每隔2ms÷128=15.084ms必须进行一次刷新操作。所以
计数初始值=15.084ms×1.19318 MHz=17.997 9≈18
计数器2:假设扬声器的发声频率为1kHz,则
计数初始值=1.193 18 MHz÷1kHz=1 190
设8254的端口地址为40H~43H,8255A的端口地址为60H~63H。下面给出计数器0和计数器1的初始化程序及计数器2的扬声器驱动程序。
计数器0初始化程序为:
图7.29 8254的接口电路
三个通道的时钟信号CLK2~CLK0由系统时钟4.77MHz经四分频后的1.19MHz提供。
计数器0工作在方式3,GATE0接高电平,OUT0接到8259A的IR0(总线的IRQ0)引脚,要求每隔55ms产生一次定时中断,用于系统实时时钟和磁盘驱动器的电机定时。
计数器1工作在方式2,GATE1接高电平,OUT1输出经D触发器后作为对DMA控制器8237A通道0的DREQ0信号,每隔15ms定时启动刷新DRAM。
计数器2工作在方式3,GATE2由8255A芯片的PB0控制,OUT2输出的方波和8255A芯片的PB1信号进行“与”操作,再经过驱动和低通滤波,产生驱动扬声器发声的音频信号。
计数初始值的计算如下。
计数器0:55ms(54.925 493ms)产生一次中断,即每秒产生18.206次中断请求,所以,
计数初始值=1.193 18MHz÷18.206=65 536(即0000H)
计数器1:在PC/XT计算机中,要求在2ms内进行128次刷新操作,由此可计算出每隔2ms÷128=15.084ms必须进行一次刷新操作。所以
计数初始值=15.084ms×1.19318 MHz=17.997 9≈18
计数器2:假设扬声器的发声频率为1kHz,则
计数初始值=1.193 18 MHz÷1kHz=1 190
设8254的端口地址为40H~43H,8255A的端口地址为60H~63H。下面给出计数器0和计数器1的初始化程序及计数器2的扬声器驱动程序。
计数器0初始化程序为:
