51單片機 (3)定時器和計數器
注:定時器與計數器原理與使用方法相似、此處計數器知識為基礎普及、后面詳講
2個定時器(寄存器)、定時器0、定時器1、(計數器0、計數器1)
TMOD:定時器/計數器模式控制寄存器 詳見百度百科TMOD
每經過一個機器周期、寄存器+1
TF:定時器溢出標志。溢出時自動置1。中斷時硬件清零否則必須軟件清零。
TR:定時器運行控制位。置1開始計時、清零停止計時。
C/T:該位為0時用作計時器、該位為1時用作計數器。
溢出時時間-開始計時時間=預設定時時間
一個機器周期共有12個振蕩脈沖周期
若設定時為0.02s,則:
12*(65535-X)/11059200=0.02s
定時器作“加1”次數:X=47104=0xB800次 時間為0.02s
使用定時器的方法
1、設置特殊功能寄存器TMOD,使之工作在需求的狀態。
2、設置計數寄存器的初值,精確設定好定時時間。
3、設置特殊功能寄存器TCON,通過打開TR來讓定時器進行工作。
4、判斷寄存器TCON的FT0位、檢測定時器溢出情況。
假設我們使用定時器0、定時為0.02s,兩個寄存器計時
TMOD=0x01; TMOD=0x01,指的是采用T0方式,將M1置0,M0置1,是方式一的定時器
高八位寄存器TH0=0xB8、低八位寄存器TL0=0x00
C程序實現1s鐘定時
#include
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit led=P1^0;
uint8 counter;
void main(){
TMOD=0x01;
TH0=0xb8;
TL0=0x00;
TR0=1;
led=1;
counter=0;
while(1){
if(TF0==1){ //如果達到溢出 0.02s后溢出
TF0=0; //軟件清零
TH0=0xB8; //重置計數基數
TL0=0x00;
counter++; //溢出一次計次數
}
if(counter==50){ //0.02s*50=1s
counter=0; //清零
led=~led; //取反使P1^0亮滅
}
}
}
上一篇:51單片機 (4)中斷系統
下一篇:51單片機 (2)流水燈實驗
- Keil MDK破解過程詳解[18年05月20日 11:11]
- STM32F407之模擬I2C(二)之24C128[18年05月20日 12:18]
- STM32F1使用I/0模擬I2C接口[18年05月20日 12:17]
- STM32模擬I2C程序[18年05月20日 12:13]
- STM8S 模擬I2C程序[18年05月20日 12:14]
- 普通IO口模擬實現I2C通信及應用解析[18年05月20日 12:12]