单片机小程序:用定时器T0方式1,延时一秒怎么写晶振为12

单片机小程序:用定时器T0方式1,延时一秒怎么写晶振为12,第1张

不管晶振频率是多少,一次就延时一秒是不可能的。

当晶振频率是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。程序哪里有问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9326407.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存