希望我的程序能对大家的实验起到帮助,我来为大家科普一下关于单片机如何确定延时时间?以下内容希望对你有帮助!

单片机如何确定延时时间(15单片机延时1s的计算方法)

单片机如何确定延时时间

用c语言写1s延时方法——定时器中断方式

希望我的程序能对大家的实验起到帮助。

#define uchar unsigned char

uchar a=0,b=0,i=0;

//**********定时中断T1***中断服务函数

void Timer1_int(void) interrupt 3 using 1

{

i ;

if(i==20)

{

i=0;

if(a==1)

b ;

}

}

TMOD=0X00;//设置为定时器1(T1)工作于方式0

TH1=0X3C;//高4位

TL1=0XB0;//低4位

TF1=0;//T1溢出标志位

ET1=1;TI中断开关

EA=1;//中断总开关

while(1)

if(a==1)

{

TR1=1;//启动定时器

switch(b)

{

case 0:P2=0x7F;break; //0111 1111 P2.7

case 1:P2=0XFF;P1=0x7F;break; //0111 1111 P1.7

case 2:P1=0xBF;break; //1011 1111 P1.6

case 3:P1=0xFF;P4=0x7F;break; //0111 1111 p4.7

case 4:P4=0xBF; break; //1011 1111 p4.6

default:P4=0xFF;b=0;

}

}

TMOD=0X00首先设置为定时器1(T1)工作于方式0

定时时间:t=(2^(16)-定时器的初始值)*系统时钟周期*12^(1-T1x12)

即当T1x12=0时系统为12分频计数脉冲周期系统时钟周期的12倍(12MHz时1个计数脉冲周期时间为t=1us)

当设置定时时间为50ms时:定时器的初始值T=2^(16)-50*(10^3)=15536。15536转换为16进制后为3CB0(h).设置定时器的初始值的方法TH1为高4位(TH1=0X3C),TL1为低4位(TL1=0XB0)。

每当定时器的值从15536(定时器的初始值)加到65536( 2^(16) )时会溢出,这时TF1=1,然后定时器从15536重新开始加。

中断服务函数:中断服务函数中for循环让定时器循环20次,每次循环时间为50ms,即定时时间为t=50*20=1000ms=1s.中断服务函数执行延时1s后b 配合switch语句完成循环点亮LED灯

if语句:当TR1=1时才启动定时器,开始定时。当开关按下后(a=1),TR1=1启动定时器,同时执行switch语句,开始时b=0,先执行P2=0x7F;定时1s后,b=1,同时执行switch语句中的:P2=0XFF;P1=0x7F;定时1s后,b=2,之后依次循环。如果TR1=1在if语句前即TR1=1放在if语句外面时,因为TR1=1时是开启定时器,当a!=1时,定时器也在计时,所以这里第一个灯亮和第二个灯亮之间不是1s。

switch语句也可以换成if语句嵌套使用,这里我建议用switch语句,switch语句在这里相比于if语句的嵌套使用更简单明了。

15单片机外部中断流水灯 15单片机延时1s的计算方法——查询方式

,