單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 6定時(shí)器計(jì)數(shù)器_第1頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 6定時(shí)器計(jì)數(shù)器_第2頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 6定時(shí)器計(jì)數(shù)器_第3頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 6定時(shí)器計(jì)數(shù)器_第4頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 6定時(shí)器計(jì)數(shù)器_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

定時(shí)器/計(jì)數(shù)器06介紹單片機(jī)片內(nèi)3個(gè)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)與基本原理、4種工作方式以及應(yīng)用。06定時(shí)器/計(jì)數(shù)器01T0與T1工作原理0203計(jì)數(shù)器的仿真實(shí)例定時(shí)器的仿真實(shí)例04T2結(jié)構(gòu)與工作方式6.1T0與T1的結(jié)構(gòu)與工作方式一、T0與T1的內(nèi)部結(jié)構(gòu)T0定時(shí)/計(jì)數(shù)器4種工作方式T1定時(shí)/計(jì)數(shù)器3種工作方式方式0:13位定時(shí)/計(jì)數(shù)器方式1:16位定時(shí)/計(jì)數(shù)器方式2:8位自動(dòng)重載初值定時(shí)/計(jì)數(shù)器方式3:T0變成2個(gè)8位定時(shí)器T0/T1工作模式T0組成:SFR:TH0TL0T1組成:SFR:TH1TL1定時(shí)器計(jì)數(shù)器6.1T0與T1的結(jié)構(gòu)與工作方式二、定時(shí)器/計(jì)數(shù)器的寄存器工作方式控制寄存器TMOD1位序號(hào)D7D6D5D4D3D2D1D0符號(hào)GATE

M1

M0GATE

M1

M0工作方式控制寄存器TMOD(字節(jié)地址89H,不可位尋址)設(shè)置T0設(shè)置T16.1T0與T1的結(jié)構(gòu)與工作方式二、定時(shí)器/計(jì)數(shù)器的寄存器工作方式控制寄存器TMOD1位序號(hào)D7D6D5D4D3D2D1D0符號(hào)GATE

M1

M0GATE

M1

M0工作方式控制寄存器TMOD(字節(jié)地址89H,不可位尋址)設(shè)置T0設(shè)置T16.1T0與T1的結(jié)構(gòu)與工作方式二、定時(shí)器/計(jì)數(shù)器的寄存器定時(shí)器/計(jì)數(shù)器控制寄存器TCON2定時(shí)器/計(jì)數(shù)器控制寄存器TCON(字節(jié)地址88H,可位尋址)6.1T0與T1的結(jié)構(gòu)與工作方式三、定時(shí)器/計(jì)數(shù)器的工作方式方式0方式1方式2方式36.1T0與T1的結(jié)構(gòu)與工作方式三、定時(shí)器/計(jì)數(shù)器的工作方式方式0(13位定時(shí)器/計(jì)數(shù)器方式)1兼容48系列單片機(jī)初值計(jì)算麻煩,不常用6.1T0與T1的結(jié)構(gòu)與工作方式三、定時(shí)器/計(jì)數(shù)器的工作方式方式1(16位定時(shí)器/計(jì)數(shù)器方式)2方式1:M1M0=01工作模式:

軟啟動(dòng)GATE=0;TR0=1;硬啟動(dòng)GATE=1;TR1=1;INT0=1;計(jì)數(shù)初值:計(jì)數(shù)個(gè)數(shù)=最大計(jì)數(shù)個(gè)數(shù)-初值定時(shí)時(shí)間=(最大計(jì)數(shù)個(gè)數(shù)-初值)*機(jī)器周期啟動(dòng)方式:溢出處理:TH0TL0硬件自動(dòng)清0TF0硬件自動(dòng)置1查詢TF0TF0中斷65536(88H)(89H)6.1T0與T1的結(jié)構(gòu)與工作方式三、定時(shí)器/計(jì)數(shù)器的工作方式計(jì)數(shù)初值:計(jì)數(shù)器初值:計(jì)數(shù)個(gè)數(shù)=最大計(jì)數(shù)個(gè)數(shù)-初值定時(shí)器初值:定時(shí)時(shí)間=(最大計(jì)數(shù)個(gè)數(shù)-初值)*機(jī)器周期例:每計(jì)100個(gè)脈沖溢出,計(jì)算初值。TH0=0xFF;TL0=0x9C;方法1方法2TH0=(65536-100)/256;TL0=(65536-100)%256;例:50ms定時(shí),晶振12MHz。TH0=0x3C;TL0=0xB0;方法1方法2TH0=(65536-50000)/256;TL0=(65536-50000)%256;【解】TC=65536-100=65436=0xFF9C【解】50ms=(65536-TC)*1usTC=15536=3CB0H

6.1T0與T1的結(jié)構(gòu)與工作方式三、定時(shí)器/計(jì)數(shù)器的工作方式方式1(16位定時(shí)器/計(jì)數(shù)器方式)2void函數(shù)名()interrupt1

T0:void函數(shù)名()interrupt3

T1:{TH0=初值;TL0=初值;……}{TH1=初值;TL1=初值;……}6.1T0與T1的結(jié)構(gòu)與工作方式三、定時(shí)器/計(jì)數(shù)器的工作方式方式2(8位自動(dòng)重載初值定時(shí)器/計(jì)數(shù)器方式)3方式2:M1M0=10溢出處理:TL0自動(dòng)清0TF0硬件自動(dòng)置1查詢TF0TF0中斷TH0自動(dòng)裝載TL0計(jì)數(shù)初值:計(jì)數(shù)器初值:計(jì)數(shù)個(gè)數(shù)=最大計(jì)數(shù)個(gè)數(shù)-初值定時(shí)器初值:定時(shí)時(shí)間=(最大計(jì)數(shù)個(gè)數(shù)-初值)*機(jī)器周期最大計(jì)數(shù)個(gè)數(shù):2566.1T0與T1的結(jié)構(gòu)與工作方式三、定時(shí)器/計(jì)數(shù)器的工作方式方式3(2個(gè)8位定時(shí)器/計(jì)數(shù)器方式,T0有)4方式3:M1M0=11TH0+TR1+TF1定時(shí)器:8位,不能自動(dòng)重載初值TL0+TR0+TF0定時(shí)器/計(jì)數(shù)器:8位,不能自動(dòng)重載初值6.1T0與T1的結(jié)構(gòu)與工作方式三、定時(shí)器/計(jì)數(shù)器的工作方式方式3(2個(gè)8位定時(shí)器/計(jì)數(shù)器方式,T0有)4TH0+TR1+TF1定時(shí)器:8位,不能自動(dòng)重載初值TL0+TR0+TF0定時(shí)器/計(jì)數(shù)器:8位,不能自動(dòng)重載初值T0方式3時(shí)T1的工作方式示意圖T1作波特率發(fā)生器使用!常用方式2T1方式0T1方式1T1方式26.1T0與T1的結(jié)構(gòu)與工作方式16位“加1”計(jì)數(shù)器,最大計(jì)數(shù)個(gè)數(shù)65536個(gè)。當(dāng)計(jì)滿時(shí)再來(lái)一個(gè)計(jì)數(shù)脈沖,計(jì)數(shù)器就會(huì)產(chǎn)生“溢出”即TF=1,計(jì)數(shù)器則清零。需要重復(fù)定時(shí)或計(jì)數(shù),需要在每一次計(jì)數(shù)前不斷的由軟件重新預(yù)裝初值,稱之為“軟件重裝初值”。方式2:8位計(jì)數(shù)器的模式。TH0為8位定時(shí)器,溢出TF1=1,TH0清零,軟件重裝初值。TL0為8位定時(shí)/計(jì)數(shù)器,溢出TF0=1,TL0清零,軟件重裝初值。T0具有工作方式3,T1沒有工作方式3。方式1:16位的計(jì)數(shù)器模式。8位“加1”計(jì)數(shù)器,最大計(jì)數(shù)個(gè)數(shù)256個(gè),計(jì)滿TF=1,計(jì)數(shù)器則清零。需要重復(fù)定時(shí)或計(jì)數(shù),具備“硬件自動(dòng)重裝”初值功能。TL做計(jì)數(shù)器,TH做初值寄存器,TL,TH分別預(yù)置相同的初值。方式3:拆分、組合模式。四、定時(shí)器/計(jì)數(shù)器的應(yīng)用步驟1、定時(shí)/計(jì)數(shù)器初始化(1)設(shè)置TMOD寄存器:4種工作方式,定時(shí)/計(jì)數(shù),門控位(2)計(jì)算定時(shí)/計(jì)數(shù)的初值,裝入TH0TL0或TH1TL1(3)設(shè)置TCON寄存器:?jiǎn)?dòng)或停止定時(shí)/計(jì)數(shù)(需要時(shí)加人)

T0啟動(dòng):TR0=1;

停止:TR0=0;

T1啟動(dòng):TR1=1;

停止:TR1=0;2、T0/T1中斷初始化

T0中斷:EA=1;ET0=1;PT0=1/0;

T1中斷:EA=1;ET1=1;PT1=1/0;3、編寫中斷服務(wù)函數(shù)T0中斷函數(shù):void函數(shù)名(void)interrupt

1

usingm{......}

T1中斷函數(shù):void函數(shù)名(void)interrupt

3

usingm{......}

使用T0/T1中斷的設(shè)計(jì)步驟四、定時(shí)器/計(jì)數(shù)器的應(yīng)用步驟使用T0/T1查詢的設(shè)計(jì)步驟1、定時(shí)/計(jì)數(shù)器初始化(1)設(shè)置TMOD寄存器:4種工作方式,定時(shí)/計(jì)數(shù),門控位(2)計(jì)算定時(shí)/計(jì)數(shù)的初值,裝入TH0TL0或TH1TL1(3)設(shè)置TCON寄存器:?jiǎn)?dòng)或停止定時(shí)/計(jì)數(shù)(需要時(shí)加人)

T0啟動(dòng):TR0=1;

停止:TR0=0;

T1啟動(dòng):TR1=1;

停止:TR1=0;2、查詢標(biāo)志位:TF0或TF1T0標(biāo)志位查詢:while(TF0==0);或

while(!TF0);T1標(biāo)志位查詢:while(TF0==0);或while(!TF1);3、清除標(biāo)志位:TF0=0;

TF1=0;06定時(shí)器/計(jì)數(shù)器01T0與T1工作原理0203計(jì)數(shù)器的仿真實(shí)例定時(shí)器的仿真實(shí)例04T2結(jié)構(gòu)與工作方式6.2定時(shí)器的仿真實(shí)例一、方波信號(hào)發(fā)生器仿真實(shí)例任務(wù)要求:產(chǎn)生頻率為50Hz的的方波信號(hào),系統(tǒng)晶振為12MHz。1硬件電路設(shè)計(jì)2軟件設(shè)計(jì)T0方式1產(chǎn)生10msP2.0取反①TMOD初始化②計(jì)算初值TMOD=00000001B=0x01TH0=(65536-10000)/256;TL0=(65536-10000)%256;③查詢TF0或中斷6.2定時(shí)器的仿真實(shí)例一、方波信號(hào)發(fā)生器仿真實(shí)例任務(wù)要求:產(chǎn)生頻率為50Hz的的方波信號(hào),系統(tǒng)晶振為12MHz。2軟件設(shè)計(jì)#include<reg52.h> sbitP20=P2^0; voidT0_init();/*************主函數(shù)************/voidmain(void) {

T0_init();while(1) {while(TF0==0);

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

P20=!P20; TF0=0;

}}voidT0_init(){

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

TR0=1;

}(查詢方式編程)①TMOD初始化②計(jì)算初值TMOD=00000001B=0x01TH0=(65536-10000)/256;TL0=(65536-10000)%256;③查詢TF0或中斷6.2定時(shí)器的仿真實(shí)例一、方波信號(hào)發(fā)生器仿真實(shí)例任務(wù)要求:產(chǎn)生頻率為50Hz的的方波信號(hào),系統(tǒng)晶振為12MHz。2軟件設(shè)計(jì)#include<reg52.h> sbitP20=P2^0; voidT0_init();//定時(shí)器T0初始化voidmain(void) {T0_init();while(1); }voidT0_init(){TMOD=0x01; TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

TR0=1;

ET0=1;//開T0中斷

EA=1; //開總中斷}(中斷方式編程)voidT0_int()interrupt1{TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

P20=!P20; }6.2定時(shí)器的仿真實(shí)例一、方波信號(hào)發(fā)生器仿真實(shí)例任務(wù)要求:產(chǎn)生頻率為50Hz的的方波信號(hào),系統(tǒng)晶振為12MHz。3仿真運(yùn)行周期為20ms6.1T0與T1的結(jié)構(gòu)與工作方式定時(shí)器初值:定時(shí)時(shí)間=(最大計(jì)數(shù)個(gè)數(shù)-初值)*機(jī)器周期任務(wù)要求:產(chǎn)生頻率為50Hz的的方波信號(hào),系統(tǒng)晶振為12MHz?!揪幊绦〖记伞繋?shù)的定時(shí)器初始化函數(shù)編寫voidT0_init(unsignedintxus){unsignedlongtemp;//臨時(shí)變量

TMOD&=0xf0;//清T0控制位,保留T1控制位

TMOD|=0x01;//設(shè)置T0為方式1定時(shí)

temp=12000000/12;//機(jī)器周期的頻率1MHztemp=(temp*xus)/1000000;//定時(shí)xus的計(jì)數(shù)值

temp=65536-temp;//定時(shí)器初值

TH0_temp=(unsignedchar)(temp>>8);//計(jì)算高8位初值

TL0_temp=(unsignedchar)(temp);//計(jì)算低8位初值

TH0=TH0_temp;//置T0高8位初值

TL0=TL0_temp;//置T0低8位初值

TR0=1;//啟動(dòng)T0ET0=1;//開T0中斷

EA=1; //開總中斷}6.2定時(shí)器的仿真實(shí)例二、I/O口輸出PWM波形仿真實(shí)例任務(wù)要求:按鍵控制輸出PWM波形,頻率50Hz,占空比為25%、50%、75%的。晶振12MHz。1硬件電路設(shè)計(jì)T1,方式2,定時(shí)100us中斷一次T=20msHigh_num=50占空比為25%High_num=100占空比為50%High_num=150占空比為75%進(jìn)入中斷次數(shù):count++PWM波:count≤High_numP2.0=1Count>High_numP2.0=0High_num獲得:KEY1:High_num=50KEY2:High_num=100KEY3:High_num=150T=2006.2定時(shí)器的仿真實(shí)例任務(wù)要求:按鍵控制輸出PWM波形,頻率50Hz,占空比為25%、50%、75%的。2軟件設(shè)計(jì)#include"reg52.h"#defineucharunsignedchar#defineuintunsignedintsbitPWM=P2^0;//輸出PWMsbitkey1=P2^3;//占空比25%sbitkey2=P2^4;//占空比50%sbitkey3=P2^5;//占空比75%voidT1_init();//T1初始化ucharkeyscan();//設(shè)置占空比閾值ucharcount=0,High_num=0;voidmain(){

T1_init();while(1){

keyscan();}}voidT1_init()

{TMOD=0x20TH1=256-100

TL1=256-100;TR1=1;//啟動(dòng)T1 ET1=1;//開啟T1中斷

EA=1;//開總中斷

}二、I/O口輸出PWM波形仿真實(shí)例voidT1_int()interrupt3{

count++;//累計(jì)中斷次數(shù)

if(count>=200)count=0;if(count<High_num)PWM=1;elsePWM=0;}6.2定時(shí)器的仿真實(shí)例2軟件設(shè)計(jì)ucharkeyscan(){if(key1==0){delay(5);if(key1==0)

High_num=50;//KEY1=25%while(!key1);}if(key2==0){delay(5);if(key2==0)High_num=100;//KEY2=50%while(!key2);}二、I/O口輸出PWM波形仿真實(shí)例

if(key3==0){delay(5);if(key3==0)

High_num=150;

while(!key3);}returnHigh_num;}任務(wù)要求:按鍵控制輸出PWM波形,頻率50Hz,占空比為25%、50%、75%的。6.2定時(shí)器的仿真實(shí)例三、基于數(shù)碼管的秒表仿真實(shí)例任務(wù)要求:按鍵1啟動(dòng)秒表,數(shù)碼管(共陽(yáng))顯示;

按鍵2停止秒表,顯示當(dāng)前值。

再按下按鍵1則從0開始計(jì)時(shí),重復(fù)上述過(guò)程。

計(jì)時(shí)范圍00~59s,如果計(jì)時(shí)到59s,將從0計(jì)時(shí)。晶振12MHz。1硬件電路設(shè)計(jì)T0方式1,定時(shí)50ms中斷一次進(jìn)入中斷20為1s,sec累計(jì)秒次數(shù)數(shù)碼管顯示sec分離出十位、個(gè)位按鍵處理KEY1:TR0=1KEY2:TR0=01s的獲得shi=sec/10;ge=sec%10;6.2定時(shí)器的仿真實(shí)例2軟件設(shè)計(jì)voidT0_init(){ TMOD=0x01;

TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;PT0=0;EA=1;}voidEx_init(){IT0=1;

EX0=1;

PX0=1;

IT1=1;

EX1=1;PX1=1;

EA=1;}三、基于數(shù)碼管的秒表仿真實(shí)例voidT0_it()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;

count++;

if(count>=20){count=0;sec++;}if(sec>=60)sec=0;}voidkey1_int()interrupt0{

TR0=1;//啟動(dòng)T0sec=0x00;IE0=0;//清INT0中斷標(biāo)志位}voidkey2_int()interrupt2{TR0=0;//停止T0IE1=0;//清INT1中斷標(biāo)志位}6.2定時(shí)器的仿真實(shí)例2軟件設(shè)計(jì)voiddisplay(ucharz){uintshi,ge;

shi=z/10;ge=z%10;c1=1;//選中第一個(gè)數(shù)碼管

P2=seg[ge];//顯示千位

delay(1);P2=0xff;//消隱

c1=0;c2=1;//選中第二個(gè)數(shù)碼管

P2=seg[shi];//顯示百位

delay(1);P2=0xff;//消隱

c2=0;}三、基于LED數(shù)碼管的秒表仿真實(shí)例#include"reg52.h"#defineucharunsignedchar#defineuintunsignedintsbitc1=P1^0;//數(shù)碼管位選端sbitc2=P1^1;//數(shù)碼管位選端ucharcodeseg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

voidT0_init();//T0初始化voidEx_init();//外部中斷初始化voiddelay(uintdat);//延時(shí)程序voiddisplay(uchardate);//顯示程序ucharsec=0,count=0;voidmain(){

T0_init();

Ex_init();while(1){display(sec);}}6.2定時(shí)器的仿真實(shí)例【編程小技巧】定時(shí)刷新數(shù)碼管顯示器問(wèn)題:刷新采用延時(shí)函數(shù)delay。執(zhí)行延時(shí)占用CPU時(shí)間,效率不高。數(shù)碼管動(dòng)態(tài)顯示時(shí),多個(gè)數(shù)碼管整體的動(dòng)態(tài)刷新時(shí)間小于10ms,數(shù)碼管才不會(huì)閃爍。

動(dòng)態(tài)掃描的過(guò)程為“送位選碼送段碼延時(shí)消隱”定時(shí)器T1每隔1ms刷新一位數(shù)碼管c1=1;//選中第一個(gè)數(shù)碼管

P2=seg[ge];//顯示千位

delay(1);P2=0xff;//消隱

c1=0;定時(shí)器T1初始化函數(shù):用帶參數(shù)的定時(shí)初始化函數(shù)T1_init(1000);//T1定時(shí)1ms中斷服務(wù)函數(shù):刷新顯示

display(sec);//1ms顯示刷新6.2定時(shí)器的仿真實(shí)例voiddisplay(ucharz){uintshi,ge;shi=z/10;ge=z%10;

c1=1;//選中第一個(gè)數(shù)碼管

P2=seg[ge];//顯示千位

delay(1);P2=0xff;//消隱

c1=0;c2=1;//選中第二個(gè)數(shù)碼管

P2=seg[shi];//顯示百位

delay(1);P2=0xff;//消隱

c2=0;}【編程小技巧】定時(shí)刷新數(shù)碼管源代碼voiddisplay_Time(uintz){staticuchari=0;//數(shù)碼管位選索引

uintshi,ge;shi=z/10;ge=z%10;switch(i){

case0:P2=0xff;//消隱

c1=1;c2=0;//選第一個(gè)數(shù)碼管

//P1=(P1&0xfC)|0x01;//選第一個(gè)數(shù)碼管

P2=seg[ge];//送段碼

i++;break;

case1:P2=0xff;//消隱

c2=1;c1=0;//選第二個(gè)數(shù)碼管

//P1=(P1&0xfC)|0x02;//選第二個(gè)數(shù)碼管

P2=seg[shi];//送段碼

i=0;break;default:break;}}定時(shí)刷新代碼6.2定時(shí)器的仿真實(shí)例2軟件設(shè)計(jì)(定時(shí)刷新)#include"reg52.h"#defineucharunsignedchar#defineuintunsignedintucharcodeseg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共陽(yáng)數(shù)碼voidT0_init();//T0初始化voidT1_init(uintxus);//T1初始化voidEx_init();//外部中斷初始化voiddisplay_Time(uintz);//顯示程序ucharsec=0,count=0;//秒中斷進(jìn)入次數(shù)ucharTH1_temp,TL1_temp;//T1定時(shí)初值voidmain(){T0_init();//T0定時(shí)50msT1_init(1000);//T1定時(shí)1msEx_init();//中斷初始化

while(1);}voidT1_int()interrupt3{

TR1=0; //關(guān)閉T1

display(sec);//1ms顯示刷新

TH1=TH1_temp;//置T1高8位初值

TL1=TL1_temp;//置T1低8位初值

TR1=1;//啟動(dòng)T1}三、基于LED數(shù)碼管的秒表仿真實(shí)例T0_init()、T1_init(uintxus)、EX_init()以及T0、外部中斷0、1的中斷函數(shù)與上同6.2定時(shí)器的仿真實(shí)例四、基于LCD的時(shí)鐘仿真實(shí)例任務(wù)要求:key1啟動(dòng)秒表,key2停止秒表,key3增1,key4減1;在LCD1602上顯示。計(jì)時(shí)范圍00~59s,如果計(jì)時(shí)到59s,將從0計(jì)時(shí)。系統(tǒng)晶振為12MHz。1硬件電路設(shè)計(jì)T0方式1,定時(shí)50ms中斷一次進(jìn)入中斷20為1s,sec累計(jì)秒次數(shù)LCD顯示sec分離出十位、個(gè)位按鍵處理KEY1:TR0=1KEY2:TR0=01s的獲得shi=sec/10;ge=sec%10;KEY3:sec++KEY4:sec--6.2定時(shí)器的仿真實(shí)例2軟件設(shè)計(jì)#include"reg52.h"#defineucharunsignedchar#defineuintunsignedintsbitlcdrs=P1^0; sbitlcdrw=P1^1; sbitlcden=P1^2;

sbitkey1=P1^3;//啟動(dòng)sbitkey2=P1^4;//停止sbitkey3=P1^5;//增一sbitkey4=P1^6;//減一voidT0_init();//T0初始化voidkeyscan();voiddelay(uintdat);//延時(shí)程序voidlcd_init();//lcd初始化voidwrite_cmd(charcmd);voidwrite_data(uchardat);voidwrite_str(uchar*strvoiddisplay(uchardate);ucharflag=0,sec=0,count=0;voidmain(){T0_init();

lcd_init();write_cmd(0x82);write_str("sec:");while(1){

keyscan();

display(sec);}}四、基于LCD的時(shí)鐘仿真實(shí)例voidT0_init(){TMOD=0x01;//定時(shí)器T0方式1,定時(shí)50msTH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;}6.2定時(shí)器的仿真實(shí)例2軟件設(shè)計(jì)voidT0_it()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count>=20){count=0;sec++;}if(sec>=60){sec=0;flag=1;}}voidkeyscan(){if(key1==0)TR0=1;if(key2==0)TR0=0;if(key3==0){

sec++;if(sec==60)sec=60;}if(key4==0){sec--;if(sec<=0)sec=0;}}四、基于LCD的時(shí)鐘仿真實(shí)例voiddisplay(uchardate){write_cmd(0x88);write_data(date/10+0x30);//顯示十位

write_cmd(0x89);write_data(date%10+0x30);//顯示個(gè)位}6.2定時(shí)器的仿真實(shí)例五、脈沖寬度測(cè)量仿真實(shí)例任務(wù)要求:測(cè)量信號(hào)的正脈沖寬度,并在LCD上顯示。系統(tǒng)晶振為12MHz。測(cè)量原理①T1方式1,定時(shí),累計(jì)機(jī)器周期的個(gè)數(shù),1個(gè)機(jī)器周期1us利用T0/T1的硬啟動(dòng)方式,當(dāng)門控位GATE=1,TR1=1,只有當(dāng)(INT1)引腳輸入高電平時(shí),T1才啟動(dòng),開始計(jì)數(shù),累計(jì)機(jī)器周期的個(gè)數(shù)。脈沖信號(hào)②P3.3引腳上升沿(高電平)啟動(dòng)T1定時(shí),下降沿(低電平)停止定時(shí)③讀出T1的數(shù)值④測(cè)量范圍:0~65535us6.2定時(shí)器的仿真實(shí)例二、脈沖寬度測(cè)量仿真實(shí)例任務(wù)要求:測(cè)量信號(hào)的正脈沖寬度,并在LCD上顯示。系統(tǒng)晶振為12MHz。1硬件電路設(shè)計(jì)6.2定時(shí)器的仿真實(shí)例2軟件設(shè)計(jì)#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitlcdrs=P1^0;//LCD1602液晶顯示器數(shù)據(jù)/命令選擇端口sbitlcdrw=P1^1;//LCD1602液晶顯示器讀/寫選擇端口sbitlcden=P1^2;//LCD1602液晶顯示器使能端口 sbitP3_3=P3^3; //INT1測(cè)量脈沖輸入引腳定義voiddelay(uintdat);//延時(shí)程序voidlcd_init();//lcd初始化voidwrite_cmd(charcmd);//寫指令函數(shù)voidwrite_data(uchardat);//寫數(shù)據(jù)函數(shù)voidwrite_str(uchar*str);//寫字符串函數(shù)voiddisplay(uintdate);//顯示uintWidth_num;//脈沖的寬度,T1的計(jì)數(shù)值任務(wù)要求:測(cè)量信號(hào)的正脈沖寬度,并在LCD上顯示。系統(tǒng)晶振為12MHz。6.2定時(shí)器的仿真實(shí)例2軟件設(shè)計(jì)voidmain(){ lcd_init();//LCD初始化

write_cmd(0x82);

write_str("PulseWidth:");while(1){TMOD=0x90;TH1=0; TL1=0;

while(P3_3==1);

TR1=1;//如果INT1為低,TR1=1,等待INT1變高啟動(dòng)T1

while(P3_3==0);//等待INT1變高,硬啟動(dòng)條件滿足,T1計(jì)數(shù)

while(P3_3==1);//等待INT1變低,變低后T1停止計(jì)數(shù)

TR1=0; //復(fù)位TR1Width_num=TH1*256+TL1;//計(jì)算T1計(jì)數(shù)值,即脈沖寬度

display(Width_num); //顯示脈沖寬度(機(jī)器周期個(gè)數(shù))

}}6.2定時(shí)器的仿真實(shí)例2軟件設(shè)計(jì)voiddisplay(uintdate){ucharwidth[7];//定義字符數(shù)組,存放脈沖寬度每一位的ASCIIwidth[0]=date/10000+0x30;//分離十萬(wàn)位,轉(zhuǎn)換為ASCIIwidth[1]=date%100000/10000+0x30;//分離萬(wàn)位,轉(zhuǎn)換為ASCIIwidth[2]=date%10000/1000+0x30;//分離千位,轉(zhuǎn)換為ASCIIwidth[3]=date%1000/100+0x30;//分離百位,轉(zhuǎn)換為ASCIIwidth[4]=date%100/10+0x30;//分離十位,轉(zhuǎn)換為ASCIIwidth[5]=date%10+0x30; //分離個(gè)萬(wàn)位,轉(zhuǎn)換為ASCIIwidth[6]='\0'; //數(shù)組末尾填加字符串結(jié)束的標(biāo)志

write_cmd(0xc5);//在LCD第2行第5個(gè)位置寫入

write_str(width);//將脈沖寬度轉(zhuǎn)換為字符數(shù)組寫入LCD}6.3計(jì)數(shù)器的仿真實(shí)例【知識(shí)點(diǎn)】計(jì)數(shù)器模式對(duì)外部輸入信號(hào)頻率的要求計(jì)數(shù)器模式時(shí),計(jì)數(shù)脈沖來(lái)自外部輸入引腳T0或T1。當(dāng)輸入信號(hào)產(chǎn)生負(fù)跳變時(shí),計(jì)數(shù)值增1。

每個(gè)機(jī)器周期S5P2期間,都對(duì)外部輸入引腳T0或T1進(jìn)行采樣。如在第1個(gè)機(jī)器周期中采得值為1,而在下一個(gè)機(jī)器周期中采得的值為0,則在緊跟著的再下一個(gè)機(jī)器周期S3P1期間,計(jì)數(shù)器加1。由于確認(rèn)一次負(fù)跳變要花2個(gè)機(jī)器周期,即24個(gè)振蕩周期,因此外部輸入的計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率1/24。

對(duì)外輸入信號(hào)占空比沒有限制,但為確保某一給定電平在變化前能被采樣1次,則該電平至少保持1個(gè)機(jī)器周期。問(wèn)題:選用12MHz頻率晶體,則可輸入外部脈沖信號(hào)的最高頻率為多少?可輸入外部脈沖信號(hào)的最高頻率為500kHz。6.3計(jì)數(shù)器的仿真實(shí)例-頻率計(jì)任務(wù)要求:測(cè)量脈沖信號(hào)的頻率,并在數(shù)碼管上顯示,測(cè)量頻率范圍為0~9999Hz。系統(tǒng)晶振為12MHz。1硬件電路設(shè)計(jì)6.3計(jì)數(shù)器的仿真實(shí)例-頻率計(jì)任務(wù)要求:測(cè)量脈沖信號(hào)的頻率,并在數(shù)碼管上顯示,測(cè)量頻率范圍為0~9999Hz。系統(tǒng)晶振為12MHz。T0方式1,定時(shí)25ms中斷一次,進(jìn)入中斷40次為1s①需要1s的定時(shí)測(cè)量信號(hào)的頻率原理測(cè)量信號(hào)的頻率就是測(cè)量每秒的脈沖個(gè)數(shù)頻率是指是單位時(shí)間內(nèi)完成振動(dòng)的次數(shù)②需要累計(jì)脈沖個(gè)數(shù)T1方式1,計(jì)數(shù),TH1=TL1=0③二者關(guān)聯(lián)T0定時(shí)1s,讀出T1的值T0定時(shí)25s讀出一次T1的數(shù)值,放在數(shù)組fre[count]中,T0中斷40次也就是1s,這時(shí)把讀出的40次值,即fre數(shù)組的值累加就是頻率值fresum。2軟件設(shè)計(jì)問(wèn)題:頻率高,T1可能溢出6.3計(jì)數(shù)器的仿真實(shí)例2軟件設(shè)計(jì)voidT0T1_init(){

TMOD=0x51;//T0方式1,

25ms,T1計(jì)數(shù)TH0=(65536-25000)/256;//T0賦初值

TL0=(65536-25000)%256;ET0=1;//開T0中斷允許

TR0=1;//啟動(dòng)T0TR1=1;//啟動(dòng)T1EA=1;//開總中斷

}voidT0_it()interrupt1{TR0=0;//停止T0TR1=0;//停止T1

fre[count]=(TH1<<8)|TL1;

count++;//T0累計(jì)40次為1s

TH1=0;//T125ms清0TL1=0;TH0=(65536-25000)/256;

TL0=(65536-25000)%256;TR0=1;//啟動(dòng)T0TR1=1;//啟動(dòng)T1 }6.3計(jì)數(shù)器的仿真實(shí)例2軟件設(shè)計(jì)voiddisplay(u16z){u16qian,bai,shi,ge;

qian=z/1000;//分離千位

bai=z%1000/100;//分離百位

shi=z%100/10;//分離十位

ge=z%10;//分離個(gè)位

c1=0;c2=0;c3=0;c4=0;

//清位選端

c1=1;//選中第一個(gè)數(shù)碼管

P0=seg[ge];//顯示個(gè)位

delay(1);P0=0xff;//消隱

c1=0;c2=1;//選中第二個(gè)數(shù)碼管

P0=seg[shi];//顯示十位

delay(1);P0=0xff;//消隱

c2=0;c3=1;//選中第三個(gè)數(shù)碼管

P0=seg[bai];//顯示百位

delay(1);P0=0xff;//消隱

c3=0;

c4=1;//選中第四個(gè)數(shù)碼管

P0=seg[qian];//顯示千位

delay(1);P0=0xff;//消隱

c4=0;}6.3計(jì)數(shù)器的仿真實(shí)例2軟件設(shè)計(jì)#include"reg52.h"#defineu8unsignedchar#defineu16unsignedintsbitc1=P2^0;//數(shù)碼管位選端sbitc2=P2^1;//數(shù)碼管位選端sbitc3=P2^2;//數(shù)碼管位選端sbitc4=P2^3;//數(shù)碼管位選端u8codeseg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;}voiddelay(u16dat);//延時(shí)程序voidT0T1_init();//T0初始化voiddisplay(u16z);//顯示u16fre[40];//存放25ms讀出的T1值u16fresum=0;//計(jì)算的頻率值u8count=0;//T0累計(jì)40次的變量voidmain(){

T0T1_init();//T0、T1初始化while(1){u8i=0;if(count==40)//1s時(shí)間到{TR0=0; TR1=0; count=0; fresum=0; for(i=0;i<40;i++) {

fresum=fresum+fre[i] } TR0=1;TR1=1;}display(fresum);//顯示}}6.4T2的結(jié)構(gòu)與工作方式T2有2個(gè)8位計(jì)數(shù)器寄存器:TH2和TL2,用于存放當(dāng)前計(jì)數(shù)值T2有2個(gè)陷阱寄存器:RCAP2L和RCAP2H,用于存放備用初值或捕捉值。T2有計(jì)數(shù)和定時(shí)2種工作模式T2有捕捉、自動(dòng)重新裝載(遞增或遞減)和波特率發(fā)生器3種工作方式,6.4.2T2的捕捉方式16位計(jì)數(shù)/定時(shí)(加1計(jì)數(shù))或捕捉(同時(shí)具有計(jì)數(shù)/定時(shí))。計(jì)數(shù)/定時(shí)工作狀態(tài)(加1計(jì)數(shù))1

溢出:硬件使TF2=1,TL2=0,TH2=0,不能自動(dòng)重裝初值,軟件使TF2=0溢出后處理:可查詢TF2=1,TF2=1也可用于產(chǎn)生中斷6.4.2T2的捕捉方式16位計(jì)數(shù)/定時(shí)(加1計(jì)數(shù))或捕捉(同時(shí)具有計(jì)數(shù)/定時(shí))。捕捉(同時(shí)具有計(jì)數(shù)/定時(shí))2設(shè)置:捕捉:T2EX(P1.1)發(fā)生負(fù)跳變時(shí),把TH2和TL2中的當(dāng)前計(jì)數(shù)值分別“捕捉”進(jìn)陷阱寄存器RCAP2L和RCAP2H中,同時(shí)T2EX(P1.1)上的負(fù)跳變將使T2CON的外部中斷請(qǐng)求標(biāo)志位EXF2=1,向CPU請(qǐng)求中斷。溢出后處理:可查詢TF2=1,EXF2=1,也都可用于產(chǎn)生中斷6.4.2T2的捕捉方式16位計(jì)數(shù)/定時(shí)(加1計(jì)數(shù))或捕捉(同時(shí)具有計(jì)數(shù)/定時(shí))。捕捉(同時(shí)具有計(jì)數(shù)/定時(shí))2設(shè)置:捕捉:T2EX(P1.1)發(fā)生負(fù)跳變時(shí),把TH2和TL2中的當(dāng)前計(jì)數(shù)值分別“捕捉”進(jìn)陷阱寄存器RCAP2L和RCAP2H中,同時(shí)T2EX(P1.1)上的負(fù)跳變將使T2CON的外部中斷請(qǐng)求標(biāo)志位EXF2=1,向CPU請(qǐng)求中斷。溢出后處理:可查詢TF2=1,EXF2=1,也都可用于產(chǎn)生中斷捕捉編程思路:

當(dāng)T2EX引腳(P1.1)上的信號(hào)發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器TH2和TL2中的當(dāng)前計(jì)數(shù)值分別“捕捉”進(jìn)陷阱寄存器RCAP2L和RCAP2H中,并使EXF2=1,觸發(fā)中斷,在中斷服務(wù)函數(shù)中,讀出RCAP2L和RCAP2H的值,外部T2EX引腳的下一個(gè)負(fù)跳變,會(huì)產(chǎn)生另一個(gè)捕捉過(guò)程,再次進(jìn)入中斷,讀出RCAP2L和RCAP2H的值,根據(jù)這2次的值,就可以計(jì)算出T2EX引腳(P1.1)上的脈沖周期。這時(shí)T2工作在定時(shí)模式下。6.4.3T2的16位自動(dòng)重裝載方式T2自動(dòng)重新裝載方式結(jié)構(gòu)示意圖T2遞增/遞減結(jié)構(gòu)示意圖6.4.3T2的16位自動(dòng)重裝載方式當(dāng)EXEN2=0時(shí)的自動(dòng)重新裝載方式(T2計(jì)滿溢出觸發(fā))1①T2增1計(jì)滿溢出觸發(fā)的自動(dòng)重新裝載方式設(shè)置:

②T2增1計(jì)滿溢出觸發(fā)的自動(dòng)重新裝載方式設(shè)置:

③T2減1溢出觸發(fā)的自動(dòng)重新裝載方式設(shè)置:

當(dāng)EXEN2=1的自動(dòng)重新裝載方式(T2計(jì)滿溢出觸發(fā)或T2EX引腳負(fù)跳變觸發(fā))2①T2增1計(jì)滿溢出觸發(fā)的自動(dòng)重新裝載方式設(shè)置:

T2EX引腳負(fù)跳變觸發(fā)的增1自動(dòng)重新裝載方式設(shè)置:

DCEN=0;6.4.4T2的波特率發(fā)生器方式及可編程時(shí)鐘輸出波特率發(fā)生器方式1(1)T1用作串行口波特率發(fā)生器RCLK=0或TCLK=0時(shí),定時(shí)器T1作為串行口波特率發(fā)生器使用。(2)T2用作串行口波特率發(fā)生器RCLK=1或TCLK=1時(shí),定時(shí)器T2作為串行口波特率發(fā)生器使用。(3)附加的外部中斷源RCLK=1或TCLK=1;EXEN2=16.4.4T2的波特率發(fā)生器方式及可編程時(shí)鐘輸出波特率發(fā)生器方式1(2)T2用作串行口波特率發(fā)生器①工作方式設(shè)置:

16位自動(dòng)重裝初值的加1定時(shí)模式②T2的波特率設(shè)置

計(jì)算出初值X,裝入陷阱寄存器RCAP2H和RCAP2L中【例】串口方式1,波特率9600bps,晶振為11.0592MHz,

T2作波特率發(fā)生器使用,計(jì)算初值。

X=(65536-36)=65500RCAP2H=65500/256;RCAP2L=65500%256;③T2溢出說(shuō)明TH2和TL2從初值的基礎(chǔ)上進(jìn)行加1計(jì)數(shù),計(jì)滿溢出,硬件自動(dòng)將RCAP2H和RCAP2L寄存器中預(yù)置的初值重裝入TH2和TL2中。但不會(huì)置位TF2向CPU請(qǐng)求中斷。6.4.4T2的波特率發(fā)生器方式及可編程時(shí)鐘輸出可編程時(shí)鐘信號(hào)輸出2①設(shè)置工作方式:

②啟動(dòng)和停止:TR2=1

啟動(dòng);TR2=0

停止③時(shí)鐘信號(hào)輸出頻率

6.4.5T2捕捉方式測(cè)量脈沖寬度仿真實(shí)例任務(wù)要求:測(cè)量信號(hào)的脈沖寬度,并在LCD上顯示。系統(tǒng)晶振為12MHz。硬件電路設(shè)計(jì)16.4.5T2捕捉方式測(cè)量脈沖寬度仿真實(shí)例任務(wù)要求:測(cè)量信號(hào)的脈沖寬度,并在LCD上顯示。系統(tǒng)晶振為12MHz。軟件設(shè)計(jì)2開放T2中斷和總中斷,T2溢出和T2EX引腳的負(fù)跳變都會(huì)觸發(fā)中斷,進(jìn)入同一個(gè)中斷程序,所以在中斷服務(wù)程序中判斷是EXF2中斷,根據(jù)進(jìn)入次數(shù)讀出RCAP2L和RCAP2H的捕捉值,根據(jù)2次捕捉值計(jì)算脈沖寬度。①T2設(shè)置為捕捉(同時(shí)具有計(jì)數(shù)/定時(shí)):

T2設(shè)為16位定時(shí)器,從0開始計(jì)數(shù),TH2=TL2=0;②計(jì)數(shù)初值:③T2中斷:6.4.5T2捕捉方式測(cè)量脈沖寬度仿真實(shí)例2軟件設(shè)計(jì)#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsfrT2MOD=0xc9sbitlcdrs=P3^5;sbitlcdrw=P3^6;sbitlcden=P3^7;voiddelay(uintdat);//延時(shí)程序voidT2_init();//T2初始化voidlcd_init();//lcd初始化voidwrite_cmd(charcmd);voidwrite_data(uchardat);//寫數(shù)據(jù)函數(shù)voidwrite_str(uchar*strvoiddisplay(uintdate);//顯示uintnum1;//第一次捕捉值uintnum2;//第二次捕捉值uintnum;ucharcount;voidmain(){ T2_init();//T2初始化

lcd_init();//LCD初始化

write_cmd(0x82;

write_str("PulseWidth:"); while(1){display(num);

}}任務(wù)要求:測(cè)量信號(hào)的脈沖寬度,并在LCD上顯示。系統(tǒng)晶振為12MHz。6.4.5T2捕捉方式測(cè)量脈沖寬度仿真實(shí)例2軟件設(shè)計(jì)voidT2_init(){RCLK=0;//T2不用作波特率發(fā)生器TCLK=0;//T2不用作波特率發(fā)生器CP_RL2=1;//

(捕捉)EXEN2=1;//=0(T2溢出自動(dòng)重裝)C_T2=0;//定時(shí)T2MOD=0x00;//DCEN=0(增1計(jì)數(shù))TH2=0x00;//從0開始計(jì)數(shù)

TL2=0x00;//置T2低8位初值0TR2=1;//啟動(dòng)T2ET2=1;//開T2中斷

EA=1; //開總中斷}voidT2_int()interrupt5{if(EXF2==1)//T2EX負(fù)跳變觸發(fā)中斷

{count++;//累計(jì)進(jìn)入中斷次數(shù)

if(count==1)//第1次負(fù)跳變

num1=RCAP2H*256+RCAP2L;if(count==2)//第2次負(fù)跳變{ num2=RCAP2H*256+RCAP2L;

count=0; num=num2-num1;

}}EXF2=0; //EXF2標(biāo)志清零}任務(wù)要求:測(cè)量信號(hào)的脈沖寬度,并在LCD上顯示。系統(tǒng)晶振為12MHz。6.4.5T2捕捉方式測(cè)量脈沖寬度仿真實(shí)例2軟件設(shè)計(jì)voiddisplay(uintdate){ucharwidth[7];width[0]=date/10000+0x30;//分離十萬(wàn)位,轉(zhuǎn)換為ASCIIwidth[1]=date%100000/10000+0x30;//分離萬(wàn)位,轉(zhuǎn)換為ASCIIwidth[2]=date%10000/1000+0x30;//分離千位,轉(zhuǎn)換為ASCIIwidth[3]=date%1000/100+0x30;//分離百

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論