0
点赞
收藏
分享

微信扫一扫

C51定时器

霍华德 2022-01-11 阅读 147

80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。

定时器

定时器/计数器设置流程

*1. 对TMOD赋值,以确定T0和T1的工作方式
2. 计算初值,并将其写入TH0、TL0或者TH1、TL1
3. 当采用中断方式时,则对IE赋值,开放中断在这里插入图片描述

  1. 使TR0或TR1置位,启动定时/计数器定时或计数*

工作方式寄存器TMOD

在这里插入图片描述
GATE:门控位。
GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;
GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多
了一条件。
C/T非:定时/计数模式选择位。
=0为定时模式;
=1为计数模式。
M1M0:工作方式设置位。
定时/计数器有四种工作方式,
由M1M0进行设置。
在这里插入图片描述

控制寄存器TCON

TCON的低4位用于控制外部中断,TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
在这里插入图片描述

0~15的十六进制表

例子:数码管的动态显示

void delay(uint z);
void main()
{
	TMOD=1;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	EA=1;//开总中断
	ET0=1;//开定时器0中断
	TR0=1;
	temp=0xfe;
	P1=temp;//段选初始化,输出0
	dula=1;
	P0=table[0];
	dula=0;
	wela=1;
	P0=0xc0;//全部打开为oxc0
	wela=0;
	while(1){
		/*流水灯*/
		delay(1000);
		temp=_crol_(temp,1);//移位()内有两个参数,第一个为你要移动的变量,第二个为移动几位
		P1=temp;
		/*数码管动态显示*/
		if(n==40)
		{
			n=0;
			x++;
			dula=1;
			P0=table[x];
			dula=0;
		}
	}
}
void delay(uint z)//延时z毫秒
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>=0;y--);
}

void timer0() interrupt 1
{
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	n++;
}

举报

相关推荐

0 条评论