作業(yè)及答案分析_第1頁
作業(yè)及答案分析_第2頁
作業(yè)及答案分析_第3頁
作業(yè)及答案分析_第4頁
作業(yè)及答案分析_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第6章作業(yè)1、說明定時器T0的四種工作方式。(P.145 第6題)M1 M0工作模式功 能 說 明0 0013位的定時/計數(shù)模式,TL0的高3位沒用。0 1116位的定時/計數(shù)模式1 028位、初始值自動加載的定時/計數(shù)模式。1 13將T0分成兩個相互獨立的、8位的定時/計數(shù)模式。2、假設(shè)單片機晶振fosc=6MHz,若要求定時分別為0.1ms , 1ms , 10ms,定時器T0工作在方式0、方式1、方式2時,其初值應(yīng)為多少?晶振fosc=6MHz,則機器周期為2us定時0.1ms時的初始值: 50=110010 B模式0:(213-50)=(8192-50)=8142=1111 1110

2、0 1110 B TH0=#FEH0 ; TL0=#0EH 模式1:(216-50)=(65536-50)=65486=1111 1111 1100 1110 B TH0=#0FFH ;TL0=#0CEH 模式2:(28-50)=(256-50)=206=1100 1110 B TH0=#0CEH ; TL0=#0CEH定時1ms時的初始值: 500=111110100 B 模式0:(213-500)=(8192-500)=7692=1111 0000 0 1100 B TH0=#0F0H ; TL0=#0CH 模式1:(216-500)=(65536-500)=65036=1111 1110

3、 0000 1100 B TH0=#0FEH ; TL0=#0CH定時10ms時的初始值: 模式1:(216-5000)=(65536-5000)=60536=1110 1100 0111 1000 B TH0=#0ECH ; TL0=#78H3、假設(shè)單片機晶振fosc=6MHz,請利用T0和P1.0輸出矩形波,矩形波的高電平寬50us,低電平寬300us。(P.145 第13) 晶振fosc=6MHz機器周期為2us 定時器T0使之工作于模式3 定時50us的初值為:256-25=231 (E7H) 定時300US的初值為:256-150=106 (6AH)方法1: MOV TMOD , #

4、00000011B ;T0工作于模式3 MOV TCON ,#0 ;清TR0 , TF0 MOV TL0 , #0E7H ;高電平初值。 256-25 SETB P1.0 ;P1.0口輸出高電平 SETB TR0 ;啟動定時器T0LOOP1: JNB TF0 , LOOP1 ;檢測T0是否溢出 CLR TF0 ;清除溢出標(biāo)志 CLR TR0 ;關(guān)閉定時器 MOV TL0 , #6AH ;寫低電平初值 256-150 SETB TR0 ;啟動定時器T0 CLR P1.0 ;使P1.0輸出低電平LOOP2: JNB TF0 , LOOP2 ;檢測T0是否溢出 CLR TF0 ;清除溢出標(biāo)志 CLR

5、 TR0 ;關(guān)閉定時器 MOV TL0 , #0E7H ;寫高電平初值 256-25 SETB TR0 ;啟動定時器T0 SETB P1.0 ;使P1.0輸出高電平 SJMP LOOP1 ;重復(fù)方法2: MOV TMOD , #03H ; T0工作于模式3 MOV TCON , #0 ; 清TR0 , TF0 MOV TL0 , #0E7H ; 高電平初值。 256-25 SETB P1.0 ; P1.0口輸出高電平 SETB TR0 ; 啟動定時器T0 LOOP: JNB TF0 , LOOP ; 檢測T0是否溢出 CLR TF0 ; 清除溢出標(biāo)志 CLR TR0 ; 關(guān)閉定時器 JNB P

6、1.0 , NEXT ; P1.0口為低電平轉(zhuǎn)移,; 高電平順序執(zhí)行 MOV TL0 , #6AH ; 定時器T0寫入低電平的定時初值 SETB TR0 ; 啟動定時器T0 CLR P1.0 ; P1.0口輸出低電平 SJMP LOOP ; 返回重復(fù) NEXT: MOV TL0 , #0E7H ; 定時器T0寫入高電平的定時初值 SETB TR0 ; 啟動定時器T0 SETB P1.0 ; P1.0口輸出高電平 SJMP LOOP ; 返回重復(fù)4、假設(shè)單片機晶振fosc=12MHz,用T1定時,試編程由P1.0和P1.1引腳分別輸出周期為2ms和500us的方波。(P.145 第14題)晶振f

7、osc=6MHz機器周期為1us 定時器T0使之工作于模式1 定時250us的初值為:65536-250 = 65286 = 1111 1111 0000 0110 B = FF06 H方法一: MOV TMOD , #10H ; T1工作于模式1 MOV TCON , #0 ; TR1、TF1清零 MOV TH1 , #0FFH ; 65536-250=(FF06H) MOV TL1 , #05H ; MOV R7 , #4 ; 2ms是500us的4倍 SETB P1.0 ; P1.0置高電平 SETB P1.1 ; P1.1置高電平 SETB TR1 ; 啟動定時器T1LOOP: JNB

8、 TF1 , LOOP ; 定時器是否溢出? CLR TF1 ; 定時器溢出后,清除定時器溢出標(biāo)志 CPL P1.1 ; 取反P1.1 DJNZ R7 , NEXT ; 4倍關(guān)系是否滿足? MOV R7 , #4 ; 重寫4倍關(guān)系 CPL P1.0 ; 取反P1.0NEXT: CLR TR1 ; 關(guān)閉定時器T1 MOV TH1 , #0FFH ; 重寫定時器T1的初值 MOV TL1 , #06H ; SETB TR1 ; 啟動定時器T1 SJMP LOOP ; 返回重復(fù)方法二: MOV TMOD , #20H ; T1工作于模式2 MOV TCON , #0 ; TR1、TF1清零 MOV

9、TH1 , #6 ; 定時500us的初值(256-250)=6 MOV TL1 , #6 ; MOV R7 ,#4 ; 500us與2ms是4倍的關(guān)系 SETB P1.0 ; 將P1.0置高電平 SETB P1.1 ; 將P1.1置高電平 SETB TR1 ; 啟動定時器T1LOOP: JNB TF1 , LOOP ; 定時器T1是否溢出 CLR TF1 ; 清溢出標(biāo)志TF1 CPL P1.1 ; 取反P1.1口 DJNZ R7 ,LOOP ; (R7)-1(R7),(R7)是否為0 CPL P1.0 ; 取反P1.0口 MOV R7 , #4 ; 重寫R7 SJMP LOOP ; 返回重復(fù)

10、5、編寫程序,其功能為:當(dāng)P1.2引腳的電平上跳時,對P1.1輸入的脈沖進行記數(shù);當(dāng)P1.2引腳的的電平下跳時,停止記數(shù),并將結(jié)果存入R7R6中。(P.146 第17題)MOV TMOD , #05H ; 定時器T0工作于方式1,計數(shù)方式 MOV TCON , #0 ; 清除TF0、TR0。 MOV TH0 , #0 ; 定時器T0初始值清零 MOV TL0 , #0 ; LOOP1: JNB P1.2 , LOOP1 ; P1.2的電平是否上跳 SETB TR0 ; 啟動定時器T0開始計數(shù)LOOP2: JB P1.2 , LOOP2 ; P1.2的電平是否下跳 CLR TR0 ; 停止計數(shù)

11、MOV A , TL0 ; 將計數(shù)結(jié)果寫入R7、R6, MOV R6 , A ; R6寫入低8位 MOV A , TH0 ; MOV R7 , A ; R7寫入高8位6、設(shè)fosc=12MHz,編寫程序,其功能為:對T0進行初始化,使之工作于模式2,產(chǎn)生200us的定時,并用查詢T0溢出標(biāo)志TF0的方法,控制P1.0引腳輸出周期為2ms的方波。(P.146 第18題)MOV TMOD , #02H ; T0工作于模式2,定時方式 MOV TCON , #0 ; 清除TF0、TR0。 MOV TH0 , #56 ; (256-200)=56 MOV TL0 , #56 ; MOV R7 , #5

12、 ; 200us與1ms是5倍的關(guān)系 SETB TR0 ; 啟動定時器T0 SETB P1.0 ; 將P1.0置高電平LOOP: JNB TF0 , LOOP ; 檢測T0的溢出標(biāo)志 CLR TF0 ; 清除T0的溢出標(biāo)志 DJNZ R7 , LOOP ; 是否到5次 MOV R7 , #5 ; 重新寫入計數(shù)次數(shù) CPL P1.0 ; 取反P1.0口 SJMP LOOP ; 循環(huán)往復(fù)7、fosc=6MHz,用模式1編程實現(xiàn):以定時器T1進行外部事件計數(shù),每計數(shù)1000個脈沖后,定時器T1轉(zhuǎn)為定時工作方式,定時10ms后又轉(zhuǎn)為計數(shù)方式,如此循環(huán)不止。(P.145 第8題)MOV TCON , #

13、0 ; 清TF1、TR1START: MOV TMOD , #50H ; T1工作于模式1,計數(shù)方式 MOV TH1 , #0FCH ; (65536-1000)=FC18H MOV TL1 , #18H ; SETB TR1 ; 啟動T1,計數(shù)開始LOOP1: JNB TF1 , LOOP1 ; 檢測T1溢出標(biāo)志 CLR TF1 ; 清除T1溢出標(biāo)志 MOV TMOD , #10H ; T1工作于模式1,定時方式 CLR TR1 ; 關(guān)閉T1 MOV TH1 , #0ECH ; (65536-5000)=EC6EH MOV TL1 , #6EH ; SETB TR1 ; 啟動定時器T1LOO

14、P2: JNB TF1 , LOOP2 ; 檢測T1溢出標(biāo)志 CLR TF1 ; 清除T1溢出標(biāo)志 CLR TR1 ; 關(guān)閉T1 SJMP START ; 循環(huán)不止第5章參考作業(yè)及答案8、89C51單片機的P3.3口有1Hz的方波輸入,P3.5口有頻率介于1KHz5KHz的周期信號輸入,試?yán)枚〞r器T1的相關(guān)功能,編程計算該周期信號的頻率,并將其存于片外RAM2100H單元中。 MOV TMOD , #D0H ;T1:方式1、計數(shù)、開關(guān)由TR1和P3.3聯(lián)合控制 CLR TF1 ;清除溢出標(biāo)志 CLR TR1 ;關(guān)閉定時器MOV TH1 , #0 ;寫入計數(shù)初值 MOV Tl1 , #0 ;

15、LOOP1: JNB P3.3 , LOOP1 ;等待P3.3為高電平 SETB TR1 ;啟動定時器T1 LOOP2: JB P3.3 , LOOP2 ;等待計數(shù)結(jié)束 CLR TR1 ;關(guān)閉定時器T1 CLR C ;清除進位標(biāo)志 MOV A , TL1 ;讀取計數(shù)脈沖數(shù)的低8位 RLC A ;低8位×2 MOV DPTR , #2100H ;片外目的數(shù)據(jù)存儲器地址指針 MOVX DPTR , A ;低8位存入要求的目標(biāo)地址 INC DPTR ;目標(biāo)地址+1 MOV A ,TH1 ;讀取計數(shù)脈沖數(shù)的高8位 RLC A ;低8位×2 MOVX DPTR , A ;低8位存入要

16、求的目標(biāo)地址 方法二:利用中斷方式思路:P3.3引腳上輸入1Hz的方波,即每隔秒鐘中斷一次,利用中斷間隔測P3.5引腳的脈沖數(shù)。 ORG 0000H SJMP Main ;轉(zhuǎn)移到主程序 ORG 001BH AJMP T1 ;轉(zhuǎn)移到真正的中斷服務(wù)程序 ORG 0030H Main: MOV TMOD , #50H;定時器T1:方式、計數(shù)、開關(guān)由軟件控制 CLR TF1 ;清除定時器溢出標(biāo)志 CLR TR1 ;關(guān)閉定時器T1 MOV IE , #08H ;允許定時器T1中斷 MOV IP , #0 ;未設(shè)置中斷優(yōu)先級別 MOV TH1 , #0 ;計數(shù)初值 MOV TL1 , #0 ; CLR F

17、0 ;清除開始計數(shù)標(biāo)志 SETB EA ;開中斷 SJMP $ ;等待中斷T1: JB F0 , NEXT ;判斷是否開始計數(shù) SETB TR1 ;啟動計數(shù)器 SETB F0 ;計數(shù)標(biāo)志置 SJMP NEXT1 ;轉(zhuǎn)移 NEXT: CLR TR1 ;關(guān)閉計數(shù)器 CLR F0 ;計數(shù)標(biāo)志清 MOV DPTR , #2100H;地址指針指向目標(biāo)地址 MOV A , TL1;讀計數(shù)器的低位 MOVX DPTR , A;存計數(shù)器的低位 MOV A , TH1 ;讀計數(shù)器的高位 INC DPTR ;地址指針加 MOVX DPTR , A ;存計數(shù)器的高位 NEXT1: JNB P3.3 , NEXT1;

18、等待P3.3引腳上出現(xiàn)高電平 RETI ;中斷返回 9、當(dāng)系統(tǒng)選用6MHz晶體振蕩器時,由T0工作在方式為,利用中斷響應(yīng),產(chǎn)生周期為2ms(脈沖寬度為1ms)的方波序列,并由P1.0輸出。(1)寫出T0定時器的方式控制字,T0定時器初值計算。(2)試編寫程序完成此功能。思路: 方波的周期為2ms,每隔1ms對P1.0取反,可完成題目要求。系統(tǒng)晶體振蕩器的頻率為6MHz,機器周期為2us,定時器T0在方式2時,最大定時256us×2=512us,達不到1ms的要求,故將定時器T0的初始值選為:256-250=6(定時0.5ms),兩次后取反P1.0 口。(1)T0的初始值為: X=25

19、6-250=6 T0的控制字為: MOV TMOD , #20H MOV TCON , #0(2)參考程序如下: ORG 0000H SJMP Main ORG 000BH AJMP T0 ORG 0030HMain: MOV TMOD , #20H ;定時器T1工作于方式2 CLR TR0 ;關(guān)閉定時器T1 CLR TF0 ;清除定時器T1溢出標(biāo)志 MOV IE , #02H ;允許定時器T1中斷 MOV IP , #0 ;不設(shè)置悠閑級別 MOV TH0 , #6 ;定時器T1初值 MOV TL0 , #6 ;(256-250=6) MOV R7 , #2 ;定時0.5ms與1ms的2倍的關(guān)

20、系 SETB TR0 ;啟動定時器T1 SETB EA ;開中斷 SJMP $ T0: DJNZ R7 , NEXT ;兩次是否到?未到則中斷返回,到則繼續(xù) CPL P1.0 ;取反P1.0口 MOV R7 , #2 ;重置2倍的關(guān)系 NEXT: RETI ;中斷返回10、有一個頻率為10MHz的方波信號,要求用定時器對該方波信號計數(shù),每計滿100個脈沖,將P1.1腳上的電平取反。思路:利用定時器T0方式2對P3.2引腳上輸入的脈沖進行計數(shù),每計數(shù)100,取反P1.0口。定時器T0在方式2時的初始值為:X=256-100=156(9CH)采用對定時器T0的溢出標(biāo)志TF0掃描的方式編程。參考程序

21、如下: MOV TMOD , #06H ;定時器T0工作于方式2 CLR TR0 ;關(guān)閉定時器T0 CLR TF0 ;清除定時器T0的溢出標(biāo)志 MOV TH0 , #156 ;計數(shù)100的初值 MOV TL0 , #156 ;256-100=156 SETB TR0 ;啟動定時器T0 LOOP: JNB TF0 , LOOP ;等待溢出 CLR TF0 ;清除定時器T0的溢出標(biāo)志 CPL P1.0 ;取反P1.0口 SJMP LOOP ;重復(fù)循環(huán)11、(同第7題)按以下要求編寫8051單片機定時器的初始化程序:(1) T0作為定時,定時時間為10ms.(2) T1作為計數(shù),記滿1000溢出。(

22、1)設(shè)晶振fosc=12MHz,則T0在方式1時的初始值為X=65536-10000=55536 X=1101 1000 1111 0000 B = #D8F0H定時器T1在方式1時的初始值為:Y=65536-1000 1000=512+256+128+64+32+8=111111000 Y=1111 1110 0000 1000 B = FE08H(2) 初始化參考程序 MOV TMOD , #01010001B ; T0方式1(定時),T1方式1(計數(shù)) MOV TCON , #0 ;清TR0、TF0、TR1、TF1 MOV IE , #0AH ;允許T0、T1中斷 MOV IP , #0

23、 ;不設(shè)置優(yōu)先級 MOV TH0 , #D8H ;T0的初始值 MOV TL0 , #0F0H ;65536-10000=D8F0H MOV TH1 , #0FEH ;T1的初始值 MOV TL1 , #08H ;65536-1000=FE08H SETB TR0 ;啟動定時器T0 SETB TR1 ;啟動定時器T1SETB EA ;開中斷12、要求從P1.1引腳輸出1000Hz方波,晶振頻率為12MHz。試設(shè)計程序。思路:(1)只要使P1.1每隔500µs取反一次即可得到1ms方波;。(2)將T1設(shè)為定時方式0:GATE=0,C/T()=0,M1M0=00;T0不用可為任意,只要不

24、使其進入方式3,一般取0即可。故TMOD=00H。下面計算500µs定時T1的初值: 機器周期: T=1µs , 設(shè)初值為X則: =1111 0000 0 0110 B = F 0 0 C H 因為在作13位計數(shù)器用時,TL1高3位未用,應(yīng)寫0,X的低5位裝入TL1的低5位,所以TL1=#0CH;X的高8位應(yīng)裝入TH1,所以TH1=#F0H。參考源程序如下: MOV TCON , #0 ;清TF1、TR1 MOV TMOD , #0 ;定時器T1工作于方式0 MOV TH1 , #0F0H ;定時500us的初值 MOV TL1 , #0CH ;8192-500=7692=

25、F00CH SETB TR1 ;啟動定時器T1LOOP: JNB TF1 , LOOP ;等待定時500us的溢出 CLR TF1 ;清除溢出標(biāo)志 CPL P1.1 ;取反P1.1口 CLR TR1 ;關(guān)閉定時器T1 MOV TH1 , #0F0H ;重寫定時500us的初值 MOV TL1 , #0CH ;重寫定時500us的初值 SETB TR1 ;啟動定時器T1 SJMP LOOP13、試用定時/計數(shù)器T1對外部事件計數(shù)。要求每計數(shù)100,就將T1改成定時方式,控制P1.7輸出一個脈寬為10ms的正脈沖,然后又轉(zhuǎn)為計數(shù)方式,如此反復(fù)循環(huán)。設(shè)晶振頻率為12MHz。定時器T1確定工作于方式1

26、計數(shù)100的初始值為:65536-100100=64+32+4=01100100 B65536-100=1111 1111 1001 1100 B = FF9CH定時10ms的初始值為:65536-1000065536-5000=60536=1110 1100 0111 1000 B = EC78H參考程序如下: LOOP3: CLR TR1 ;關(guān)閉定時器T1 CLR TF1 ;清除定時器T1的溢出標(biāo)志 MOV TMOD 50H ;定時器T1工作于方式1,計數(shù) MOV TH1 , #0FFH ;計數(shù)100的初值 MOV TL1 , #9CH ;65536-100=FF9CH SETB TR1

27、;啟動定時器T1LOOP1: JNB TF1 , LOOP1 ;等待計數(shù)100溢出 MOV TMOD , #10H ;定時器T1工作于方式1,定時 CLR TF1 ;清除定時器溢出標(biāo)志 CLR TR1 ;關(guān)閉定時器T1 MOV TH1 , #0ECH ;定時10ms的初值 MOV TL1 , #78H ;65536-5000=EC78H SETB TR1 ;啟動定時器T1 LOOP2: JNB TF1 , LOOP2 ;等待定時10ms溢出 CPL P1.7 ;取反P1.7口 SJMP LOOP3 ;返回循環(huán)14、若單片機晶振為12MHz,利用定時器1方式1,產(chǎn)生1ms的定時,在P1.0腳產(chǎn)生周期為2ms方波,用查詢方式工作,查詢標(biāo)志為TF1。已知fosc =12MHz1個機器周期為1us 1ms=1000us 初值=65536-1000=54536 64536轉(zhuǎn)換為二進制:1111 1100 0001 1000 T0的低8位:00011000 (18H) T0的高8位:11110000 (FCH) 則有: (TL0) #18H ; (TH0)

溫馨提示

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

評論

0/150

提交評論