80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。
定时器
定时器/计数器设置流程
*1. 对TMOD赋值,以确定T0和T1的工作方式
2. 计算初值,并将其写入TH0、TL0或者TH1、TL1
3. 当采用中断方式时,则对IE赋值,开放中断
- 使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++;
}