?? 6545.txt
字號:
定時計數綜合程序
如圖所示,在P1.7端接一個發光二極管,要求利用c/~t控制,使led亮1 s,滅1 s,周而復始!
硬件電路(略)
定時/計數器簡稱定時器,8051單片機有2個16位的定時/計數器:定時器0(T0)和定時器1(T1)。T0由2個特殊功能寄存器TH0和TL0構成,T1則由TH1和TL1構成。作計數器時,通過引腳T0(P3.4)和T1(P3.5)對外部脈沖信號計數,當輸入脈沖信號從1到0的負跳變時,計數器就自動加1。計數的最高頻率一般為振蕩頻率的1/24。
分析:要時使led亮1m,滅1m,也就是從P1.7端輸出一周期1 s的方波(半周期為500ms),定時器共有四種工作方式,以6Mhz的晶振為例,一個定時計數系統的最大定時為131ms,遠遠小于500ms,因此必須使用兩個定時器。
分析計算:500ms=5*100ms,定時/計數器0用作定時100ms,定時/計數器1用作計數,定/計時器0為中斷方式,定/計時器1為查詢方式。
定時器共有2個控制寄存器TMOD和TCON,由軟件寫入TMOD和TCON 兩個8位寄存器,設置各個定時器的操作方式和控制功能.
TMOD
GATE
C/T
M1
M0
GATE
C/T
M1
M0
GATE 中斷門控 gate=0 與int0無關 gate=1與int0有關
C/T 模式選擇 =0定時模式 =1計數模式
TCON
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
88
8F
8E
8D
8C
8B
8A
89
88
TRi=0 停Ti計數 TRi=1 啟Ti計數
TFi=0 無Ti中斷(硬件復位) TRF=1 有溢出中斷
1.定時器初值的計算
定時器為加1計數器,計數器溢出產生中斷。
設:t-定時時間,TC-機器周期,fosc-晶振頻率,
L-計數器長度(13、16、8),X-定時器初值
t=(2L-X)′TC= (2L-X)′12/ fosc
X= 2L - t ′12/ fosc
假設fosc=12MHz,最大定時時間(初值X=0)
方式0:t=(2L-X)′12/ fosc=213 ′12/(12 ′ 106) =8.192ms
方式1:t=216 ′12/(12 ′ 106) =65.536ms
方式2:t=28 ′12/(12 ′ 106) =0.256ms
方式3:t=28 ′12/(12 ′ 106) =0.256ms
2. 定時器初始化
(1)寫TMOD,確定工作方式。
(2)寫THi、TLi,裝入計數初值。
(3)置TRi=1,啟動Ti。
(4)置EA=1,開CPU中斷,置ETi=1,開Ti中斷。
#include<reg51.h>
sbit P1_0=P1^0;
sbit P1_7=P1^7;
void timer0(void) interrupt 1 using 1
{
P1_0= P1_0^0; // P1.0取反
TH0=0x3c;
TL0=0xB0;
}
void main()
{
TMOD=0x0D1;
TCON=0x80;
IE=0x82;
TH0=0x3c;
TL0=0xB0;
TH1=0x0FA;
TL1=0x0FA;
TR0=1;
TR1=1;
while(1)
{
if(TF1)
{
P1_7= P1_7^0;
TF1=0;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -