MCS-51單片機(jī)定時(shí)器/計(jì)數(shù)器常見習(xí)題解答
1、根據(jù)定時(shí)器/計(jì)數(shù)器0方式1邏輯結(jié)構(gòu)圖,分析門控位GATE取不同值時(shí),啟動(dòng)定時(shí)器的工作過程。
答:當(dāng)GATE=0:軟件啟動(dòng)定時(shí)器,即用指令使TCON中的TR0置1即可啟動(dòng)定時(shí)器0。
GATE=1:軟件和硬件共同啟動(dòng)定時(shí)器,即用指令使TCON中的TR0置1時(shí),只有外部中斷INT0引腳輸入高電平時(shí)才能啟動(dòng)定時(shí)器0。
2、當(dāng)定時(shí)器/計(jì)數(shù)器的加1計(jì)數(shù)器計(jì)滿溢出時(shí), 溢出標(biāo)志位TF1由硬件自動(dòng)置1,簡述對(duì)該標(biāo)志位的兩種處理方法。
答:一種是以中斷方式工作,即TF1置1并申請(qǐng)中斷,響應(yīng)中斷后,執(zhí)行中斷服務(wù)程序,并由硬件自動(dòng)使TF1清0;另一種以查詢方式工作,即通過查詢?cè)撐皇欠駷?來判斷是否溢出,TF1置1后必須用軟件使TF1清0。
3、設(shè)MCS-51單片機(jī)fosc=12MHz,要求T0定時(shí)150µs,分別計(jì)算采用定時(shí)方式0、方式1和方式2時(shí)的定時(shí)初值。
答:方式0的定時(shí)初值:IF6AH
方式1的定時(shí)初值:FF6AH
方式2的定時(shí)初值:6AH
4、 設(shè)MCS-51單片機(jī)fosc=6MHz,問單片機(jī)處于不同的工作方式時(shí),最大定時(shí)范圍是多少?
答:方式0的最大定時(shí)范圍:131,072µs
方式1的最大定時(shí)范圍:16,384µs
方式2的最大定時(shí)范圍:512µs
5、設(shè)MCS-51的單片機(jī)晶振為6MHZ,使用T1對(duì)外部事件進(jìn)行計(jì)數(shù),每計(jì)數(shù)200次后,T1轉(zhuǎn)為定時(shí)工作方式,定時(shí)5ms后,又轉(zhuǎn)為計(jì)數(shù)方式,如此反復(fù)的工作,試編程實(shí)現(xiàn)。
答:
#include <reg52.h>
bit F0=0;
void main()
{
TMOD=0x60;
TL1=56;
TH1=56;
TR1=1;
ET1=1;
EA =1;
While(1);
}
void serve() interrupt 3
{
if (!F0)
{ TMOD=0x10;
TL1=63036%16;
TH1=63036/16;
F0=~F0;
}
else
{
TMOD=0x60;
TL1=56;
TH1=56;
F0=~F0;
}
}
6、 用方式0設(shè)計(jì)兩個(gè)不同頻率的方波,P1.0輸出頻率為200Hz,P1.1輸出頻率為 100Hz,晶振頻率12MHz。
#include <at89x52.h>
void main()
{
TMOD=0x00;
TL0=0x1c;
TH0=0xb1;
TR0=1;
F0=0;
ET0=1;
EA =1;
While(1);
}
void serve() interrupt 1
{
TL0=0x1c;
TH0=0xb1;
P1_0=~P1_0;
if(F0==0)
F0=1;
else
{
F0=0;
P1_1=~P1_1;
}
}
7、定時(shí)器T0已預(yù)置為156,且選定用于方式2的計(jì)數(shù)方式,現(xiàn)在T0輸入周期為1ms的脈沖,問此時(shí)T0的實(shí)際用途是什么?在什么情況下計(jì)數(shù)器0溢出?
答:T0的實(shí)際用途是定時(shí)1s,每隔1s計(jì)數(shù)器0溢出一次。
8、P1.0輸出脈沖寬度調(diào)制(PWM)信號(hào),即脈沖頻率為2kHz、占空比為7:10的矩形波,晶振頻率12MHz。
#include <at89x52.h>
unsigned char data count;
void main()
{
TMOD=0x02;
TL0=206;
TH0=206;
TR0=1;
ET0=1;
EA =1;
count=0;
While(1);
}
void serve() interrupt 1
{
count++;
if(count<=7)
P1_0=1;
else
P1_0=0;
if(count==10)
count=0;
}
9、兩只開關(guān)分別接入P3.0、P3.1,在開關(guān)信號(hào)4種不同的組合邏輯狀態(tài),使P1.0分別輸出頻率0.5kHz、1kHz、2kHz、4kHz的方波,晶振頻率為12MHz。
#include <at89x52.h>
unsigned char data sta;
unsigned char data cou;
unsigned char data mag;
void main()
{
TMOD=0x02;
TL0=131;
TH0=131;
TR0=1;
ET0=1;
EA =1;
cou=0;
While(1);
}
void serve() interrupt 1
{
unsigned char temp;
P3=0xff;
temp=P3&0xfc;
if(temp!=sta)
{
sta=temp;
cou=0;
}
if(sta=0x00)
mag=7;
else if(sta=0x01)
mag=3;
else if(sta=0x10)
mag=1;
else if(sta=0x11)
mag=0;
if(cou==mag)
{
P1_0=~P1_0;
cou=0;
}
else
cou++;
}
10、MCS-51單片機(jī)P1端口上,經(jīng)驅(qū)動(dòng)器連接有8只發(fā)光二極管,若fosc=6MHz,試編寫程序,使這8只發(fā)光二極管每隔2s循環(huán)發(fā)光一次(要求T0定時(shí))。
#include <at89x52.h>
unsigned char data cou;
unsigned int data tim;
void main()
{
TMOD=0x02;
TL0=16;
TH0=16;
TR0=1;
ET0=1;
EA =1;
P1=0;
cou=0;
tim=1;
While(1);
}
void serve() interrupt 1
{
tim++;
if(tim==500)
{
P1=0x01<<cou;
tim=1;
cou++;
if(cou==8)
cou=0;
}
}
15.設(shè)fosc=12MHz。試編寫一段程序,對(duì)定時(shí)器T1初始化,使之工作在模式2,產(chǎn)生200µs定時(shí),并用查詢T1溢出標(biāo)志的方法,控制P1.1輸出周期為2ms的方波。
#include <at89x52.h>
void main()
{
unsigned char i,j;
TMOD=0x20;
TL1=56;
TH1=56;
TR1=1;
while(1)
{
while(TF1=1)
{
TF1=0;
i++;
if(i==5)
{
P1_1=~P1_1;
i=0;
}
}
}
}
11、使用一個(gè)定時(shí)器,如何通過軟、硬件結(jié)合的方法,實(shí)現(xiàn)較長時(shí)間的定時(shí)?
答:先使用硬件實(shí)現(xiàn)單位時(shí)間的定時(shí),通過軟件設(shè)置計(jì)數(shù)來實(shí)現(xiàn)較長時(shí)間的定時(shí)。
編輯:admin 最后修改時(shí)間:2018-05-18