公开/公告号CN103970056A
专利类型发明专利
公开/公告日2014-08-06
原文格式PDF
申请/专利权人 天津职业技术师范大学;
申请/专利号CN201410219818.2
申请日2014-05-22
分类号G05B19/042(20060101);
代理机构
代理人
地址 300222 天津市津南区大沽南路1310号
入库时间 2023-12-17 00:50:37
法律状态公告日
法律状态信息
法律状态
2019-11-12
专利权的转移 IPC(主分类):G05B19/042 登记生效日:20191024 变更前: 变更后: 变更前:
专利申请权、专利权的转移
2019-05-21
专利权的转移 IPC(主分类):G05B19/042 登记生效日:20190506 变更前: 变更后:
专利申请权、专利权的转移
2016-10-12
授权
授权
2014-09-03
实质审查的生效 IPC(主分类):G05B19/042 申请日:20140522
实质审查的生效
2014-08-06
公开
公开
技术领域
本发明涉及一种可编程计数器的应用,属于半导体应用领域,具体地说,涉及一种解决8254可编程计数器在计数方面问题的装置和方法。
背景技术
Intel8254是一种通用的可编程定时/计数器,内含3个独立的16位定时/计数器(T/C),由于芯片本身的特性,使之在事件计数时存在一定的问题。
(1)无计数脉冲问题;8254控制字的装入与时钟无关,即使没有时钟输入,控制字仍然可以装入控制字寄存器,但是,计数初值必须经过一个完整的正脉冲才能被装入计数寄存器;当外部没有时钟输入时,初值则不能被装入计数寄存器,此时从计数器中读取的值是不确定的,无意义。
(2)计数值偏低问题;在写入初值后第一个正脉冲的下降沿只是把初值装入计数寄存器,并不开始计数,而是在下一个正脉冲的下降沿才开始减1计数。
(3)通道级联问题;当外部计数范围超过65536时,可以把计数器0和计数器1通道级联,构成一个32位的计数器,其计数初值分别为N0和N1,但同时也出现了问题;问题一:当计数值小于65536时,计数器1的初值N1没被装入寄存器,则从通道1读出的值是无意义的;问题二:计数器0的计数值应减至0时,才向计数器1借位,但实际上计数器0的计数值减到1时,就向计数器1借位,计数器1开始减1,若此时读值,则计数器1多减1,计数值比实际值大N0;问题三:当读后一个通道的计数值时,前一个通道的计数值可能改变了。
《8254在事件计数方面的问题与解决》,三明职业大学电子系的饶连周在三明职业大学学报第1期发表,发表时间1999年,该文献公开了一种利用MCS-51单片机和74LS74双D触发器外加译码器的方法解决8254计数器在事件计数方面存在的问题,该方法电路连接繁琐,仅仅使用双D触发器难以避免计数值偏低的问题。
发明内容
针对上述存在的问题和现有技术的不足,本发明的目的在于提供一种解决8254可编程计数器在计数方面问题的方法。
本发明的技术方案是:一种解决8254可编程计数器在计数方面问题的装置,包括8254计数器和单片机控制电路,其特征在于,还包括74LS244八相三态缓冲器辅助电路。
所述8254计数器和单片机控制电路包括8254计数器U3、8254计数器U5、单片机U4、电阻R3、电容C3、电容C1、晶振Y1、电容C2;8254计数器U3的1脚至8脚和8254计数器U5的1脚至8脚共同与单片机U4的22脚至29脚相连,8254计数器U3的21脚与单片机U4的36脚相连,8254计数器U3的22脚、8254计数器U5的22脚与单片机U4的37脚相连,8254计数器U3的23脚、8254计数器U5的23脚与单片机U4的38脚相连,8254计数器U3的19脚、8254计数器U5的19脚与单片机U4的39脚相连,8254计数器U3的20脚、8254计数器U5的20脚与单片机U4的40脚相连,8254计数器U3的16脚和8254计数器U3的18脚共同接地,8254计数器U3的14脚、8254计数器U3的11脚与8254计数器U5的14脚、8254计数器U5的11脚共同接电源Vcc,8254计数器U5的21脚与单片机U4的35脚相连,8254计数器U5的16脚和8254计数器U5的18脚共同接地,单片机U4的9脚与电阻R3的一端、电容C3的一端相连,电阻R3的另一端接电源Vcc,电容C3的另一端接地,单片机U4的12脚与晶振Y1的一端、电容C1的一端相连,电容C1的另一端接地,单片机U4的13脚与晶振Y1的另一端、电容C2的一端相连,电容C2的另一端接地,单片机U4的10脚、单片机U4的30脚、单片机U4的32脚共同接电源Vcc,单片机U4的31脚、单片机U4的11脚共同接地。
所述74LS244八相三态缓冲器辅助电路包括7474双D触发器U1、74LS244八相三态缓冲器U2、外部输入信号端P1;7474双D触发器U1的3脚与7474双D触发器U1的9脚相连,7474双D触发器U1的4脚接电源Vcc,7474双D触发器U1的2脚与单片机U4的34脚相连,7474双D触发器U1的1脚、单片机U4的2脚与8254计数器U5的13脚相连,7474双D触发器U1的10脚、7474双D触发器U1的11脚与74LS244八相三态缓冲器U2的4脚、外部输入信号端P1的3脚相连,7474双D触发器U1的12脚与7474双D触发器U1的13脚共同接地,7474双D触发器U1的6脚与74LS244八相三态缓冲器U2的1脚相连,74LS244八相三态缓冲器U2的2脚与8254计数器U3的10脚相连,74LS244八相三态缓冲器U2的6脚与8254计数器U5的10脚相连,74LS244八相三态缓冲器U2的8脚与外部输入信号端P1的2脚相连,74LS244八相三态缓冲器U2的19脚与单片机U4的33脚相连,74LS244八相三态缓冲器U2的11脚、74LS244八相三态缓冲器U2的13脚、74LS244八相三态缓冲器U2的15脚、74LS244八相三态缓冲器U2的17脚与单片机U4的1脚相连,74LS244八相三态缓冲器U2的18脚、74LS244八相三态缓冲器U2的3脚与8254计数器U3的15脚相连,74LS244八相三态缓冲器U2的16脚、74LS244八相三态缓冲器U2的5脚与8254计数器U3的9脚相连,74LS244八相三态缓冲器U2的14脚、74LS244八相三态缓冲器U2的7脚与8254计数器U5的15脚相连,74LS244八相三态缓冲器U2的12脚、74LS244八相三态缓冲器U2的9脚与8254计数器U5的9脚相连,外部输入信号端P1的1脚接地。
一种解决8254可编程计数器在计数方面问题的方法,包括如下步骤:
(1)8254计数器U3和8254计数器U5的GATE0、GATE1四个端口共同连接电源Vcc,始终保持高电平,实现两片8254计数器的通道级联;并且8254计数器U3和8254计数器U5的接口寄存器选择端A0与单片机U4的PA0控制端口连接,8254计数器U3和8254计数器U5的接口寄存器选择端A1与单片机U4的PA1控制端口连接、8254计数器U3和8254计数器U5的读信号端
(2)8254计数器U3和8254计数器U5向各自的内部控制字寄存器写入方式控制字,选定内部计数器0和内部计数器1,确定要使用的内部计数器0和内部计数器1的工作方式,并向内部计数器0和内部计数器1写入计数初值,完成8254计数器U3和8254计数器U5的初始化;
还包括以下步骤:
(3)单片机U4的PA7控制端口先输出低电平使74LS244八相三态缓冲器U2的
(4)单片机U4的PA7控制端口后输出高电平使74LS244八相三态缓冲器U2的
(5)开始计数后,单片机U4读取8254计数器U3和8254计数器U5的回读寄存器锁存的内部计数器0和内部计数器1的状态和计数值,待计数停止时判断8254计数器U3和8254计数器U5的内部计数器0的值是否为1,若不为1,则无需矫正,继续脉冲计数;若为1,则将8254计数器U3和8254计数器U5的内部计数器1的值加1修正,然后再继续脉冲计数。
与现有技术相比,本发明的有益效果是:
1.解决8254计数器的计数问题。利用74LS244八相三态缓冲器和7474双D触发器,结合软件编程能有效解决8254计数器存在的无计数脉冲问题、计数值偏低问题和通道级联问题。
2.准确度高。通过软硬件结合,解决问题的同时大大提高了8254计数器的计数精准度。
3.操作简单。本发明采用单片机和8254计数器为核心部件,组件少,操作简单。
附图说明
图1是本发明的8254可编程计数器通用芯片的内部逻辑图。
图2是本发明的8254可编程计数器通用芯片的计数器内部逻辑图。
图3是本发明的8254可编程计数器通用芯片的外部引脚图。
图4是本发明的8254方式2的工作时序图。
图5是本发明的8254的控制字格式图。
图6是本发明的8254读回命令控制字格式图。
图7是8254所存在的计数值偏低问题波形示意图。
图8是本发明的八相三态缓冲器74LS244的引脚和对应真值表图。
图9是本发明的8254计数器和单片机控制电路连接图。
图10是本发明的八相三态缓冲器74LS244辅助电路连接图。
图11是本发明的软件解决方法流程图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细的说明。
首先,简述8254可编程计数器的基本构成和工作方式。参见图1,8254计数器内部逻辑包括与CPU相连的数据总线缓冲器、读/写控制逻辑、控制字寄存器和三个计数器;CPU通过数据总线缓冲器向8254计数器写入控制命令、计数初值或读当前计数值;读/写控制逻辑用于控制8254计数器内部寄存器的读/写操作;控制字寄存器存储控制字指令,设定8254计数器不同的工作方式;三个计数器完全相同但是彼此独立,各自可按照编程设定的方式工作。
参见图2,计数器内部逻辑包括初始值寄存器CR、一个减“1”计数执行部件CE和一个16位输出锁存计数器OL,配有控制逻辑电路、控制字寄存器和状态寄存器等。初始值一旦写入CR,则自动送入CE;当门控信号GATE有效时,CE按时钟信号CLK减“1”计数,CE减为0时,由OUT引脚输出计数回零信号;在计数过程中,OL跟随CE的变化。当CPU写入锁存命令时,OL锁存当前计数值,直至CPU读取计数值之后,OL再继续跟随CE的值;作为发生器时计数初值N=fi/f0,fi为输入CLK频率,f0为OUT输出频率,在不同工作方式及定时/计数时的应用不同。
参见图3,8254计数器外部引脚中D0~D7为三态双向数据端;
参见图4,8254计数器的每个计数器都有六种计数方式,在本实施例中,我们使用的是工作方式2,方式2的具体工作过程为:8254计数器先完成初始化,控制字CW写入之后,OUT初始电平为高,在计数初值N被装入初值寄存器CR后第一个CLK的下降沿将N装入计数执行单元CE,待CLK的下一个下降沿到来且门控信号GATE为高电平时,计数器启动减“1”计数,此时OUT仍保持高电平,直到计数值减到“1”时,OUT才输出低电平,维持一个时钟周期后又恢复为高电平,同时自动将计数初值N加载到CE,再重复以上过程,形成循环计数;输出低电平的时间是一个时钟周期,从一个输出脉冲到下一个输出脉冲的时间等于计数初值N。
参见图5,显示了8254计数器的控制字格式,因为对8254计数器的编程是通过先写控制字,再写初值来实现的,其中SC1SC0为计数器选择位,SC1SC0=00对应选择计数器0,SC1SC0=01对应选择计数器1,SC1SC0=10对应选择计数器2,SC1SC0=11对应读回命令;RW1RW0为读/写格式选择位,RW1RW0=00时计数器锁存,RW1RW0=01时只读/写计数器的低字节,RW1RW0=10时只读/写计数器的高字节,RW1RW0=11时先读/写计数器的低字节,再读/写计数器的高字节;M2M1M0为工作方式选择位,M2M1M0=110或111对应选择工作方式2,BCD对应的是计数码制选择位,取0时以16位二进制计数,取1时以二-十进制计数。
参见图6,8254计数器的一个显著特点就是具有读回状态功能,读回命令可以将三个计数器的计数值和状态锁存,并向CPU返回一个状态字,控制字格式中D7D6=11是读回命令的标志位,D5=0为锁存计数值,D4=0为锁存状态信息,D3~D1是计数器选择位,一次可以锁存一个或多个计数器的状态值或状态信息,当某一计数器中的状态值或状态信息被CPU读取后,锁存失效;读回命令写入控制端口,状态信息和计数值都通过计数器端口读取;如果使读回命令的D5和D4位都为0,即状态信息和计数值都要读回,读取的顺序是:先读取状态信息,后读取计数值。
8254计数器在计数时所存在的问题可参见图7,8254计数器在写入初值后第一个正脉冲的下降沿只是把初值装入计数寄存器,并不开始计数,而是在下一个正脉冲的下降沿才开始减“1”计数;因此,
参见图8,在本实施例中使用八相三态缓冲器74LS244解决无计数脉冲问题和计数值偏低问题,八相三态缓冲器74LS244中
参见图9,8254计数器和单片机控制电路包括8254计数器U3、8254计数器U5、单片机U4、电阻R3、电容C3、电容C1、晶振Y1、电容C2;8254计数器U3的1脚至8脚和8254计数器U5的1脚至8脚共同与单片机U4的22脚至29脚相连,8254计数器U3的21脚与单片机U4的36脚相连,8254计数器U3的22脚、8254计数器U5的22脚与单片机U4的37脚相连,8254计数器U3的23脚、8254计数器U5的23脚与单片机U4的38脚相连,8254计数器U3的19脚、8254计数器U5的19脚与单片机U4的39脚相连,8254计数器U3的20脚、8254计数器U5的20脚与单片机U4的40脚相连,8254计数器U3的16脚和8254计数器U3的18脚共同接地,8254计数器U3的14脚、8254计数器U3的11脚与8254计数器U5的14脚、8254计数器U5的11脚共同接电源Vcc,8254计数器U5的21脚与单片机U4的35脚相连,8254计数器U5的16脚和8254计数器U5的18脚共同接地,单片机U4的9脚与电阻R3的一端、电容C3的一端相连,电阻R3的另一端接电源Vcc,电容C3的另一端接地,单片机U4的12脚与晶振Y1的一端、电容C1的一端相连,电容C1的另一端接地,单片机U4的13脚与晶振Y1的另一端、电容C2的一端相连,电容C2的另一端接地,单片机U4的10脚、单片机U4的30脚、单片机U4的32脚共同接电源Vcc,单片机U4的31脚、单片机U4的11脚共同接地。
参见图10,74LS244八相三态缓冲器辅助电路包括7474双D触发器U1、74LS244八相三态缓冲器U2、外部输入信号端P1;7474双D触发器U1的3脚与7474双D触发器U1的9脚相连,7474双D触发器U1的4脚接电源Vcc,7474双D触发器U1的2脚与单片机U4的34脚相连,7474双D触发器U1的1脚、单片机U4的2脚与8254计数器U5的13脚相连,7474双D触发器U1的10脚、7474双D触发器U1的11脚与74LS244八相三态缓冲器U2的4脚、外部输入信号端P1的3脚相连,7474双D触发器U1的12脚与7474双D触发器U1的13脚共同接地,7474双D触发器U1的6脚与74LS244八相三态缓冲器U2的1脚相连,74LS244八相三态缓冲器U2的2脚与8254计数器U3的10脚相连,74LS244八相三态缓冲器U2的6脚与8254计数器U5的10脚相连,74LS244八相三态缓冲器U2的8脚与外部输入信号端P1的2脚相连,74LS244八相三态缓冲器U2的19脚与单片机U4的33脚相连,74LS244八相三态缓冲器U2的11脚、74LS244八相三态缓冲器U2的13脚、74LS244八相三态缓冲器U2的15脚、74LS244八相三态缓冲器U2的17脚与单片机U4的1脚相连,74LS244八相三态缓冲器U2的18脚、74LS244八相三态缓冲器U2的3脚与8254计数器U3的15脚相连,74LS244八相三态缓冲器U2的16脚、74LS244八相三态缓冲器U2的5脚与8254计数器U3的9脚相连,74LS244八相三态缓冲器U2的14脚、74LS244八相三态缓冲器U2的7脚与8254计数器U5的15脚相连,74LS244八相三态缓冲器U2的12脚、74LS244八相三态缓冲器U2的9脚与8254计数器U5的9脚相连,外部输入信号端P1的1脚接地。单片机U4的PA7输出低电平使74LS244八相三态缓冲器U2的控制端
参见图11,解决8254可编程计数器在计数方面问题的方法包括如下步骤:
(1)8254计数器U3和8254计数器U5的GATE0、GATE1四个端口共同连接电源Vcc,始终保持高电平,实现两片8254计数器的通道级联;并且8254计数器U3和8254计数器U5的接口寄存器选择端A0与单片机U4的PA0控制端口连接,8254计数器U3和8254计数器U5的接口寄存器选择端A1与单片机U4的PA1控制端口连接、8254计数器U3和8254计数器U5的读信号端
(2)8254计数器U3和8254计数器U5向各自的内部控制字寄存器写入方式控制字,选定内部计数器0和内部计数器1,确定要使用的内部计数器0和内部计数器1的工作方式,并向内部计数器0和内部计数器1写入计数初值,完成8254计数器U3和8254计数器U5的初始化;
(3)单片机U4的PA7控制端口先输出低电平使74LS244八相三态缓冲器U2的
(4)单片机U4的PA7控制端口后输出高电平使74LS244八相三态缓冲器U2的
(5)开始计数后,单片机U4读取8254计数器U3和8254计数器U5的回读寄存器锁存的内部计数器0和内部计数器1的状态和计数值,待计数停止时判断8254计数器U3和8254计数器U5的内部计数器0的值是否为1,若不为1,则无需矫正,继续脉冲计数;若为1,则将8254计数器U3和8254计数器U5的内部计数器1的值加1修正,然后再继续脉冲计数。
机译: 液体容器的控制装置,解决了螺帽前进开关是计数器的问题
机译: 获取物理信息的方法和装置,制造用于检测具有大量单元组件的物理量分布的半导体装置的方法,光接收装置和制造方法,其能够解决的问题和解决的问题一种制造方法
机译: 一种能够解决无法从便携式终端向用户选择的按键直接提供关键音效的问题的,能够解决该问题的按键音提供装置及其方法