解释一下51单片机定时器延时的查询法和中断法各是什么
一、用定时器中断,50ms中断的1 次,20次就是1秒
#include
#define uchar unsigned char
sbit LED =P1^1; //接一LED,1 秒钟亮或灭一次
uchar time;
void init_t0int()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init_t0int();
while(1);
}
void t0int() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
time++;
if(time==20)
{
time=0;
LED=~LED;
}
}
二、用循环延时可能程序更简单一点,但没实际意义 。单片机在这1 秒内只能循环而不能做其它事。
#include
sbit LED=P1^0;
void delay_ms(unsigned char ms)
{
unsigned char i;
while(ms--)
for(i=0;i<123;i++);
}
void main()
{
while(1)
{
delay_ms(1000);
LED=~P1^0;//P1.0接一LED,可看到LED每1S亮或灭一次
}
}
参考资料: LED
中断就是你烧水呢,然后突然你妈叫你过去,你是不是就过去了,但是水还烧着,等你回来睡就烧好了。就这个概念。明白没有。中断就是你妈叫你这个程序,主程序就是你在烧水。就这个关系
顾名思义,查询法就是在主循环中的某个位置查询定时器溢出标志的状态,从而判定延时时间是否已到(已过);中断法就是在定时器溢出时进入定时器中断,进行所需的必要处理。百度嫌我字数不够
就好像你在烧一壶开水,查询法就是你不停的去查看水开了没有,中断法就是等水开了,水壶就会鸣笛,这时你去关火倒水。其中水壶鸣笛就是触发中断的,而你去关火倒水算是一个中断服务。很明显,相比查询的方法中断可以极大提高程序的效率,你不必一直不停的查看水开了没有而专注于其他的事情,只需到水响之后去关火倒水即可。
查询法,编程,循环检测 TF==1,去执行指定程序。
中断法,硬件,自动检测 TF==1,去执行指定程序。
用中断法,效率高,且延时的时间精确。
51单片机12HZ的,怎么计算延时时间?
2 * 248 = 496 T DJNZ R1,F (2 + 496 + 1) * 60 = 29940T RET 2 + 29940 + 1 = 29943T 总共是: 29943T。如果是 12MHz,时间就是:29943us。另外,执行这个程序,还需要一条 CALL 指令,应该再加上 2T。--怎么样实现5S的延时?慢慢算呗。
51单片机求10微秒的延时函数 C语言(晶振11.0592MHz)
2、软件延时:(asm)晶振12MHZ,延时1秒 程序如下:DELAY:MOV 72H,#100 LOOP3:MOV 71H,#100 LOOP1:MOV 70H,#47 LOOP0:DJNZ 70H,LOOP0 NOP DJNZ 71H,LOOP1 MOV 70H,#46 LOOP2:DJNZ 70H,LOOP2 NOP DJNZ 72H,LOOP3 MOV 70H,#48 LOOP4:DJNZ 70H,LOOP4 定时器延时:晶振12MHZ,延时...
51单片机 定时器中断延时0.5秒 汇编
告诉你原理,因为我现在用C了。弄一个全局变量COUNT,然后控制好你的定时器中断时间,比如10MS,那么你每次中断COUNT++ 判断当COUNT=50,(50*10ms=500ms=0.5s)就是0.5s了。此时清count,同时处理你要做的事情。
51定时器最长定时多少分钟?
应该是51单片机吧,那我按照51的步骤来说。首先51单片机机器周期的计算方式=12\/晶振(Hz),单位秒(s),你的6MHz晶振那么就是12\/6M=2us,而计数器每一个机器周期计数一次,所以最短定时时长就是2us;但是最长定时可以说是无限长,若你指的是在不使用变量计时的条件下,根据工作方式1的16位计数最大...
51单片机的定时器怎样计算?
1. 51单片机的定时器工作原理是基于加一计数,直到达到65536(即2^16)时溢出。2. 定时时间由设置的初值决定,如果每个脉冲为1微秒,要实现50毫秒的延时,需要50,000个脉冲。3. 初值分为高8位和低8位,高8位代表的是256的倍数,因为1的十六进制表示为0001H,等于256。4. 低8位的初值最大为255...
51单片机的定时器怎么做延时 汇编
定时器中断里1S时,作个标志,主程序里判断这标志。给你一个流水灯的例子参考。ORG00H AJMPMAIN ORG0BH AJMPT0INT ORG30H MAIN:MOVTMOD,#01H MOVTH0,#3CH MOVTL0,#0B0H MOVR0,#20 SETBEA SETBET0 SETBTR0 MAIN0:MOVA,#01H MAIN1:MOVP1,A JNBF0,MAIN1 CLRF0 RLA INCA AJMPMAIN1 T...
谁帮我解释下51单片机定时器的问题,谢谢
您好:TH1=0XD8 TL1=0XF0 可以从 TH1=(65536-50000)\/256 TL1=(65536-50000)%256 求出来,只要把它算出来,换成16进制就ok了。至于TMOD=0X26,是设置定时器0为计数器,方式2;设置定时器1为定时器,方式2。至于程序里还有TH0=6;TL1=6;是设置计数器、定时器的初值,具体为什么这样设置要看看你...
我想用51单片机定时器一在方式一下延时一秒的函数。但是实际结果很快...
你的TMOD设置错了,实际延时程序用的是定时器1,但你初始化是TMOD=0x01,定时器1工作于模式0,定时器0才工作于模式1,模式0是13位定时器模式,最大值8192就溢出了。所以出现你的错误。可以修改如下:main(){ TMOD=0x10;...}
51单片机定时器怎么设置时间
编个小程序,把你的时间,输入到单片机。
单片机延时问题20问
4、_nop()函数在单片机编程中的作用是什么?_nop()函数等效于汇编中的NOP指令,其作用是在程序中插入空指令,用于实现短时间延时。传统51单片机中,一个NOP指令占用12个机器周期。5、如何实现500ms的延时?通过循环执行NOP指令或使用定时器,根据晶振频率计算所需指令数量。例如,在12MHz晶振下,计算并...