特殊功能寄存器如下
使用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; } } }
仿真: