‘壹’ 用单片机怎么实现精确计时,不是定时
单片机可以用来 定时器/计数器,用来完成精确定时,也可以用来完成精确计时,比如
要 输出 一个 按照一定频率 的方波脉冲,则可以用 定时器中断,来产生方波脉冲。
如果 要检测 两个脉冲的 时间 间隔,则可以用 计数器 来进行计数,
看两个脉冲间隔 计数器计了 多少数,再计算出是多少时间。
只是使用 定时器/计数器 的 方法不同而已。
‘贰’ 51单片机怎么实现计时
嘿嘿 还是让俺来帮你解决吧
1 关于定时器定时时间的计算问题:
如果使用的是12M晶振计算,指令周期1uS,定时器是加1计数器,即是对内部时钟即指令周期脉冲计数 每当1uS到时,计数器加1。
假设 定时器的初始值=X,则每到1uS 计数器的值就加1 ,则计数器值=X+1+1+...+1 值越来越大,最后达到FFFFH+1 就会产生溢出 结果计数器值回0(FFFFH+1=65536)
可以推出 定时时间=计数的1的个数×1uS=(65536—X )1 uS
结论: 定时时间跟初始值即时间常数X有关。
如果要定时0.5毫秒=500uS 根据定时时间公式 500=(65536—X )
即X=(65536-500) 一般把高8位送TH0 即 (65536-500)/256
把 (65536-500)%256即除上256后的余数 即低8位数送给TL0
每当定时时间到 计数器值都回0 必须重新送时间常数X
2每条指令的时间怎么算? 答复:
可以查指令表 每一条指令的执行时间的周期数 都是固定的 如 NOP 为一个机器周期
MOV R6,#200; 为2个机器周期
机器周期=12/晶振频率 如果晶振频率=12MHZ 则机器周期=1 uS
就可以知道 ; 执行NOP指令的执行时间为 1 uS
执行MOV R6,#200指令的执行时间为 2 uS
因此 是可以精确计算出指令的延时时间的
呵呵 就介绍这些吧 满意就 给加分吧
‘叁’ 单片机计时计分器的计时原理是
单片机计时,就是利用内部的定时器实现的,但是定时器最大只能定时65毫秒(按晶振12M计算),其实可以定时50毫秒,再用中断的方式,中断20次,即计了20次50毫秒,就是1秒钟了。
有了1秒,其余的计时问题就好解决了,计时钟,就按秒,分,小时来计时。
球类计时计分器,也同理,60秒计1分,60分计1小时。
‘肆’ 【单片机】单片机的定时时间是怎样计算
单片机的定时时间的计算公式=计数值(定时值)* 机器周期= 计数值(定时值)* 12 / 晶振频率。
上面的两个等号是等价的,因为,单片机的机器周期=12秒/晶振频率,因此两个公式通用。
完成一个基本操作所需要的时间称为机器周期。一般,一个机器周期由 若干个S周期(状态周期)组成。80C51系列单片机一个机器周期由6个S周期组成。一个S周期(状态周期),由2个时钟周期组成。
若干个机器周期,组成了指令周期。根据指令不同,所需的机器周期数也不同。
(4)单片机怎么计时扩展阅读
几种典型指令;
1、单字节周期指令(比如 INC A)
2、双字节单周期指令(比如 ADD A,#data)
3、单字节双周期指令 (比如 INC DPTR)
4、单字节双周期指令 (比如MOVX A @DPTR)
‘伍’ 单片机倒计时工作原理
单片机倒计时工作原理。在程序中设置一个时间然后不断的减少时间,时间减少为0时就是倒计时时间到了。
‘陆’ 单片机定时器设置步骤
搜狐网
晴 / -25°
新手入门!如何设置单片机定时器?
嵌入式资讯精选
2018-12-05
订阅
在单片机的学习过程中,单片机定时器的合理设置和应用是非常关键的一步,也是刚开始接触单片机知识的新人工程师们比较容易出错误的一个环节之一。在今天的文章中,我们为大家总结了单片机定时器应用过程中的两大常见问题进行实时解析,希望能够对各位新人工程师的学习提供一定帮助。
问题一:51单片机的T0、T1定时器四种工作方式各有什么特点?
在单片机定时器的应用过程中,定时器在进行设置时会有四种不同的工作方式,合理选择相应的工作方式可以帮助工程师快速完成及时设置。下面我们就来逐一讲解一下这四种不同的计时方式。方式0是单片机计时器的第一种计时方式,这一方式13位计数模式。方式1则采用16位计数模式,方式2采用8位自动重装入计数模式,这两种技术模式也是目前在单片机应用过程中最常使用的及时方式。最后一种单片机定时器的计时方式是方式3,这一模式下只有T0有的双8位计数模式。
‘柒’ 单片机如何计时
2个按钮分别接在2个中断口上,为单片机扩展一个数码管,2位还是4位看你需要显示多少了,或者使用6位,分别显示时,分,秒
程序是:单片机启动,初始化,循环等待
中断0中断,开始启动定时器,定时50毫秒,计数20次,计数的值为秒;
秒>60,则分+1,分>60,则时+1.
分别把时分秒数据送到数码管,数码管刷新
中断1中断,中断1服务子程序取消定时器中断,计时停止。
电路硬件:
1、at89c51
2、常开按钮(轻触开关)2只
3、共阴数码管,6只。
4、单片机最小系统必须的晶振1块,电容30pF,2只,复位电路需要的10u电解电容1只,电阻10K一只,开关1只,供电另计
因为外部器件不多,就直接用P2送数码管位码,没有扩展显示芯片。
‘捌’ 单片机定时器的使用方法
第一步:设置特殊功能寄存器 TMOD,配置好工作模式。
第二步:设置计数寄存器 TH0 和 TL0 的初值。
第三步:设置 TCON,通过 TR0 置 1 来让定时器开始计数。
第四步:判断 TCON 寄存器的 TF0 位,监测定时器溢出情况。
写程序之前,我们要先来学会计算如何用定时器定时时间。我们的晶振是 11.0592M,时钟周期就是 1/11059200,机器周期是 12/11059200,假如要定时 20ms,就是 0.02 秒,要经过x 个机器周期得到 0.02 秒,我们来算一下 x*12/11059200=0.02,得到 x= 18432。16 位定时器的溢出值是 65536(因 65535 再加 1 才是溢出),于是我们就可以这样操作,先给 TH0 和 TL0一个初始值,让它们经过 18432 个机器周期后刚好达到 65536,也就是溢出,溢出后可以通过检测 TF0 的值得知,就刚好是 0.02 秒。那么初值 y = 65536 - 18432 = 47104,转成 16 进制就是 0xB800,也就是 TH0 = 0xB8,TL0 = 0x00。
这样 0.02 秒的定时我们就做出来了,细心的同学会发现,如果初值直接给一个 0x0000,一直到 65536 溢出,定时器定时值最大也就是 71ms 左右,那么我们想定时更长时间怎么办呢?用你小学学过的逻辑,倍数关系就可以解决此问题。
好了,我们下面就用程序来实现这个功能。
#include
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main(){
unsigned char cnt = 0; //定义一个计数变量,记录 T0 溢出次数
ENLED = 0; //使能 U3,选择独立 LED
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
TMOD = 0x01; //设置 T0 为模式 1
TH0 = 0xB8; //为 T0 赋初值 0xB800
TL0 = 0x00;
TR0 = 1; //启动 T0
while (1){
if (TF0 == 1){ //判断 T0 是否溢出
TF0 = 0; //T0 溢出后,清零中断标志
TH0 = 0xB8; //并重新赋初值
TL0 = 0x00;
cnt++; //计数值自加 1
if (cnt 》= 50){ //判断 T0 溢出是否达到 50 次
cnt = 0; //达到 50 次后计数值清零
LED = ~LED; //LED 取反:0--》1、1--》0
}
}
}
}
程序中都写了注释,结合前几章学的内容,自己分析一下,不难理解。本程序实现的结果是开发板上最右边的小灯点亮一秒,熄灭一秒,也就是以 0.5Hz 的频率进行闪烁