单片机如何确定延时时间(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的计算方法——查询方式
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com