第7章習題解答_第1頁
第7章習題解答_第2頁
第7章習題解答_第3頁
第7章習題解答_第4頁
第7章習題解答_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第7章思考題及習題71如果采用的晶振的頻率為24MHz,定時器/計數(shù)器工作在方式0、1、2下,其最大定時時間各為多少?答:晶振的頻率為24MHz, 機器周期為0.5µs。方式0最大定時時間=0.5µs×213=0.5µs×8192=4096µs方式1最大定時時間=0.5µs×216=0.5µs×65536=327686µs方式2最大定時時間=0.5µs×28=0.5µs×256=128µs2定時器/計數(shù)器用作計數(shù)器模式時,對外界計數(shù)頻率

2、有何限制?答:外部輸入的計數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24。3定時器/計數(shù)器的工作方式2有什么特點?適用于哪些應用場合?答:方式2為初值自動裝入的8位定時器/計數(shù)器,克服了在循環(huán)定時或循環(huán)計數(shù)應用時就存在用指令反復裝入計數(shù)初值影響定時精度的問題。4THx與TLx(x = 0,1)是普通寄存器還是計數(shù)器?其內(nèi)容可以隨時用指令更改嗎?更改后的新值是立即刷新還是等當前計數(shù)器計滿后才能刷新?答:THx與TLx(x = 0,1)是計數(shù)器,其內(nèi)容可以隨時用指令更改,但是更改后的新值要等當前計數(shù)器計滿后才能刷新。5Proteus虛擬仿真使用定時器T0,采用方

3、式2定時,在P1.0腳輸出周期為400µs,占空比為4:1的矩形脈沖,要求在P1.0腳接有虛擬示波器,觀察P1.0腳輸出的矩形脈沖波形。答:略6Proteus虛擬仿真利用定時器T1的中斷來使P1.7控制蜂鳴器發(fā)出1kHz的音頻信號,假設系統(tǒng)時鐘頻率為12MHz。答:利用定時器T1的中斷控制P1.7引腳輸出頻率為1kHz的方波音頻信號,驅(qū)動蜂鳴器發(fā)聲。系統(tǒng)時鐘為12MHz。方波音頻信號的周期為1ms,因此T1的定時中斷時間為0.5 ms,進入中斷服務程序后,對P1.7求反。電路如圖所示。圖 控制蜂鳴器發(fā)出1kHz的音頻信號先計算T1初值,系統(tǒng)時鐘為12MHz,則方波的周期為1µ

4、;s。1kHz的音頻信號周期為1ms,要定時計數(shù)的脈沖數(shù)為a。則T1的初值:TH1=(65 536 a)/256;TL1=(65 536 a) %256參考程序如下:#include<reg51.h> /包含頭文件sbit sound=P17; /將sound位定義為P1.7引腳#define f1(a) (65536-a)/256/定義裝入定時器高8位的時間常數(shù)#define f2(a) (65536-a)%256/定義裝入定時器低8位的時間常數(shù)unsigned int i = 500; unsigned int j = 0; v

5、oid main(void) EA=1; /開總中斷. ET1=1; /允許定時器T1中斷 . TMOD=0x10; /TMOD=0001 000B,使用T1的方式1定時 TH1=f1(i); /給定時器T1高8位賦初值. TL1=f2(i); /給定時器T1低8位賦初值. TR1=1; /啟動定時器T1 while(1) /循環(huán)等待 i=460; while(j<2000); j=0; i=360; while(j <2000); j=0;void T1(void) interrupt 3 using 0/定時器T1中斷函數(shù) TR1= 0; /關閉定時器T1 sound=soun

6、d; /P1.7輸出求反 TH1=f1(i); /定時器T1的高8位重新賦初值. TL1=f2(i); /定時器T1的低8位重新賦初值. j+; TR1=1; /啟動定時器T17 Proteus虛擬仿真制作一個LED數(shù)碼管顯示的秒表,用2位數(shù)碼管顯示計時時間,最小計時單位為“百毫秒”,計時范圍0.19.9s。當?shù)?次按下并松開計時功能鍵時,秒表開始計時并顯示時間;第2次按下并松開計時功能鍵時,停止計時,計算兩次按下計時功能鍵的時間,并在數(shù)碼管上顯示;第3次按下計時功能鍵,秒表清0,再按1次計時功能鍵,重新開始計時。如果計時到9.9s時,將停止計時,按下計時功能鍵,秒表清零,再按下重新開始計時。

7、答:本秒表應用了AT89C51的定時器工作模式,計時范圍0.19.9s。此外還涉及如何編寫控制LED數(shù)碼管顯示的程序。LED數(shù)碼管顯示的秒表原理電路如圖所示。圖 LED數(shù)碼管顯示的秒表原理電路及仿真參考程序如下:#include<reg51.h> /包含51單片機寄存器定義的頭文件unsigned char code discode1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; /數(shù)碼管顯示09的段碼表, 帶小數(shù)點unsigned char code discode2=0x3f,0x06,0x5b,0x4f,0x66,0x6

8、d,0x7d,0x07,0x7f,0x6f; /數(shù)碼管顯示09的段碼表,不帶小數(shù)點unsigned char timer=0; /記錄中斷次數(shù)unsigned char second; /儲存秒unsigned char key=0; /記錄按鍵次數(shù)main() /主函數(shù) TMOD=0x01; /定時器T0方式1定時ET0=1; /允許定時器T0中斷EA=1; /總中斷允許second=0; /設初始值P0=discode1second/10; /顯示秒位0P2=discode2second%10; /顯示0.1s位0while(1) /循環(huán)if(P3&0x80)=0x00) /當按鍵

9、被按下時 key+; /按鍵次數(shù)加1switch(key) /根據(jù)按鍵次數(shù)分三種情況case 1: /第一次按下為啟動秒表計時TH0=0xee; /向TH0寫入初值的高8位TL0=0x00; /向TL0寫入初值的低8位,定時5msTR0=1; /啟動定時器T0break;case 2: /按下兩次暫定秒表TR0=0; /關閉定時器T0break;case 3: /按下3次秒表清0key=0; /按鍵次數(shù)清0second=0; /秒表清0P0=discode1second/10; /顯示秒位0 P2=discode2second%10; /顯示0.1s位0break; while(P3&

10、0x80)=0x00); /如果按鍵時間過長在此循環(huán)void int_T0() interrupt 1 using 0 /定時器T0中斷函數(shù)TR0=0; /停止計時,執(zhí)行以下操作(會帶來計時誤差)TH0=0xee; /向TH0寫入初值的高8位TL0=0x00; /向TL0寫入初值的低8位,定時5mstimer+; /記錄中斷次數(shù)if (timer=20) /中斷20次,共計時20*5ms=100ms=0.1stimer=0; /中斷次數(shù)清0second+; /加0.1sP0=discode1second/10; /根據(jù)計時時間,即時顯示秒位 P2=discode2second%10; /根據(jù)計

11、時時間,即時顯示0.1s位if(second=99) /當計時到9.9s時TR0=0; /停止計時second=0; /秒數(shù)清0 key=2; /按鍵數(shù)置2,當再次按下按鍵時,key+,即key=3,秒表清0復原 else /計時不到9.9s時TR0=1; /啟動定時器繼續(xù)計時8 Proteus虛擬仿真制作一個采用LCD1602顯示的電子鐘,在LCD上顯示當前的時間。顯示格式為“時時:分分:秒秒”。設有4個功能鍵k1k4,功能如下:(1)k1進入時間修改。(2)k2修改小時,按一下k2,當前小時增1。(3)k3修改分鐘,按一下k3,當前分鐘增1。(4)k4確認修改完成,電子鐘按修改后的時間運行

12、顯示。答:本題難點在于處理功能鍵K1K4的輸入,由于每個功能鍵都具有相應的一種或多種功能,因此程序中需要大量使用dowhile或while循環(huán)結構,以檢測是否有按鍵按下的具體功能。按鍵檢測函數(shù)如下:void time_change() unsigned char keyvalue0=0,keyvalue1=0; keyvalue0=keyscan();/檢測是否有按鍵按下 if(keyvalue0)/如果有按鍵按下,繼續(xù)檢測 if(keyvalue0=1)/按鍵1,走時停止,開始判斷更改值,直到按鍵4按下   while(key0);/防抖,直到按鍵松開時才進行下一步的操作

13、  TR0=0;/控制走時的中斷停止  do  keyvalue1=keyscan();/檢測按鍵按下  if(keyvalue1=2)/如果按鍵2按下,改變時間    while(key1);/防抖  if(hour<23)/如果小時數(shù)小于23則加1    hour+;    else/如果小時數(shù)為23,置位為0  hour=0;       else if(keyvalue1=3)/如果按鍵3按下,改變分鐘    w

14、hile(key2);/防抖  if(minute<59)/如果分鐘數(shù)小于59則加1    minute+;    else/如果分鐘數(shù)為59,置位為0  minute=0;     clock_write();    while(keyvalue1!=4);/重復對時間的修改直到按鍵4按下  while(key3=0);/防抖  TR0=1;/調(diào)整時間后重新開始走時  必須注意,程序設計中,小時、分鐘、秒變量hour、minute、second必須置為全局變量,才能如上述函數(shù)一樣在各處函數(shù)中直接進行修改,如為局部變量,則上述形式的直接修改無效。160

溫馨提示

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

評論

0/150

提交評論