日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]通過前面的定時器理論了解到,使用一個定時器,要經(jīng)過下面四步:1、設置定時器/計數(shù)器的工作模式TMOD(常用的是模式1:TMOD=0x01);2、裝入預置數(shù)到THx和TLx中(THx=TLx=MAX(8192/65536/256)-計數(shù)次數(shù));3、如果工作在中斷

通過前面的定時器理論了解到,使用一個定時器,要經(jīng)過下面四步:


1、設置定時器/計數(shù)器的工作模式TMOD(常用的是模式1:TMOD=0x01);

2、裝入預置數(shù)到THx和TLx中(THx=TLx=MAX(8192/65536/256)-計數(shù)次數(shù));

3、如果工作在中斷方式,則需要開定時器/計數(shù)器的中斷TCON中的標志位:TF0/TF1=0/1;

4、啟動定時器/計數(shù)器:TR0/TR1=1;



//1、設置定時器/計數(shù)器的工作模式TMOD(常用的是模式1:TMOD=0x01);

//2、裝入預置數(shù)到THx和TLx中(THx=TLx=MAX(8192/65536/256)-計數(shù)次數(shù));

//3、如果工作在中斷方式,則需要開定時器/計數(shù)器的中斷TCON中的標志位:TF0/TF1=0/1;

//4、啟動定時器/計數(shù)器:TR0/TR1=1;

// 內(nèi)容:通過定時讓LED燈閃爍

#include


sbit LED=P0^2; //定義LED端口


//定時器初始化子程序

void Init_Timer0(void)

{

TMOD = 0x01; //使用模式1,16位定時器

TH0=0x00; //給定初值,這里使用定時器最大值從0開始計數(shù)一直到65535溢出

TL0=0x00;

EA=1; //總中斷打開 89C52必需要有

ET0=1; //定時器中斷打開

TR0=1; //使用定時器0

}


main()//主程序

{

Init_Timer0();

while(1);

}


//定時器中斷子程序

//interrupt和using都是C51的關鍵字。C51中斷過程通過使用interrupt關鍵字和中斷號(0到31)來實現(xiàn)。

//using關鍵字用來指定中斷服務程序使用的寄存器組。

//用法是:using后跟一個0到3的數(shù),對應著4組工作寄存器。

void Timer0_isr(void) interrupt 1 using 1

{

TH0=0x00; //重新賦值

TL0=0x00;

LED=~LED; //指示燈反相,可以看到閃爍

}


65536 * 1us = 65.536ms,也就是說上面的程序每經(jīng)過65.536ms改變P0^2的狀態(tài)。


那么如何實現(xiàn)1s的精確定時呢,在工作方式1下,我們將計數(shù)初什設置為0x3CB0(15536),當計數(shù)到上限65536時,經(jīng)過了50000個脈沖,即 50000 * 1us = 50ms,如果經(jīng)過這樣的計時20次,就正好達到了1s,為驗證是否正確,可將上面的代碼修改如下:



//1、設置定時器/計數(shù)器的工作模式TMOD(常用的是模式1:TMOD=0x01);

//2、裝入預置數(shù)到THx和TLx中(THx=TLx=MAX(8192/65536/256)-計數(shù)次數(shù));

//3、如果工作在中斷方式,則需要開定時器/計數(shù)器的中斷TCON中的標志位:TF0/TF1=0/1;

//4、啟動定時器/計數(shù)器:TR0/TR1=1;

// 內(nèi)容:通過定時讓LED燈閃爍

#include


sbit LED=P0^2; //定義LED端口

unsigned int tm=0;


//定時器初始化子程序

void Init_Timer0(void)

{

TMOD = 0x01; //使用模式1,16位定時器

TH0=0x3C; //給定初值,這里使用定時器最大值從0開始計數(shù)一直到65535溢出

TL0=0xB0;

EA=1; //總中斷打開 89C52必需要有

ET0=1; //定時器中斷打開

TR0=1; //使用定時器0

}


main()//主程序

{

Init_Timer0();

while(1);

}


//定時器中斷子程序

//interrupt和using都是C51的關鍵字。C51中斷過程通過使用interrupt關鍵字和中斷號(0到31)來實現(xiàn)。

//using關鍵字用來指定中斷服務程序使用的寄存器組。

//用法是:using后跟一個0到3的數(shù),對應著4組工作寄存器。

void Timer0_isr(void) interrupt 1 using 1

{

TH0=0x3C; //重新賦值 3CB0 = 15536

TL0=0xB0;

tm = tm + 1;

if (tm == 20) // 20次達到1s

{

tm = 0;

LED=~LED; //指示燈反相,可以看到閃爍

}

}

編譯下載到單片機后,測試和預期一致,LED亮滅的狀態(tài)分別持續(xù)1s。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉