欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

单片机定时器怎么用,单片机定时器怎么使用

时间:2023-01-12 16:04:13

单片机定时器编程怎么使用篇1

#include<reg52.h>

#defineucharunsignedchar//类型重定义

#defineuintunsignedint

#defineulongunsignedlong//类型重定义

sbitled=P0^0;

sbitK_1=P2^0;//按键

ulongnum;

voiddelay(uintxms)//ms级延时子程序

{uintx,y;

for(x=xms;x>0;x--)

for(y=130;y>0;y--);}

//=================================================

voidmain()

{

led=1;//上电初始化,led灯不亮

delay(100);

TMOD=0x01;//设定定时器0为工作方式1

TH0=(65536-50000)/256;//装载初始值,12MHZ晶振50ms数为50000

TL0=(65536-50000)%256;//

(开启总中断允许);

(开启定时器中断允许);

while(1)

{

if(K_1==0)

{

while(K_1==0);

TR0=1;//启动定时器0*/

led=0;//按键1按下时灯亮

}

if(num==200)

{num=0;

(关闭定时器0);

led=1;//200*50ms后灯灭

}

}

voidinterrupt_timer0(void)interrupt1

{

(关闭T0中断);

TH0=(65536-50000)/256;//装载初始值,12MHZ晶振50ms数为50000

TL0=(65536-50000)%256;//

num++;

(开启T0中断);

}

PS:自己把小括号里面的东西加上吧。我忘记是什么了,

单片机篇2

楼主的程序并无大错,稍加修改即可正常运行。

下列程序已经实现了“(响4次/秒和响1次/秒),用定时器1控制发声时间(3秒)”。

//==========================

#include

sbitFM=P1^3;//FM是蜂鸣器.

unsignedchari,j,count;

intk;

//------------------------------------------

voidmain()

{

TMOD=0x11;//把定时器0和1都设置为16位.

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//50000代表50毫秒.

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;//50000代表50毫秒.

TR0=1;//启动定时器0

TR1=1;//启动定时器1

ET0=1;//打开中断T0

ET1=1;//打开中断T1

EA=1;//打开总中断.

i=0;

j=0;

k=1;

count=5;

while(1);

}

//------------------------------------------

voidtimer0()interrupt1//中断1函数,使用定时器0

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//50000代表50毫秒.

j++;

if(j>=(count/2))FM=0;//打开蜂鸣器.

elseFM=1;//关闭蜂鸣器.

//count由定时器1控制;

//count=5表示蜂鸣器每秒响4次,count=20表示每秒响1次.

if(j>=count)j=0;

}

//------------------------------------------

voidtimer1()interrupt3//中断3函数,使用定时器1

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;//50000代表50毫秒.

i++;

if(i==60){//60表示60x50毫秒=3秒.

i=0;

k--;

if(k==0)k=2;

switch(k){

case1:count=5;break;//把count=5赋给中断函数1中,让蜂鸣器每秒响4次.

case2:count=20;//把count=20赋给中断函数1中,让蜂鸣器每秒响1次.

}

}

}

//------------------------------------------

看网友的热心回答,水平参差不齐,嘲讽帅哥学童的回答确实别开生面,如此多的错误观点也敢亮出来,呵呵,叫人驳不胜驳!

请教一下:

----

2.千万不要

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

这样定义,因为做(65536-50000)/256;这个运算,很占用机械周期,要知道,减法用1个机器周期,。。工作周期至少多了20个,。

----

说说看,究竟是多少个?

你要是调试过程序,就会知道,“至少多了20个”究竟是多少个。

你要是调试过程序,就会知道,这个运算是否是由单片机进行的。

看来,这位学童还没有接触过单片机。

51单片机的定时器是怎么设置的篇3

单片机定时器的设置步骤为:

1、设置定时器的工作模式,共4种工作方式,两种模式(计数器/定时器)。比如:

MOVTMOD,#01;设置定时器0位定时器模式,工作方式1

2、根据定时时间赋初值。比如定时10毫秒,那么如果12M晶振的话是10000个机器周期。定时器是溢出申请中断,所以用溢出值减去定时周期为初值。

MOVTH0,#HIGH(65536-10000)

MOVTL0,#LOW(65536-10000)

3、开启中断、定时器。

SETBET0

SETBEA

SETBTR0

单片机定时器计数器如何使用篇4

使用12MHz晶振,其机器周期为1us

欲产生5000us周期方波,只需在p1.0以2500us时间交替输出高低电平

1.T0为方式0,则M1M0=00H。使用定时功能,C/T=0,GATE=0。T1不用,其有关位设为0。因此,TMOD=00H

2.方式0为13长度计数(TL0高3位不使用),设计数初值为X,则(8192-X)*1us=2500us,得X=5692D。X=1011000111100B。因为TL0高3位不用,所以10110001-00011100B得TH0=B1H,TL0=1CH

3.由控制寄存器TCON的TR0位来控制定时的启动和停止,TR0=1启动,TR0=0停止

C语言程序如下(编译器KeilC)

#include<REG51.H>

sbitFB=p1^0;

voidinitial(void)

{

TMOD=0x00;

TH0=0xb1;

TL0=0x1c;

IE=0x00;

TR0=1;

}

voidmain(void)

{

initial();

for(;;)

{

while(!TF0);

TF0=0;

FB=!FB;

}

}

汇编程序如下

ORG0000H

AJMPSTART

ORG30H

START:MOVP1.0,#0FFH

MOVTMOD,#00H

MOVTH0,#0B1H

MOVTL0,#1CH

SETBTR0

LOOP:JBCTF0,NEXT

LJMPLOOP

NEXT:CPLP1.0

MOVTH0,#0B1H

MOVTL0,#1CH

LJMPLOOP

END

8.怎么利用单片机定时器实现定时的编程过程篇5

定时器其实就是单片机的一个内部自身时钟的计数器,每一个周期计数器加1,所以使用定时器功能时候先要给定时器付初值,就是先写TH0TL0的值(如下),写完初值后就等着定时器功能的那个计数器记满了数后也就是到了65536后就溢出了,所以一次定时的过程就是65536-初值之间的数所代表的时钟周期,计数满了溢出要产生中断就要写一个中断服务子程序,子程序如下voidtimer0()interrruptX中断服务子程序中还要给定时器计数器的THTL付初值进行下一次的计数,明白了吧。。楼上的那个没写interrupt选择定时器工作方式。哎呀,妈呀累死我了

voidmain()

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//定时器0初值,定时50ms定时多少MS就多少*1000

EA=1;//开启总中断

ET0=1;//定时器0中断允许

TR0=1;//开启定时器0

while(1)

{

}

}

voidtimer0()interrrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

}

单片机定时器程序中怎么用篇6

#include<reg52.h>

unsignedchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};

unsignedcharnum,cont;

voidInit_Timer0(void)

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

voidmain(void)

{

unsignedchari;

P1=tab[i];

Init_Timer0();

num=0;

cont=0;

while(1);

}

voidTimer0_isr(void)interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

cont++;

if(cont>20)

{

cont=0;

P1=tab[num];

num++;

num%=10;

}

}

51单片机的3个定时器怎样使用篇7

51单片机只有T0,T1。52才有T2的。

定时器设置方法:

做定时用一般采用16位模式,也就是TMOD=0x11(10或01单独一个定时器的话),初值的计算是这样的:

1.假设时间是X毫秒,晶振为YMhz,那么:

THn=(65536-1000*X*Y/12)/256

TLn=(65536-1000*X*Y/12)%256

2.之后就是TRn=1(开启定时器)

ETn=1(开启定时器中断)

EA=1

如何用单片机定时篇8

用单片机本身的定时来做电子表,现在有很多时钟芯片,与单片机接口也很简单,它有专门的外部晶振,而且在时间精确是,是绝对准确的。只要能够按照时序与它产生通讯,就可以达到时间的精确。

毕竟,单片机本身不是专让用来做时钟的,而专门的时钟芯片才会有此条件。

定时器其实就是单片机的一个内部自身时钟的计数器,每一个周期计数器加1,所以使用定时器功能时候先要给定时器付初值,就是先写TH0TL0的值,写完初值后就等着定时器功能的那个计数器记满了数后也就是到了65536后就溢出了。

所以一次定时的过程就是65536-初值之间的数所代表的时钟周期,计数满了溢出要产生中断就要写一个中断服务子程序;

参考如下:

voidmain()

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//定时器0初值,定时50ms定时多少MS就多少*1000

EA=1;//开启总中断

ET0=1;//定时器0中断允许

TR0=1;//开启定时器0

while(1)

{

}

}

voidtimer0()interrrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。