㈠ 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
因此 是可以精确计算出指令的延时时间的
呵呵 就介绍这些吧 满意就 给加分吧
㈡ 51单片机计时60毫秒怎么算呀,计数周期是啥意思呀
一般51单片机的晶振频率是fosc=12M,单片机内部计时的频率是fosc/12 即1MHZ
因此计数周期1us
内部定时器是16位,最多 计脉冲数为65536个,因此最长定时时间是65.536 ms
要定时60 ms,需经过的脉冲个数是60000个,由于51单片机的定时器是加法计数,因此初值应该写入(65536-60000)
这样经过60mS后,计数器的值就是 (65536-60000)+60000=65536,刚好溢出,溢出标志位TF置1或产生中断
定时器初值又分高8位和低8位,高8位的1代表256,因此高8位是256的倍数,低8位是256的余数
因此 C语言编程就这样 写:
TH0=(65536-60000)/256
TL0=(65536-60000)%256
㈢ 单片机如何计时
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送数码管位码,没有扩展显示芯片。
㈣ 51单片机用定时器计时应该如何计算求大神支招
这个其实很简单的,你只需要知道一个条件即可:晶振频率。
因为51单片机的机器周期计算公式是12/晶振频率MHz,若晶振为12MHz,则机器周期就是12/(12×10^6)=1us,也就是说计数器没1us计数一次。
那么有了这个条件就好办多了,一般来说,12MHz晶振下,16位定时器满计数是65536次,每次1us,最大就能计时65.536ms,则65536减去多少就是定时多少,如(65536-X)/256,就是定时X微秒。
那么如果晶振不是12MHz,就要把上述的X乘以12/晶振,得到的值就是定时时长。原理相同。
有不懂的地方随时回复我。
希望我的回答能帮助到你。
㈤ 【单片机】单片机的定时时间是怎样计算
单片机的定时时间的计算公式=计数值(定时值)* 机器周期= 计数值(定时值)* 12 / 晶振频率。
上面的两个等号是等价的,因为,单片机的机器周期=12秒/晶振频率,因此两个公式通用。
完成一个基本操作所需要的时间称为机器周期。一般,一个机器周期由 若干个S周期(状态周期)组成。80C51系列单片机一个机器周期由6个S周期组成。一个S周期(状态周期),由2个时钟周期组成。
若干个机器周期,组成了指令周期。根据指令不同,所需的机器周期数也不同。
(5)单片机的计时扩展阅读
几种典型指令;
1、单字节周期指令(比如 INC A)
2、双字节单周期指令(比如 ADD A,#data)
3、单字节双周期指令 (比如 INC DPTR)
4、单字节双周期指令 (比如MOVX A @DPTR)
㈥ 如何用单片机做一个简单的倒计时器
51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。定时器定时时间计算公式:初值X=M(最大计时)-计数值。
初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。
M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S
计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。
下面为实现99秒倒计时C语言源程序
/*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/
/*数码管,12M晶振*/
#include <reg52.h>
#define uchar unsigned char
sbit p11=P1^1; //连的是继电器。。
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shiwei;
uchar gewei;
void delay(unsigned int cnt)
{
while(--cnt);
}
void main()
{
TMOD|=0x01; /*定时器0 16位定时器 X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms
*/
TH0=0xd8;
TL0=0xf0;
IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时
TR0=1; //开定时器0
while(1)
{
P0=shiwei; //99的十位
P2=0; //99的个位,
delay(300); //动态扫描数码管延时
P0=gewei;
P2=1;
delay(300);
}
}
void tim(void) interrupt 1 using 1 //定时器0中断
{
static uchar second=99,count; //99只是一个数,可以任意改,因为这里只学习怎样实现倒计时
TH0=0xd8; //定时10毫秒
TL0=0xf0;
count++;
if(count==100) //10毫秒定时,10*100=1000(毫秒)=1秒
{
count=0;
second--;
if(second==0)
{
p11=0; //这里让继电器动作,当然动作之后,要复位才能等下次倒定时再动作。
second=99; //回到99再循环来,当然,可以做其他的控制,
}
shiwei=tab[second/10]; //数码管10位
gewei=tab[second%10]; //数码管个位
}
㈦ 单片机计时器
//1:用AT89C51单片机的定时/计数器T0产生一秒的
//定时时间,作为秒计数时间,当一秒产生时,秒
//计数加1,秒计数到60时,自动从0开始。单片机
//晶振频率为12MHZ
//由于是刚刚注册,积分没有多少,请大家帮个忙,谢谢!
#include<reg52.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
code
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f};
void
display(uchar
fen,uchar
miao);
uchar
a,fen,miao,shu;
void
delay(uint
z);
void
init();
void
main()
{
init();
while(1)
{
display(fen,miao);
}
}
void
timer0()
interrupt
1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
a=0;
shu++;
fen=shu/10;
miao=shu%10;
if(shu==60)
shu=0;
}
}
void
init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void
display(uchar
fen,uchar
miao)
{
P1=0xFe;
P2=table[fen];
delay(5);//延时5毫秒
P1=0xFf;
P2=table[miao];
delay(5);//延时5毫秒
}
void
delay(uint
z)
{
uint
x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//P2口接数码管,然后数码管位选通过74HC138来控制
//我可是刚学,弄了好久才弄出来的哦
//要图的话加980100952
//这个软件是调通过了的,也加载到我的实验扳上试过的
㈧ 单片机计时器
(65536-10000)/256 意思是:
括号内的相减结果,即单片机定时器的预装时间常数X,
X/256 意思是整除取商,目的是取X的二进制数高8位,装入TH1;
X%256 意思是整除取余,目的是取X的二进制数低8位,装入TL1。