特殊功能寄存器如下

使用TCON和TMOD
TF:溢出标志 为1时表示溢出 需要手工置0
TR:开始计时 为1开始 为0停止
M1,M0 :工作模式 01为模式1 //16位 65536
GATE门暂不使用 置0
C/T:定时/计数

TH0,TL0:定时器0初始值
方法:
1、设定TMOD
2、设定初始值TH TL
3、设定TCON 开始计时
实例:共阳七段数码管0-F循环显示延时1s
七段共阳数码管真值表
const uint8 ledcode[]={
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90, // 9
0x88, // A
0x83, // B
0xC6, // C
0xA1, // D
0x86, // E
0x8E // F
};
延时1s计算
溢出20次 每次50ms
TH0 TL0计算:
65536-((0.05x11059200)/12)=0x4c00 TH0=0x4c TL0=0x00
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit en=P1^7;
const uint8 ledcode[]={
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90, // 9
0x88, // A
0x83, // B
0xC6, // C
0xA1, // D
0x86, // E
0x8E // F
};
uint8 i,j;
main()
{
i=0;
j=0;
TMOD=0x01;
TH0=0x4c;
TL0=0x00;
TR0=1;
en=0;
while(1)
{
if (TF0==1) //如果溢出
{
TH0=0x4c;
TL0=0x00;
TF0=0; //重新设定初始值 恢复状态
i++;
}
if(i==20)
{
i=0;
P2=ledcode[j]&0x7f;
j++;
}
if(j==16)
{
j=0;
}
}
}
仿真:

