Ⅰ 单片机时钟公式
如果是51单片机
时钟周期是机器周期的12倍
机器周期是晶体振荡器频率的倒数
1/6MHz=1/6us
51单片机的时钟周期为12*(1/6us)=2us.
Ⅱ 关于用51单片机做一个电子时钟的问题
程序中好像还没有自动加时的部分,并且按键处理还没有消抖措施
不多说了,上程序,俺刚刚为你编写的,测试的时候使用的端口和你的不一样
在我的开发板上测试成功后,按照你的板子端口做了修改
如果你直接复制到你的程序中不能使用,检查及更改一下端口即可
如果满意记得采纳哦,若有疑问可以随时向我提问
/***************************************************************************/
//#include<stdio.h>
#include<reg51.h>
sbit p20=P2^0; sbit p21=P2^1; sbit led=P2^7;
char dis_2[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
unsigned int h,m,s,t,n;
/***************************************************************************/
void delay(char hs)//延时函数
{char hk;for(;hs>0;hs--){for(hk=100;hk>0;hk--);}}
/***************************************************************************/
void XS(unsigned int xh,unsigned int xs) //显示子函数
{
char d1,d2,d3,d4;
d1=(xs/1)%10; d2=(xs/10)%10;
d3=(xh/1)%10; d4=(xh/10)%10;
P0=dis_2[d1]; P1=0x08; delay(10); P1=0x00;//秒个位
P0=dis_2[d2]; P1=0x04; delay(10); P1=0x00;//秒十位
P0=0x7f; P1=0x04; delay(10); P1=0x00;//小数点
P0=dis_2[d3]; P1=0x02; delay(10); P1=0x00;//时个位
P0=dis_2[d4]; P1=0x01; delay(10); P1=0x00;//时十位
}
/***************************************************************************/
void main(void)
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256;
TMOD=0x01; EA=1; ET0=1; TR0=1;//定时器初始化
while(1)//主循环
{
if(p20==0){delay(10);if(p20==0){h++;if(h>23){h=0;}}while(!p20){XS(h,m);}}
if(p21==0){delay(10);if(p21==0){m++;if(m>59){m=0;}}while(!p21){XS(h,m);}}
XS(h,m);//调用数码管显示函数
}
}
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;t++;
if(t>500){t=0;led=~led;}//LED闪烁
if(n>1000){n=0;s++;}//如果达到一秒,秒加一
if(s>59){s=0;m++;}//如果达到一分,分加一
if(m>59){m=0;h++;}//如果达到一小时,小时加一
if(h>23){h=0;}//如果达到24小时,小时清零
}
/***************************************************************************/
Ⅲ 单片机定时器设定一秒
对于51 单片机,11.0592M的多用于有用到波特率的,以提高精度。如果需要定时1 秒的 ,可用6M或12M的晶振。如果用12M的话,则1 个机器周期的1us 。定时器范围是0~FFFF(即65535us)你可定时50ms一次中断,共20次就是1秒。
Ⅳ 如何让一个单片机的定时器计时1秒
首先你要知道你的晶振是多少频率的,然后知道执行一个延迟命令的时间,然后再估算出需要多少个延时命令才能组成1秒。其实网上有很多这样的延时程序。
Ⅳ 单片机如何精确定时1秒钟
采用定时器定时很精确的,如果定时时间为1ms,那循环1000次就是1s。定时初值要看你采用的晶振频率了,下面是12M晶振,定时器0的定时1ms程序。
timer0() interrupt 1 // 1ms延时(12.0MHz)
{
TR0=0;
ET0=0;
TH0=0xfc;
TL0=0x18;
if(delayTimes1!=0) delayTimes1--;
TR0=1;
ET0=1;
}
当要程序中把delayTimes1赋值1000后,等到delayTimes1为0的时候定时1s钟到
Ⅵ c51单片机做电子时钟
主程序如下:
void main(void )//主程序
{
TMOD=0x01;// 定时器1工作方式一
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定时50ms
TL0=(65536-50000)%256;
TR0=1;//启动定时器
while(1)
{
display();
}
}
//中断子程序
void Timer0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20){ a=0;sec++;}
if(sec==60){ sec=0;min++;}
if(min==60){ min=0;hour++;}
if(hour==24){ hour=0;}
}
Ⅶ 单片机时钟秒是怎么得出来的
一个机器周期=12*1/f
f为晶振频率
单片机时钟用计数模式
TMOD=0x01;
TH0=(65536-45872)/256;//要50ms 则由公式计数个数N=2^16-计数初值得
//初值为65536-45782
//把这个数高位给TH0 因为除有这个功能
//取余会提出低位
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
之后两个循环就是1s啦
Ⅷ 8051单片机如何设置一秒的时间间隔的时钟
如果用定时器的话,在12M晶振的环境下,无法直接设置1秒的定时器参数,因为最大也就65535微妙,你可以用定时中断加一个计数器的方式实现1秒的定时,比如设置50毫秒定时中断,计数20次,即实现了你得要求,P1.0的状态1秒变化一次,程序如下:
ORG 0000H
LJMP START
ORG 000BH
LJMP TM0
ORG 0030H
START:
CLR EA
MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#0
SETB ET0
SETB TR0
SETB EA
SJMP $
TM0:
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC R0
MOV A,R0
CJNE A,#20,TM01
MOV R0,#0
CPL P1.0
TM01:
RETI
Ⅸ 单片机1秒钟定时汇编语言怎么编
可以有两种方法,设晶振为12M,则
第一种方法:用延时的方法实现
DELAY: MOV R3,#10;延时子程序,延时1秒
D1: MOV R4,#200
D2: MOV R5,#250
D3: DJNZ R5,D3
DJNZ R4,D2
DJNZ R3,D1
RET
END
第二种方法:用定时器的方法实现
————
MOV R1,#20
————
DLY: MOV TMOD,#00000001B;延时子程序,设定定时器的工作方式
D1: SETB TL0,#176(65536-50000); 15536/256 (余数)
SETB TH0,#60;设置初出溢出值50ms,定时2S (商)
SETB TR0 ;启动定时器
JNB TF0,$;是否溢出,没有溢出等待,溢出走一条指令
CLR TF0;清零溢出
DJNZ R1,D1;走20次,刚好1秒
RET
END
Ⅹ 单片机系统时钟是多少
学校里面使用的51单片机,如89C51系列的单片机一般为11.0592MHZ,12MHZ。时钟周期就是晶振的频率,机器周期是12*时钟周期,指令周期执行一条指令所需要的时间,一般由若干个机器周期组成。
你所说的系统时钟其实就是时钟周期,也就是晶振频率