单片机定时器是怎样工作的?它具体有哪些用途?求例子

 我来答
wannenggong9559f
生活家

2012-12-31 · 关注于个人成长
知道大有可为答主
回答量:3691
采纳率:82%
帮助的人:662万
展开全部
通俗的说:单片机的定时器工作原理如同一个盛水的盆子,根据不同的设定(工作模式0,1,2,3)盆子的大小不同,而接水的方式却是相同的(时钟周期),为一滴一滴的接水,比如,在某种工作模式下,接满一盆水要1000滴,每滴水用时1秒钟,此时接满一盆水要用1000秒时间,于是,水滴数(计数值)与时间就有了相对的关系,但一定要记得,盆里的水永远是满的,如果我们要计时50秒,那么我们就要先在盆里倒出50滴水,而后开始接水,当盆里的水满了并且溢出时,单片机会提示,已经计时50秒了,请关闭水源或做其他处理。具体的找本教科书一看便知。
追问
谢谢,很清楚。 那么它就是用来计量一个确定的时间喽?
追答
对,是通过计数来计(延)时;这东东在单片机应用中很重要,找些资料弄懂它很必要。
tangkun08
2012-12-29 · TA获得超过303个赞
知道小有建树答主
回答量:82
采纳率:0%
帮助的人:91.2万
展开全部
http://wenku.baidu.com/view/5eec736a011ca300a6c390e5.html
还有很多类似的文章讲的很详细,仔细看一下不难理解
给你一个以前练习时的例子
/* ************************************************
描述:led灯以0.5s流水闪烁,每变化一次,数码管加一,满10000清零
使用T0的定时器方式3
************************************************ */

#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

//数码管数字编码****************************************
int code table []={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};

//延时函数*************************************************
void delay (uint x)
{
uint i,j;
for (i=x;i>0;i--)
for (j=110;j>0;j--);
}

//全局变量定义************************************************
uint a,b,num;
uchar c;

//数码管显示函数**********************************************
void display (uint x)
{
P0=0XFF;
P2=0Xfe;
P0=table [x/1000];
delay (5);

P0=0XFF;
P2=0Xfd;
P0=table [x/100%10];
delay (5);

P0=0XFF;
P2=0Xfb;
P0=table [x/10%10];
delay (5);

P0=0XFF;
P2=0Xf7;
P0=table [x%10];
delay (5);
}

//中断初始化函数*********************************************
void csh ()
{
TMOD=0X03; //方式3
TL0=6;
TH0=6;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}

//主函数***************************************
void main ()
{
csh ();
c=0xfe;
P1=c;
P0=table [num];
while (1){
display (num); //必须放在这执行,若在中断函数中执
} //行,耗时太长,会引起定时错乱.
}

//中断函数t0***************************************
void t0 () interrupt 1
{
TH0=6;
a++;
if (a>=2000){
c=_crol_(c,1); //循环左移
a=0;
P1=c;
}
}

//中断函数t1**************************************
void t1 () interrupt 3
{
TL0=6;
b++;
if (b>=2000){
b=0;
num++;
if (num>=10000)num=0;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式