产品概述

51单片机脉冲计数 51单片机计数脉冲频率超过晶振频率124也行?仿真与实际

小编 2024-11-24 产品概述 23 0

51单片机计数脉冲频率超过晶振频率124也行?仿真与实际

知识:51单片机计数脉冲频率超过晶振频率的1/24也可以计数?理论和实际的差别

问题导入:书本上讲51单片机的外部计数频率不能超过晶振频率的1/24,可实际仿真并非如此,难道书上错了吗?

问题来源:今天上了单片机定时计数器外部计数的实验课,我和其他两同学做完了后,老师现场给我们三个出了一个进阶题:书上讲单片机计数频率不能超过晶振的1/24,对于12MHz的晶振也就是不能超过0.5MHz,为什么仿真频率用0.1MHz,0.5MHz,1MHz都可以计数,而且1MHz的误差不明显?难道书上错了吗?要有质疑精神,不要肯定书上就一定正确。

老师问完,我们都疑惑了,然后一起讨论。同学说是仿真和实物的误差,老师没有直接肯定这个答案,我们以为答错了,然后我们又往其它方面想,后来也没想出什么答案。

老师说:“假如路上的车开60码你可以精确计数通过多少辆,如果开500码呢?”

“超过60也可以计数,只不过计不准”我们表达了这样的答案。

在老师的引导下,我还是认为是仿真和实物的误差,不过这次我说得更详细,我说:“实物受到物理限制,仿真只是理论模型”,这次老师认可了这个回答。通过这个问题,老师告诉我们的道理是:仿真只是仿真,理论只是理论,有些东西还是得做实物。

本次实验的问题如下

Proteus仿真图如下

代码如下

为了进一步研究,我调节信号源脉冲频率,做了以下7组实验(内容有点长,不想看的直接到后面看表格总结)

实验1:当T0输入脉冲频率为200Hz时

周期=5ms=5000us

P1.0口示波器测量数据:

周期=2.00586s

理论计算的周期为:

5000us*200个计数*2=2s

理论和仿真差5860us,误差0.293%

实验2:当T0输入脉冲频率为2000Hz时

周期=500us

P1.0口示波器测量数据:

周期=199.56ms=199560us

理论计算的周期为:

500us*200个计数*2=200000us

仿真和理论差440us,误差0.22%

实验3:当T0输入脉冲频率为10000Hz时

周期=0.1ms=100us

P1.0口示波器测量数据:

周期=39.99ms=39990us

理论计算的周期为:

100us*200个计数*2=40000us

仿真和理论差10us,误差0.025%

实验4:当T0输入脉冲频率为0.1MHz时

周期=0.01ms=10us

P1.0口示波器测量数据:

周期=4ms=4000us

理论计算的周期为:

10us*200个计数*2=4000us

理论和仿真周期刚好吻合

实验5:当T0输入脉冲频率为0.5MHz时

周期=2us

P1.0口示波器测量数据:

周期=0.82ms=820us

理论计算的周期为:

2us*200个计数*2=800us

理论和仿真周期差20us,误差2.5%

实验6:当T0输入脉冲频率为1MHz时

周期=1us

P1.0口示波器测量数据:

周期=0.42ms=420us

理论计算的周期为:

1us*200个计数*2=400us

理论和仿真周期差20us,误差5%

实验7:当T0输入脉冲频率为2MHz时

周期=0.5us

P1.0口示波器测量数据:

周期=0.21ms=210us

理论计算的周期为:

0.5us*200个计数*2=200us

理论和仿真周期差10us,误差5%

总结以上7个实验

从以上实验可以看出,在proteus仿真中,单片机外部脉冲频率如果小于单片机频率的1/24,误差很小,这是由于运行指令需要消耗时间。即使是超过单片机频率的1/24也可以计数,只不过误差大很多。而在实物中,这个误差会更大,甚至会出现错误。

书上也说了,对于采样计数脉冲需要占用2个机器周期,计数脉冲频率不能高于振荡脉冲频率的1/24,这句话不论是从理论还是实际计数精确严谨的角度来讲都没错。

我是何同学JoseHe,关注我,分享更多教育知识。

定时器计数器综合应用实例讲解

【例1】 编写定时器T0产生1秒的定时程序,通过P1.0口输出高、低电平均为1s的方波(假设单片机采用12MHz的晶振)。

分析如下:

12MHz的晶振,机器周期为1us,各种工作方式直接定时的最大定时时间分别为:

方式0: 2 13 =8192us=8.192ms

方式1: 2 16 =65536us=65.536ms

方式2、3: 2 8 =256us

编程思路:

任何一种方式都无法直接实现1s的定时,可以考虑采用方式1实现50ms定时中断,设置一变量对中断的次数进行计数,计数到20时即为1秒。

c语言源程序如下:

【例2】 脉冲宽度的检测:要求对外部输入的高电平脉冲持续的时间进行检测,即检测高电平脉冲宽度,将检测的脉宽以微秒为单位显示在数码管上(假设单片机的晶振频率为12MHz)。

脉宽检测系统电路如图5-8所示。

图5-8 脉冲宽度检测系统电路图

分析如下:

TMOD的GATE位为门控位,当GATE置1时,只有当对应的外部中断引脚

为1,且TRn置1时,定时器n才会启动定时(n=0或1)。利用该特点,可以检测

口脉冲高电平持续的时间,在信号的上升沿启动定时器,下降沿停止定时器。

在本实例中,采用T0的方式1定时功能对脉冲宽度进行测量,直接测量的最大值为65535,如果晶振为12MHz,则机器周期为1us,直接可检测的最大脉冲宽度为65.535ms。如果需要检测更宽的脉冲,可对定时器0溢出的次数进行计数,将溢出次数乘以65536,来计算。将外部中断设为下降沿触发,当检测到下降沿信号时,将进入外部中断处理程序,读取定时器的数值,此数值即为脉冲信号的宽度,通过数码管(关于数码管显示的知识参见8.3节)动态扫描显示检测的脉冲宽度值。

c源程序如下:

【例3】 单片机时钟:由6个数码管的动态扫描显示分别显示小时、分钟、秒,由四个按键对时间进行调节。数据调整采用移位的方式,根据移位键触发的次数去调节不同的时间对象,加1、减1键分别对时间进行加1和减1调整,清零键将时间清零。

单片机时钟系统电路如图5-9所示。

分析如下:

根据题目的功能要求,系统主要包括数码管动态扫描显示程序、按键检测调时程序、时间产生程序、系统初始化等程序模块。

➢ 时间产生的思路 :由定时器产生50毫秒定时中断,中断20次为1秒,当秒加到60时,秒清零,分钟加1,当分钟加到60分时,分钟清零,小时加1,当小时加到24时,小时清零。

➢ 按键检测调时思路 :设置时间变量setNum对移位按键的次数进行记录,默认为0,不进入调时状态,随着移位按键的触发,setNum值加1,程序根据setNum的值分别处于调节秒、分钟、小时状态,当setNum加到4时回到0。

➢ 数码管动态扫描显示思路 :将秒、分、时时间分别拆分出个位和十位数,通过查询数字显示的代码表,送至P0口,通过P2.0~P2.5动态扫描驱动对应的数码管显示。

图5-9 单片机时钟系统电路图

c源程序如下:

【例4】 单片机频率计:将外部脉冲从P3.5口输入,利用利用单片机的定时/计数器功能,计算脉冲频率并将频率值通过数码管进行显示。

频率计系统电路如图5-10所示。

分析如下:

频率是周期的倒数,即每秒钟产生的周期信号的个数。根据频率的定义,充分的利用单片机的定时/计数器资源,由定时器0实现1秒定时,定时器1则对外部脉冲个数进行计数,这样1秒钟内所计的脉冲个数即为输入信号的频率。

编程说明:

在8051单片机中有两个16位的定时/计数器,分别为T0和T1,在这里设置T0为工作方式1定时,T1为工作方式1计数,则TMOD=0x51。

计数脉冲由单片机的P3.5口输入,利用定时器0产生50毫秒定时,定时中断20次即为1秒钟,将单片机定时器1设为计数模式,由P3.5(T1)口输入外部计数脉冲,在1秒钟计数的脉冲信号数即为所测信号的频率,然后由数码管动态扫描显示对应的频率值。

图5-10 频率及系统电路图

c源程序如下:

相关问答

51单片机 如何用 计数器 检测 脉冲 信号(高低电平),程序怎样做!没...

可以利用51单片机的计数器T0、T1,例如用计数器0的外部计数脉冲输入端T0计数,当计满100个脉冲数量后,触发中断。进入计数服务中断程序。计数原理:例如:可以用...

51单片机计数器 计数一个机器周期为一次吗?是一个机器周期吗?...

[回答]单片机计数器计的是外部输入脉冲的个数,脉冲的周期至少应该是机器周期的两倍,否则,不能正常计数.

51单片机 的定时器和 计数 器分别定时和 计数 的周期是多长时间,这个 脉冲 周期有规定吗?

定时器/计数器本质上都是计数器,只不过数的东西不一样.定时器/计数器做为定时器来用的时候,是数的单片机时钟的脉冲个数,也就是说,单片机的时钟做为定时器/计...

单片机计数 输入端最高 脉冲 频率是多少? - 婷小猫_5763E181 的...

12MHz晶振时,计数速率为1MHz外部脉冲的变化必须要比51单片机采样的速度慢才行,否则会丢失计数脉冲的个数。1分析:51单片机在每个机器周期的S5...

单片机计数 输入端最高 脉冲 频率是多少? - 4IR5t0UYe9C 的回答...

外部脉冲的变化必须要比51单片机采样的速度慢才行,否则会丢失计数脉冲的个数。1分析:51单片机在每个机器周期的S5P2对计数端点脉冲进行采样,需...

MCS- 51 系列 单片机 定时/ 计数 器的定时功能和 计数 功能分别应用于什么场合?

定时器和计数器本质上讲都是计数器,定时器使用机器时钟做计数源,因为机器时钟是稳定性好,时钟数就是时间,所以叫定时器。当计数器用时,使用的是外部输入的脉...

单片机 计数 器,每 计数 一次是多少时间?

定时器/计数器本质上都是计数器,只不过数的东西不一样.定时器/计数器做为定时器来用的时候,是数的单片机时钟的脉冲个数,也就是说,单片机的时钟做为定时器/计...

51单片机计数 器t0要 脉冲 吗?

51单片机计数器t0是一种特定的计时器,在使用过程中需要大量的脉冲来进行计数。计数器t0可以通过外部引脚组合的方式得到不同频率的脉冲来进行计数。但是也可以...

51单片机 如何定义t0为计时器t1为 计数 器?

常规方法测量脉冲的频率,利用51单片机的两个定时器来测量,一个定时器0来定时,一个定时器1作为计数方式voidTimer0Init()//2毫秒@12.000MHz{...常规方法测...

脉冲 能作为 单片机 时钟吗?

可以,设定为计数器模式即可,如用定时器0对外部脉冲计数采用16位模式,TMOD|=0X05;用定时器1对外部脉冲计数采用16位模式,TMOD|=0X50;其余是否中断,初值装...

猜你喜欢