导航:首页 > 操作系统 > 单片机c语言时间

单片机c语言时间

发布时间:2025-07-04 20:08:28

Ⅰ 用C语言怎么在单片机AT89C51上编写一个延时10秒的程序

1、十秒对于单片机来说是很长很长的时间了,单片机十秒的时间什么事都不能做,只在跑这延时程序,那是什么概念,用中断的话,单片机正常运行其他程序,只是时间到了才过来处理延时以后的程序,效率不知道高了多少 。

2、例程:

//假设晶振12MHZ

#include"reg51.h"
unsignedintYSJS=0;
voidmain(void)
{
TMOD|=0X10;//定时器1工作于方式1,16位定时器
TH1=0XFF;//定时器1定时时间=500uS
TL1=0X06;
ET1=1;//使能定时器1中断
EA=1;//开总中断
while(1)
{
}
}
voidTIMER1(void)interrupt3//定时器1中断函数使用默认寄存器组
{
TH1=0XFF;//定时器1定时时间=500us
TL1=0X06;
YSJS++;
if(YSJS==20000)//500uS*20000=10000000us=10s
{
P1=P1^0X01;//P1.0十秒钟翻转一次
YSJS=0
}
}

Ⅱ 用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器。

/*

用proteus做的时钟

可以显示年月日时分秒

可调整时间

有图

*/

#include<reg52.h>

#define ucharunsignedchar

#defineuintunsignedint

#definetimh0xee

#definetiml0x00

sbitK1=P1^0;

sbitK2=P1^1;

sbitK3=P1^2;

sbitK4=P1^3;

sbitK5=P1^4;

sbitK6=P1^5;

sbitpoit=P0^7;

uintyear=2011,year0=0;

ucharmon=6,mon0=0,day=26,day0=0,hour=23,hour0=0,min=15,min0=0,sec=0,sec0=10,temp0=0;

ucharR;

ucharcod1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchartemp[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

voiddelay(uintz)

{

uintx,y;

for(x=0;x<z;x++)

for(y=0;y<100;y++);

}

voidexter_init()

{

IT0=1;

EX0=1;

}

voidtime_init()

{

TMOD=0x01;

TH0=timh;

TL0=timl;

ET0=1;

EA=1;

TR0=1;

}

voidre_time(uchara)

{

uchari,j;

for(j=0;j<a;j++)

{ for(i=0;i<14;i++)

{

P0=cod1[temp[i]];

if(i==3||i==5||i==9||i==11) poit=0;

P2=i;

delay(1);

P2=0x0f;

}

}

}

voidsyn()

{

if(sec!=sec0)

{sec0=sec;

temp[12]=sec0/10;

temp[13]=sec0%10;}

if(year!=year0)

{year0=year;

temp[0]=year0/1000;

temp[14]=year0%1000;

temp[1]=temp[14]/100;

temp[14]=temp[14]%100;

temp[2]=temp[14]/10;

temp[3]=temp[14]%10;}

if(mon!=mon0)

{mon0=mon;

temp[4]=mon0/10;

temp[5]=mon0%10;}

if(day!=day0)

{day0=day;

temp[6]=day0/10;

temp[7]=day0%10;}

if(hour!=hour0)

{hour0=hour;

temp[8]=hour0/10;

temp[9]=hour0%10;}

if(min!=min0)

{min0=min;

temp[10]=min0/10;

temp[11]=min0%10;}

}

main()

{

exter_init();

time_init();

while(1)

{

re_time(10);

}

}

voidtxter()interrupt0

{

ucharF;

F=1;

EA=0;

while(!K6);

delay(1);

do

{ re_time(1);

if(!K1)

{

min++;

if(min>=60)min=0;

while(!K1);

}

syn();

re_time(1);

if(!K2)

{

hour++;

if(hour>=24)hour=0;

while(!K2);

}

syn();

re_time(1);

if(!K3)

{

day++;

R=(year%4==0)&&(year%100!=0);

R=(R&&(day>=29)&&(mon==2))||(!R&&(day>=30)&&(mon==2))||((mon!=2)&&(day>=31));

if(R)day=1;

while(!K3);

}

syn();

re_time(1);

if(!K4)

{

mon++;

if(mon>12)mon=1;

while(!K4);

}

syn();

re_time(1);

if(!K5)

{

year++;

if(year>9999)year=2000;

while(!K5);

}

syn();

re_time(1);

if(!K6)

{

F=!F;

while(!K6);

}

re_time(1);

syn();

re_time(1);

}while(F);

sec=0;

EA=1;

}

/*****************************************************

************定时器0函数

*******************************************************/

voidtimer()interrupt1

{

temp0++;

if(temp0>=200)

{

temp0=0;

sec++;

if(sec>=60)

{

sec=0;

min++;

if(min>=60)

{

min=0;

hour++;

if(hour>=24)

{

hour=0;

day++;

R=(year%4==0)&&(year%100!=0);

R=(R&&(day>=29)&&(mon==2))||(!R&&(day>=30)&&(mon==2))||((mon!=2)&&(day>=31));

if(R)

{

day=0;

mon++;

if(mon>=13)

{

mon=1;

year++;

}

}

}

}

}

}

syn();

TH0=timh;

TL0=timl;

}

Ⅲ 单片机C语言中while的延时时间

用KEIL软件可以计算时间,将while的起始位置和终止位置加红点(双击即可);

然后左侧的SEC后面的就是执行的时间。

再给你几个延时程序做参考:

软件延时:(asm)

晶振12MHZ,延时1秒

程序如下:

DELAY:MOV72H,#100

LOOP3:MOV71H,#100

LOOP1:MOV70H,#47

LOOP0:DJNZ70H,LOOP0

NOP

DJNZ71H,LOOP1

MOV70H,#46

LOOP2:DJNZ70H,LOOP2

NOP

DJNZ72H,LOOP3

MOV70H,#48

LOOP4:DJNZ70H,LOOP4

定时器延时:

晶振12MHZ,延时1s,定时器0工作方式为方式1

DELAY1:MOVR7,#0AH;;晶振12MHZ,延时0.5秒

AJMPDELAY

DELAY2:MOVR7,#14H;;晶振12MHZ,延时1秒

DELAY:CLREX0

MOVTMOD,#01H;设置定时器的工作方式为方式1

MOVTL0,#0B0H;给定时器设置计数初始值

MOVTH0,#3CH

SETBTR0拍渣;开启定时器

HERE:JBCTF0,NEXT1

SJMPHERE

NEXT1:MOVTL0,#0B0H

MOVTH0,#3CH

DJNZR7,HERE

CLRTR0;定时器要软件清零

SETBEX0

RET

C语言延时程序:

10ms延时子程序(12MHZ)

voiddelay10ms(void)

{

unsignedchari,j,k;

for(i=5;i>0;i--)

谈歼for(j=4;j>0;j--)

for(k=248;k>0;k--);

}

1s延时子程序(12MHZ)

voiddelay1s(void)

{

unsignedcharh,i,j,k;

for(h=5;h>0;h--)

for(i=4;i>0;i--)

for(j=116;j>0;j--)

for(k=214;k>0;k--);

}

200ms延时子程序(12MHZ)

voiddelay200ms(void)

{

unsignedchari,j,k;

for(i=5;i>0;i--)

for(j=132;j>0;j--)

for(k=150;k>0;k--);

}

500ms延时子程序程序:(12MHZ)

voiddelay500ms(void)

{

unsignedchari,j,k;

for(i=15;i>0;i--)

for(j=202;j>0;j--)

for(k=81;k>0;k--);

}

不袭侍悄过实际得到的延时会存在差异,所以最好用实验的方法调整延时参数。

Ⅳ 51单片机 C语言 怎样测量高电平持续的时间

假设定时器不溢出,P1.0为高电平输入引脚:
while(P1^0==1);//等待眼前的高电平过去
while(P1^0==0);//等待下一个高电平来到
TR0=1;//启动定时器
while(P1^0==1);//等待高电平结束
TR0=0;//关闭定时器
HIGH=TL0+TH0*256;//读取时间

阅读全文

与单片机c语言时间相关的资料

热点内容
基于单片机的烟雾报警系统 浏览:935
pdf手机壳 浏览:835
bat编译驱动 浏览:832
加密号码的快递还是自己的名字吗 浏览:387
linux进入文件命令 浏览:637
压缩机离合器图片 浏览:289
js怎么创建服务器地址 浏览:327
中国电信山东服务器云空间 浏览:378
海信电视app哪里找 浏览:974
51单片机定时器延时程序 浏览:474
压缩机功率型号 浏览:561
PLC程序算法 浏览:976
物流程序员好不好 浏览:566
插值算法vb 浏览:928
androidwebview报错 浏览:273
中国什么时候才能有自己的服务器 浏览:764
ps3联机服务器怎么用 浏览:670
服务器nfs服务是什么 浏览:95
java虚拟机直接编译 浏览:609
javaaop实现 浏览:61