
不管晶振频率是多少,一次就延时一秒是不可能的。
当晶振频率是12
M时,最大的延时是65536毫秒。通常可以设置定时50毫秒,并设置为中断方式,这样,每次当定时到就中断一次,再对中断计数,中断计数20次就是一秒了。
在中断里面写上累加100次的变量,就等于是1s了):
#include
<reg51h>
void
InitTimer1(void)
{
TMOD
=
0x10;
TH1
=
0x0DC;
TL1
=
0x00;
EA
=
1;
ET1
=
1;
TR1
=
1;
}
void
main(void)
{
InitTimer1();
}
void
Timer1Interrupt(void)
interrupt
3
{
TH1
=
0x0DC;
TL1
=
0x00;
//add
your
code
here!
}
51单片机是对所有兼容Intel
8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash
rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
定时器人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多。人们甚至将定时器用在了军事方面,制成了定时炸d,定时雷管。现在的不少家用电器都安装了定时器来控制开关或工作时间。
用定时器定时100ms,可以从单片机一个引脚输出一个方波,就能看到效果了。
而你对ACC0 取反,这是在内部的,也看不到定时的效果呀。
你程序是采用查询方法判断定时到,即判断TF0的状态,就不能用开中断,
SETB EA
SETB ET0
这两行要删掉的。
改成如下这样
START:MOV P20,1
MOV TMOD,#01H
SETB TR0
MAIN: MOV R2,#2
LOOP: MOV TH0,#3CH
MOV TL0,#0B0H
JNB TF0,$
CLR TF0
DJNZ R2 ,LOOP
CPL P20
SJMP MAIN
END
下图是仿真时,从P20输出的方波信号,周期是200ms
#include
<reg52h>
#define
uint
unsigned
int
#define
uchar
unsigned
char
uchar
flag;
void
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void
timer0()
interrupt
1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
flag++;
if(flag==20)//当定时到1秒时执行花括号里面的语句
{}
}
这是利用T0计时的,如果是T1只要把TMOD=0x01改成TMOD=0x11;把interrupt
1
改成interrupt
3
即可
#include<reg51h>
main()
{
TMOD=0x10;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
TR1=1;
ET1=1;
EA=1;
while(1);
}
void t1isr() interrupt 3
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
}
定时器方式:
ORG 0000H
MAIN:
MOV SP,#5FH
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R2,#8
SETB TR0
LOOP:
JNB TF0,$
CLR TF0
DJNZ R2,LOOP
CLR TR0
SJMP $
END
延时方式:
ORG 0000H
MAIN:
MOV SP,#5FH
LCALL DELAY
SJMP $
DELAY:
MOV R2,#40
DELAY1:
MOV R3,#20
DELAY2:
MOV R4,#250
DJNZ R4,$
DJNZ R3,DELAY2
DJNZ R2,DELAY1
RET
END
以上就是关于单片机小程序:用定时器T0方式1,延时一秒怎么写晶振为12全部的内容,包括:单片机小程序:用定时器T0方式1,延时一秒怎么写晶振为12、C51单片机定时器1以方式1定时1秒如何设置、单片机实验用定时器T0,工作方式1,定时100ms。程序哪里有问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)