單片機學習——定時器秒閃(自用)
定時器工作原理:
定時/計數(shù)器,是一種能夠?qū)?nèi)部時鐘信號或外部輸入信號進行計數(shù),當計數(shù)值達到設(shè)定要求時,向CPU提出中斷處理請求,從而實現(xiàn)定時或者計數(shù)功能的外設(shè)。定時/計數(shù)器的最基本工作原理是進行計數(shù)。
作為定時器時,計數(shù)信號的來源選擇周期性的內(nèi)部時鐘脈沖。
用作計數(shù)器時,計數(shù)信號的來源選擇非周期性的外部輸入信號。
51單片機有兩個定時/計數(shù)器T0和T1,為16位加法計數(shù)器,由低8位TLx和高8位THx兩個寄存器組成,最大計數(shù)值為65535個計數(shù)脈沖。
常用:
?TH0 = (65535 - 10000) / 256;(高八位)
TL0 = (65535 - 10000) % 256;(低八位)
軟件實現(xiàn):利用51單片機的定時/計數(shù)器T0的模式1實現(xiàn)間隔定時,每隔1秒LED1閃爍一下,也就是點亮0.5秒,熄滅0.5秒;每隔2秒LED2閃爍一下,即點亮1秒,熄滅1秒。
軟件部分:
#include "reg52.h"
sbit L1=P0^0;
sbit L8=P0^7;
void selectHC573()
{
? P2=(P2&0x1f)|0x80;
}
//==========================
void Inittimer()
{
?TMOD=0x01;//①只能寫一個字節(jié),01選擇16位定時/計數(shù)器
?TH0=(65535-50000)/256;
?TL0=(65535-50000)%256;//定時50毫秒
?ET0=1;//②打開定時中斷使能
?EA=1;//③總開關(guān)
?TR0=1;//④啟動定時器,定時器開始工作
}
unsigned char count=0;
void servicetimer() interrupt 1//定義中斷為定時器
{
?TH0=(65535-50000)/256;
?TL0=(65535-50000)%256;//無自動重裝功能,必須在中斷服務(wù)函數(shù)中重新定義
?count++;
?if(count==10)
?{
? L1=~L1;//循環(huán)十次,即5ms時,L1取反
? count=0;//重新循環(huán)
?}
}
//==========================
void main()
{
?selectHC573();
?Inittimer();//讓定時器開始工作
?while(1)
?{
?}
}