目录
简要说明
用户扩展的定时计数器应用举例
1 8254作测量脉冲宽度
2 8254作定时
3 8254作分频
4 8254同时用作计数与定时
硬件设计
编辑软件设计
微机系统中定时计数器应用举例
5 计时器设计
硬件设计
软件设计
6 发生器设计
硬件设计
软件设计
定时器应用有两种,一种是根据系统分配的定时/计数资源来开发,一种是利用用户扩展的定时/计数器来开发。这两种端口地址不同,前一个是系统指定的,后一个是由用户指定;前一个的工作方式和计数器通道的具体用途是由系统的初始化确定的固定不变,后一个由用户在设计时安排。
(由系统分配的端口地址)根据表3.1:系统分配给8253的端口地址:0号计数器40H,1号计数器41H,2号计数器42H,方式命令寄存器43H,时钟脉冲频率1.19318MHz。
(用户扩展的定时器应用)根据表3.3:0号计数器地址304H,1号计数器305H,2号计数器306H,方式命令寄存器307H,时钟脉冲频率1.19318MHz。
三个计数器通道的初始化汇编语言:
系统提供的输入时钟CLK = 1MHz,采用二进制计数,软启时门控信号GATE的作用是允许或禁止计数,所以可以用GATE进行脉冲宽度测量,(GATE=1允许计数,GATE=0禁止计数)。
把被测量的脉冲作为门信号连到某个计数器通道(如通道1)的GATE端,GATE为低电平时,装计数初值,GATE变为高电平时开始计数,直到被测脉冲信号变为低电平停止计数,并锁存,然后读出通道1的当前值n,最后脉冲宽度就是(65536-n)us。
选择计数器通道1,工作在0方式,将计数初值设为最大值0000H,设时钟脉冲为1MHz(所得脉冲宽度的单位是us),所以能测最大脉冲宽度是65536us。
三种命令格式和六种工作方式:微机原理——定时器学习1-CSDN博客
要求每隔5ms发出一个扫描负脉冲,系统提供CLK为20kHz,使用十进制计数。
每隔5ms一次的连续负脉冲,选择方式2,所以用计数器通道2,将OUT2作为定时脉冲输出。
周期T = 1/20kHz = 0.05ms,定时常数Tc = 5ms / 0.05ms = 100。
产生频率为1000Hz的方波,系统提供CLK=1.19318Hz,二进制计数。
产生方波:方式3,采用技术通道0,OUT0作为方波输出。
定时常数Tc = CLK0 / OUT0 = 1.19318MHz / 1000Hz = 1193 = 4A9H。。
流水线的工作过程:向通道0写入计数初值时,即开始对流水线上的罐头进行计数,计满24个罐头,计数器输出波形OUT0的上升沿,触发通道1开始定时,定时器输出波形OUT1的下降沿使工作台暂停,经5s后OUT1的上升沿启动工作台,流水线又开始工作,通道0开始计数。(通道0和1都采用十进制计数)
通道0:00 01 010 1 15H 24=18H
通道1:01 11 001 1 73H 定时常数为5 * 100 = 500 = 1F4H(由上一节,作定时器需要换算)
(书上可能错了,时钟频率是100Hz,书上乘的是200。。。)
设计一个计一天时间的日计时器——日时钟。
利用8254的计数器0,工作在方式3(输出一系列方波,方波的周期是准确的,可以用做定时单位),计数初值设置为最大65536,当输入CLK0 = 1.1931816MHz时:
输出方波的频率 Fout0 = 1.1931816MHz / 65536 = 18.2Hz
输出方波的周期 Tout0 = 1 / 18.21000ms = 54.945ms 可以用这个54.945作计时单位。
一天 = 2460601000ms / 54.945 = 1573040个计时单位,十六进制为001800B0H个。
(计满1573040个计时单位就是一天,计满65543个计时单位就是一小时,计满1092个计时单位就是一分钟,计满18.2个计时单位就是一秒)
=================================================================