




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第6章 定時器/計數(shù)器 (課時:8學時)第1頁,共62頁。教學目的 了解定時器/計數(shù)器的結(jié)構與工作原理。掌握定時器/計數(shù)器的四種工作方式的特點及應用。用定時器/計數(shù)器設計一個可產(chǎn)生一定頻率方波的信號源。用定時器/計數(shù)器設計一個脈沖寬度調(diào)制(PWM)信號以控制直流電動機轉(zhuǎn)速。用定時器/計數(shù)器設計一個用于流水生產(chǎn)線上的產(chǎn)品自動計數(shù)器。用定時器/計數(shù)器設計一個測量電平脈沖寬度的程序。用定時器/計數(shù)器設計一個電子音樂程序。用定時器/計數(shù)器設計一個電子音樂程序。 學習重點和難點 定時器/計數(shù)器的初始化。定時器/計數(shù)器與中斷的綜合應用。 第2頁,共62頁。第6章 定時器/計數(shù)器6.1 定時器/計數(shù)器的結(jié)構
2、與原理 6.2 定時器/計數(shù)器的控制 6.3 定時器/計數(shù)器的四種工作方式及應用 本章小結(jié)習題 第3頁,共62頁。6.1 定時器/計數(shù)器的 結(jié)構與原理 6.1.1 定時器/計數(shù)器的結(jié)構 6.1.2 定時器/計數(shù)器的原理 6.1.3 定時器/計數(shù)器的功能 第4頁,共62頁。6.1.1 定時器/計數(shù)器的結(jié)構8051單片機內(nèi)部設有兩個16位可編程定時器/計數(shù)器,簡稱為定時器0(T0)和定時器1(T1)。16位的定時器/計數(shù)器分別由兩個8位寄存器組成,即:T0由TH0和TL0構成,T1由TH1和TL1構成。每個寄存器均可單獨訪問,這些寄存器是用于存放定時初值或計數(shù)初值的。有一個8位的定時器方式寄存器T
3、MOD和一個8位的定時器控制寄存器TCON。這些寄存器之間是通過內(nèi)部總線和控制邏輯電路連接起來的,定時器/計數(shù)器的工作方式、定時時間和啟??刂仆ㄟ^由指令來確定這些寄存器的狀態(tài)來實現(xiàn)。TMOD主要用于設定定時器的工作方式,TCON主要用于控制定時器的啟動與停止,并保存T0、T1的溢出和中斷標志。第5頁,共62頁。6.1.1 定時器/計數(shù)器的結(jié)構 定時器/計數(shù)器結(jié)構框圖 第6頁,共62頁。6.1.2 定時器/計數(shù)器的原理 16位的定時器/計數(shù)器實質(zhì)上是一個加l計數(shù)器,可實現(xiàn)定時和計數(shù)兩種功能,其功能由軟件控制和切換。定時器屬硬件定時和計數(shù),是單片機中效率高而且工作靈活的部件。 在定時器/計數(shù)器開始
4、工作之前,CPU必須將一些命令(稱為控制字)寫入定時器/計數(shù)器。將控制字寫入定時器/計數(shù)器的過程叫定時器/計數(shù)器的初始化。在初始化程序中,要將工作方式控制字寫入定時器方式寄存器(TMOD),工作狀態(tài)控制字(或相關位)寫入定時器控制寄存器(TCON),賦定時/計數(shù)初值給TH0(TH1)和TL0(TL1)。 第7頁,共62頁。6.1.2 定時器/計數(shù)器的原理定時器/計數(shù)器的定時功能。計數(shù)器的加1信號由振蕩器的12分頻信號產(chǎn)生,即每過一個機器周期,計數(shù)器加1,直至計滿溢出。定時器的定時時間與系統(tǒng)的時鐘頻率有關。因一個機器周期等于12個時鐘周期,所以計數(shù)頻率應為系統(tǒng)時鐘頻率的十二分之一。如果晶振頻率為
5、12MHz,則機器周期為1s。通過改變定時器的定時初值,并適當選擇定時器的長度(8位、13位或16位),可以調(diào)整定時時間。 第8頁,共62頁。6.1.2 定時器/計數(shù)器的原理定時器/計數(shù)器的計數(shù)功能。通過外部計數(shù)輸入引腳T0(P3.4)和T1(P3.5)對外部信號計數(shù),外部脈沖的下降沿將觸發(fā)計數(shù)。計數(shù)器在每個機器周期的S5P2期間采樣引腳輸入電平,若一個機器周期S5P2期間采樣值為1,下一個機器周期S5P2期間采樣值為0,則計數(shù)器加1,再下一個機器周期S3P1期間,新的計數(shù)值裝入計數(shù)器。因檢測一個由1至0的跳變需要兩個機器周期,故外部信號的最高計數(shù)頻率為時鐘頻率的二十四分之一。如果晶振頻率為1
6、2MHz,則最高計數(shù)頻率為0.5MHz。雖然對外部輸入信號的占空比無特殊要求,但為了確保給定電平在變化前至少被采樣一次,外部計數(shù)脈沖的高電平與低電平保持時間均需在一個機器周期以上。 第9頁,共62頁。6.1.3 定時器/計數(shù)器的功能 定時器/計數(shù)器具有定時和計數(shù)兩種功能,應用范圍如下。1. 定時與延時控制方面 可產(chǎn)生定時中斷信號,以設計出各種不同頻率的信號源;產(chǎn)生定時掃描信號,對鍵盤進行掃描以獲得控制信號,對顯示器進行掃描以不間斷地顯示數(shù)據(jù)。2. 測量外部脈沖方面 對外部脈沖信號進行計數(shù)可測量脈沖信號的寬度、周期,也可實現(xiàn)自動計數(shù)。3. 監(jiān)控系統(tǒng)工作方面 對系統(tǒng)進行定時掃描,當系統(tǒng)工作異常時,
7、使系統(tǒng)自動復位,重新啟動以恢復正常工作。第10頁,共62頁。6.2 定時器/計數(shù)器的控制 6.2.1 定時器方式寄存器TMOD 6.2.2 定時器控制寄存器TCON第11頁,共62頁。6.2.1 定時器方式寄存器TMOD 定時器方式寄存器TMOD的作用是設置T0、T1的工作方式。 TMOD的格式:各位的功能說明:(1) GATE:門控位。GATE=0:軟件啟動定時器,即用指令使TCON中的TR1(TR0)置1即可啟動定時器1(定時器0)。GATE=1:軟件和硬件共同啟動定時器,即用指令使TCON中的TR1(TR0)置1時,只有外部中斷INT0(INT1)引腳輸入高電平時才能啟動定時器1(定時器
8、0)。 第12頁,共62頁。6.2.1 定時器方式寄存器TMOD(2) C/T:功能選擇位。C/T=0時,以定時器方式工作。C/T=1時,以計數(shù)器方式工作。(3) M1、M0:方式選擇位。 定時器工作方式選擇位定義 M1 M0工作方式功能描述0 0方式013位計數(shù)器0 1方式116位計數(shù)器1 0方式2自動重裝初值8位計數(shù)器1 1方式3定時器0:分為兩個獨立的8位計數(shù)器定時器1:無中斷的計數(shù)器第13頁,共62頁。6.2.2 定時器控制寄存器TCON 定時器控制寄存器TCON的作用是控制定時器的啟動與停止,并保存T0、T1的溢出和中斷標志。 TCON的格式:各位的功能說明:(1) TF1(TCON
9、.7):定時器1溢出標志位。當定時器1計滿溢出時,由硬件自動使TF1置1,并申請中斷。對該標志位有兩種處理方法,一種是以中斷方式工作,即TF1置1并申請中斷,響應中斷后,執(zhí)行中斷服務程序,并由硬件自動使TF1清0;另一種以查詢方式工作,即通過查詢該位是否為1來判斷是否溢出,TF1置1后必須用軟件使TF1清0。 第14頁,共62頁。6.2.2 定時器控制寄存器TCON 各位的功能說明:(2) TR1(TCON.6):定時器1啟??刂莆?。GATE=0時,用軟件使TR1置1即啟動定時器1,若用軟件使TR1清0則停止定時器1。GATE=1時,用軟件使TR1置1的同時外部中斷INT1的引腳輸入高電平才能
10、啟動定時器1。(3) TF0(TCON.5):定時器0溢出標志位。其功能同TF1。(4) TR0(TCON.4):定時器0啟停控制位。其功能同TR1。(5) IE1(TCON.3):外部中斷1請求標志位。(6) IT1(TCON.2):外部中斷1觸發(fā)方式選擇位。(7) IE0(TCON.1):外部中斷0請求標志位。(8) IT0(TCON.0):外部中斷0觸發(fā)方式選擇位。 第15頁,共62頁。6.3 定時器/計數(shù)器的四種 工作方式及應用 6.3.1 定時器/計數(shù)器的初始化 6.3.2 方式0及應用實例 6.3.3 方式1及應用實例 6.3.4 方式2及應用實例 6.3.5 方式3 第16頁,共
11、62頁。6.3.1 定時器/計數(shù)器的初始化1. 定時器/計數(shù)器的初始化步驟 定時器/計數(shù)器是一種可編程部件,在使用定時器/計數(shù)器前,一般都要對其進行初始化,以確定其以特定的功能工作。初始化的步驟如下。(1) 確定定時器/計數(shù)器的工作方式,確定方式控制字,并寫入TMOD。(2) 預置定時初值或計數(shù)初值,根據(jù)定時時間或計數(shù)次數(shù),計算定時初值或計數(shù)初值,并寫入TH0、TL0或TH1、TL1。(3) 根據(jù)需要開放定時器/計數(shù)器的中斷,給IE中的相關位賦值。(4) 啟動定時器/計數(shù)器,給TCON中的TR1或TR0置1。 第17頁,共62頁。6.3.1 定時器/計數(shù)器的初始化2. 定時初值或計數(shù)初值的計算
12、方法 不同工作方式的定時初值或計數(shù)初值的計算方法如下表所示。表中T 表示定時時間,T機表示機器周期。 工作方式計數(shù)位數(shù)最大計數(shù)值最大定時時間定時初值計算公式計數(shù)初值計算公式方式013213=8192213T機X=213-T/T機X=213-計數(shù)值方式116216=65536216T機X=216-T/T機X=216-計數(shù)值方式2828=25628T機X=28-T/T機X=28-計數(shù)值第18頁,共62頁。6.3.1 定時器/計數(shù)器的初始化【例1】 用定時器0方式0,定時5ms,以中斷方式工作,進行程序初始化設計,晶振頻率為6MHz。解:用定時器0方式0時,定時器/計數(shù)器方式寄存器TMOD低4位中的
13、M1M0應取00;可設定為軟件啟動定時器,故GATE取0;因用定時功能,C/T取0;定時器方式寄存器TMOD高4位為無關位,一般都取0,所以TMOD應為00H。 晶振頻率為6MHz,T機=12/fosc=12/(6106)=2s 定時初值X=213-T/T機=213-5103/2=8192-2500=5692 =163CH=1011000111100B 因TL0的高3位未用,對計算出的定時初值X要進行修正,即在低5位前插入3個0,修正后的定時初值 X=1011000100011100B=B11CH第19頁,共62頁。6.3.1 定時器/計數(shù)器的初始化 定時器以中斷方式工作,故將中斷總允許位EA
14、和定時器0的中斷允許位ET0置1。 參考程序: 75 89 00MOV TMOD,#00H;置定時器0為工作方式075 8C B1MOV TH0,#0B1H;定時初值的高8位75 8A 1CMOV TL0,#1CH;定時初值的低8位D2 AFSETB EA;開放中斷總允許位D2 A9SETB ET0;開放定時器0的中斷允許位D2 8CSETB TR0;啟動定時器0第20頁,共62頁。6.3.2 方式0及應用實例 在方式0下,以定時器0為例,定時器/計數(shù)器是一個由TH0中的8位和TL0中的低5位組成的13位加1計數(shù)器(TL0中的高3位不用);若TL0中的第5位有進位,直接進到TH0中的最低位。定
15、時器/計數(shù)器0方式0邏輯結(jié)構如下圖所示。當門控位GATE=0時,或門輸出始終為1,與門被打開,與門的輸出電平始終與TR0的電平一致,實現(xiàn)由TR0控制定時器/計數(shù)器的啟動和停止。若軟件使TR0置1,接通控制開關,啟動定時器0,13位加1計數(shù)器在定時初值或計數(shù)初值的基礎上進行加1計數(shù);溢出時,13位加1計數(shù)器為0,TF0由硬件自動置1,并申請中斷,同時13位加1計數(shù)器繼續(xù)從0開始計數(shù)。若軟件使TR0清0,關斷控制開關,停止定時器0,加1計數(shù)器停止計數(shù)。 第21頁,共62頁。6.3.2 方式0及應用實例定時器/計數(shù)器0方式0邏輯結(jié)構 C/TC/T第22頁,共62頁。6.3.2 方式0及應用實例【例2
16、】 在P1.0輸出周期為1 ms(頻率1kHz)的方波,采用定時器1方式0設計程序,晶振頻率為12MHz。解:根據(jù)題意,只要使P1.0每隔500s取反一次即可得到周期1 ms的方波,因而T1的定時時間為500s。 用定時器1方式0時,定時器/計數(shù)器方式寄存器TMOD高4位中的M1M0應取00;可設定為軟件啟動定時器,故GATE取0;因為用定時功能,C/T取0;定時器方式寄存器TMOD低4位為無關位,一般都取0,所以TMOD應為00H。 晶振頻率為12MHz,T機=12/fosc=12/(12106)=1s 定時初值 X=213-T/T機=213-500/1=8192-500=7692 =1E0
17、CH=1111000001100B 因TL1的高3位未用,對計算出的定時初值X要進行修正,即在低5位前插入3個0,修正后的定時初值 X=1111000000001100B=F00CH 第23頁,共62頁。6.3.2 方式0及應用實例地址機器碼程序注釋 ORG 0000H0000H02 00 50 LJMP MAIN ORG 0050H0050HD2 90MAIN: SETB P1.0;置P1.0初始狀態(tài)0052H75 89 00 MOV TMOD,#00H;置定時器1為工作方式00055H75 8D F1 MOV TH1,#0F0H;置500s定時初值0058H75 8B 0C MOV TL1
18、,#0CH005BHD2 8E SETB TR1;啟動定時器1005DH10 8F 02 LP1: JBC TF1,LP2;查詢計數(shù)溢出0060H80 FB SJMP LP1;未到500s繼續(xù)計數(shù)0062H75 8D F1 LP2: MOV TH1,#0F0H;重新置500s定時初值0065H75 8B 0C MOV TL1,#0CH0068HB2 90 CPL P1.0;輸出取反006AH80 E4 SJMP LP1;重復循環(huán) END參考程序:第24頁,共62頁。6.3.2 方式0及應用實例【例3】 P1口做輸出口,控制八只燈(P1口輸出低電平時燈被點亮),同一時間只有兩盞燈點亮,按一定的規(guī)
19、律每隔1秒循環(huán)點亮下一盞燈;采用定時器0方式0設計延時子程序,定時時間為5ms,晶振頻率為6MHz。解:延時子程序要求延時1s,又規(guī)定定時時間5ms,可在硬件定時的基礎上再加軟件計數(shù)來實現(xiàn)1s的延時;5ms定時初值的計算參見例1,軟件計數(shù)值為200。 用定時器0方式0時,定時器/計數(shù)器方式寄存器TMOD低4位中的M1M0應取00;可設定為軟件啟動定時器,故GATE取0;因用定時功能,C/T取0;定時器方式寄存器TMOD高4位為無關位,一般都取0;所以TMOD應為00H。 設定時器0的溢出標志位以查詢方式工作。 第25頁,共62頁。主程序: ORG 0000H0000H21 50 AJMP MA
20、IN ORG 0150H0150H7A 06 MAIN: MOV R2,#06H0152H74 FC MOV A,#0FCH;燈點亮的初始狀態(tài)0154HF5 90 NEXT: MOV P1,A0156H51 00 ACALL DELAY0158H23 RL A;點亮左邊一盞燈0159HDA F9 DJNZ R2,NEXT015BH7A 06 MOV R2,#06H015DHF5 90 NEXT1: MOV P1,A015FH03 RR A;點亮右邊一盞燈0160H51 00 ACALL DELAY0162HDA F9 DJNZ R2,NEXT10164H80 EA SJMP MAIN第26頁,
21、共62頁。延時子程序: ORG 0200H0200H79 C8 DELAY: MOV R1,#200;置5ms計數(shù)循環(huán)初值0202H75 89 00 MOV TMOD,#00H;置定時器0為工作方式00205H75 8C B1 MOV TH0,#0B1H;置5ms定時初值0208H75 8A 1C MOV TL0,#1CH020BHD2 8C SETB TR0;啟動定時器1020DH10 8D 02 LP1: JBC TF0,LP2;查詢計數(shù)溢出0210H80 FB SJMP LP1;未到5ms繼續(xù)計數(shù)0212H75 8C B1 LP2: MOV THO,#0B1H;重新置5ms定時初值021
22、5H75 8A 1C MOV TL0,#1CH0218HD9 F3 DJNZ R1,LP1;未到1s繼續(xù)循環(huán)021AH22 RET;返回主程序 END第27頁,共62頁。6.3.2 方式0及應用實例【例4】 每隔1秒使P1.1輸出取反一次同時使片內(nèi)RAM區(qū)20H單元中的內(nèi)容加1,采用定時器0方式0設計程序,晶振頻率6MHz。解:根據(jù)題意,定時時間為1s,因方式0最大計數(shù)值為8192,機器周期為2s,則方式0的最大定時時間為16.384ms;顯然不能滿足本題的定時時間要求,因而需另設軟件計數(shù)器,即在硬件定時的基礎上再加軟件計數(shù)。 設硬件定時時間10 ms,軟件計數(shù)的次數(shù)則為100次。 定時初值
23、X=213-T/T機=213-10103/2=8192-5000 =3192=0C78H=0110001111000B 因TL0的高3位未用,對計算出的定時初值X要進行修正,即在低5位前插入3個0,修正后的定時初值 X=0110001100011000B=6318H 定時器以中斷方式工作。 第28頁,共62頁。主程序: ORG 0000H0000H02 00 50 LJMP MAIN ORG 000BH;定時器0的中斷入口地址000BH02 02 00 LJMP SER0;指向中斷服務程序 ORG 0030H0030HD2 90MAIN: SETB P1.1;置P1.1初始狀態(tài)0032H75
24、20 00 MOV 20H,#00H;20H單元清00035H78 64 MOV R0,#64H;軟件計數(shù)100次0037H75 89 00 MOV TMOD,#00H;置定時器0為工作方式0003AH75 8C 63 MOV TH0,#63H;置10ms定時初值003DH75 8A 18 MOV TL0,#18H0040HD2 AF SETB EA0042HD2 A9 SETB ET00044HD2 8C SETB TR00046H80 FESJMP $參考程序:第29頁,共62頁。中斷服務程序: ORG 0000H0000H02 00 50 LJMP MAIN ORG 0100H0100H
25、75 8C 63 SER0:MOV TH0,#63H;重新置10ms定時初值0103H75 8A 18 MOV TL0,#18H0106HD8 04 DJNZ R0,EXIT;未到1s繼續(xù)計數(shù)0108HB2 91 CPL P1.1010AH05 20 INC R0010CH32 EXIT: RETI END參考程序:第30頁,共62頁。6.3.3 方式1及應用實例 在方式1下,以定時器0為例,定時器/計數(shù)器是一個由TH0中的8位和TL0中的8位組成的16位加1計數(shù)器。方式1與方式0基本相似,最大的區(qū)別是方式1的加1計數(shù)器位數(shù)是16位。 定時器/計數(shù)器0方式1邏輯結(jié)構 C/TC/T第31頁,共6
26、2頁。6.3.3 方式1及應用實例【例5】 利用定時器1測量高電平脈沖的寬度,采用定時器1方式1設計程序,晶振頻率6MHz。解: 根據(jù)題意,用定時器1方式1時,被測高電平脈沖從外部中斷INT1(P3.3)引腳輸入,門控位GATE取1,即由軟件和硬件共同啟動定時器;被測脈沖為高電平時,啟動定時器1,開始計數(shù);被測脈沖變?yōu)榈碗娖綍r,停止定時器1,停止計數(shù),計數(shù)值分別存放到片內(nèi)RAM區(qū)40H、41H、42H單元中;計數(shù)值與機器周期的乘積就是所測脈沖的寬度。 用定時器1方式1時,定時器/計數(shù)器方式寄存器TMOD 高4位中的M1M0應取01,GATE取1;因為用定時功能,C/T取0;定時器方式寄存器TM
27、OD低4位取0,所以TMOD應為90H。 定時初值為00H。 定時器以查詢方式工作。 第32頁,共62頁。 ORG 0000H0000H02 00 50 LJMP MAIN ORG 0050H0050H75 40 00 MAIN: MOV 40H,#00H;數(shù)據(jù)存儲單元清00053H75 41 00 MOV 41H,#00H0056H75 42 00 MOV 42H,#00H0059H75 89 90 MOV TMOD,#90H;置定時器1為工作方式1005CH75 8D 00 MOV TH1,#00H;定時初值清0005FH75 8B 00 MOV TL1,#00H0062H20 B3 FD
28、 JB P3.3,$;查詢低電平0065HD2 8E SETB TR1;準備啟動定時器1 0067H30 B3 FD JNB P3.3,$;高電平到,啟動定時器1參考程序:第33頁,共62頁。006AH10 8F 05 LP1: JBC TF1,LP2006DH20 B3 FA JB P3.3, LP1;低電平到,停止定時器10070H80 04 SJMP LP30072H05 40 LP2: INC 40H;存儲區(qū)最高位加10074H80 F4 SJMP LP10076HC2 8E LP3: CLR TR1;停止定時器10078H85 8D 41 MOV 41H,TH1;計數(shù)值高8位放入存儲
29、區(qū)007BH85 8B 42 MOV 42H,TL1;計數(shù)值低8位放入存儲區(qū)007EH12 01 00 LCALL DIS;調(diào)用顯示子程序0081H80 DD SJMP MAIN;重復循環(huán) ORG 0100H DIS: (略);顯示子程序 END參考程序:第34頁,共62頁。6.3.3 方式1及應用實例【例6】 P1.0口做輸出口,接一只喇叭,利用定時器中斷方式編寫程序,使喇叭放出悅耳的音樂。晶振頻率6MHz。解:音樂是由高低長短相同或不同的音符,按一定的規(guī)律組織起來的。每個音符都包括兩個要素:第一是音調(diào),即音符的頻率,頻率越高音調(diào)越高,頻率越低音調(diào)越低;第二是節(jié)拍,即音符的時間長短。 利用定
30、時器/計數(shù)器可以產(chǎn)生不同頻率的音頻脈沖,也可以控制音頻脈沖的延時時間。不同的音符對應的頻率不同,用定時器T1方式1可以產(chǎn)生與各音符對應頻率的方波,C調(diào)各音符頻率與定時器定時初值對應關系如下表所示;不同的節(jié)拍對應的延時時間不同,通過循環(huán)調(diào)用一個基本延時子程序可以產(chǎn)生不同的節(jié)拍,各曲調(diào)與節(jié)拍的時間對應關系如下表所示。 第35頁,共62頁。C調(diào)各音符頻率與定時器定時初值對照表 曲調(diào)4/43/42/41/4拍時間(ms)1251872501/8拍時間(ms)6294125曲調(diào)與節(jié)拍的時間對照表 第36頁,共62頁。 (1) 根據(jù)歌譜編制唱名與唱名碼的對照表。 把歌譜中所有的不同音符的頻率相對應的定時器
31、定時初值進行編碼,稱為唱名碼,唱名與唱名碼對照表如下表所示。 生日快樂歌歌譜如下:1=C 3/4唱名與唱名碼對照表 第37頁,共62頁。 (2) 編制節(jié)拍與節(jié)拍碼對照表。 根據(jù)曲調(diào)和歌譜要求,確定最小節(jié)拍數(shù)為1/4拍,基本延時子程序延時時間為187 ms;對不同節(jié)拍對應的循環(huán)次數(shù)進行編碼,稱為節(jié)拍碼,節(jié)拍與節(jié)拍碼對照表如下表所示。 節(jié)拍與節(jié)拍碼對照表 節(jié)拍數(shù)1/4拍1/2拍3/4拍1拍1 1/4拍1 1/2拍2拍2 1/2拍3拍節(jié)拍碼12345689C第38頁,共62頁。 (3) 編制簡譜碼表。 歌譜中每個音符中與頻率和延時有關的參數(shù)可用一個字節(jié)來表述,稱為簡譜碼,字節(jié)的高4位存放與音符的頻率
32、相對應的唱名碼,字節(jié)的低4位存放與音符的節(jié)拍相對應的節(jié)拍碼。根據(jù)歌譜,編制每個音符的簡譜碼,并編成簡譜碼表。 歌譜中每個音符的簡譜碼可做成表格存放到程序存儲器中,唱名碼、節(jié)拍碼也可做成表格存放到程序存儲器中。編寫程序通過查表從表格中得到簡譜碼,從簡譜碼中分解出唱名碼和節(jié)拍碼,再通過查表從表格中得到唱名碼和節(jié)拍碼所包含的定時初值和循環(huán)次數(shù)。 第39頁,共62頁。參考程序:主程序 ORG 0000H0000H02 00 30 LJMP MAIN ORG 001BH001BH02 01 50 LJMP INT1 ORG 0030H0030H75 81 30 MAIN:MOV SP,#30H0033H
33、75 89 10 MOV TMOD, #10H;設T1工作方式10036H75 A8 88 MOV IE, #88H;允許中斷0039H75 40 00 LOOP1:MOV 40H, #00H;簡譜碼指針清0003CHE5 40 LOOP2:MOV A, 40H;簡譜碼指針放入A003EH90 02 00 MOV DPTR, #TABLE10041H93 MOVC A,A+DPTR;到表格TABLE1中取簡譜碼0042HF9 MOV R1, A;取到的簡譜碼暫存于R10043H60 2B JZ FINISH;簡譜碼是00H(結(jié)束碼),轉(zhuǎn)移0045H54 0F ANL A, #0FH;不是00H
34、,取低4位(節(jié)拍碼)0047HFA MOV R2, A;將節(jié)拍碼存入R2中0048HE9 MOV A, R1;將取到的簡譜碼再放入A0049HC4 SWAP A;高低4位交換004AH54 0F ANL A, #0FH;取低4位(唱名碼)004CH70 04 JNZ SING;唱名碼不是00H,轉(zhuǎn)移004EHC2 8E CLR TR1;唱名碼是00H,則不發(fā)音0050H80 17 SJMP WY;轉(zhuǎn)移至WY第40頁,共62頁。參考程序:主程序0052H14 SING:DEC A;唱名碼減10053HF5 50 MOV 50H,A;唱名碼存入50H0055H23 RL A;乘20056H90 0
35、2 50 MOV DPTR, #TABLE20059H93 MOVC A,A+DPTR;到表格TABLE2取計數(shù)值高8位005AHF5 8D MOV TH1, A;計數(shù)值高8位存入TH1005CHF5 51 MOV 51H, A;計數(shù)值高8位存入51H005EHE5 50 MOV A, 50H;將取到的唱名碼再放入A0060H23 RL A;乘20061H04 INC A;唱名碼加10062H93 MOVC A,A+DPTR;到表格TABLE2取計數(shù)值低8位0063HF5 8B MOV TL1, A;計數(shù)值低8位存入TL10065HF5 52 MOV 52H, A;計數(shù)值低8位存入52H006
36、7HD2 8E SETB TR1;啟動T10069H12 01 00 WY: LCALL DELAY;調(diào)用基本單位時間(1/4拍)006CH05 40 INC 40H;簡譜碼指針加1006EH80 CC SJMP LOOP2;取下一個簡譜碼0070HC2 8EFINISH: CLR TR1;停止T10072H80 C5 SJMP LOOP1;重復播放第41頁,共62頁。參考程序:延時子程序 ORG 0100H;基本單位時間子程序(1/4拍)0100H7C C8 DELAY: MOV R4,#200;延時187ms的循環(huán)次數(shù)0102H7D E9 LP1: MOV R5,#232;延時0.935m
37、s的循環(huán)次數(shù)0104HDD FE DJNZ R5,$0106HDC FA DJNZ R4,LP10108HDA F6 DJNZ R2,DELAY;節(jié)拍數(shù)未到,轉(zhuǎn)移010AH22 RET ORG 0150H0150HC0 E0 INT1: PUSH ACC;將A的值暫存于堆棧0152HC0 D0 PUSH PSW;將PSW的值暫存于堆棧0154H85 52 8B MOV TL1, 52H;重置定時器初值0157H85 51 8D MOV TH1, 51H015AHB2 90 CPL P1.0;將P1.0取反015CHD0 D0 POP PSW;至堆棧取回PSW值015EHD0 E0 POP AC
38、C;至堆棧取回A值0160H32 RETI;返回主程序第42頁,共62頁。參考程序:簡譜碼表 ORG 0200H0200H TABLE1:DB 82H,01H,81H,94H,84H;簡譜碼表0205H DB 0B4H,0A4H,04H0208H DB 82H,01H,81H,94H,84H020DH DB 0C4H,0B4H,04H0210H DB 82H,01H,81H,0F4H,0D4H0215H DB 0B4H,0A4H,94H0218H DB 0E2H,01H,0E1H,0D4H,0B4H021DH DB 0C4H,0B4H,04H0220H DB 82H,01H,81H,94H,8
39、4H0225H DB 0B4H,0A4H,04H0228H DB 82H,01H,81H,94H,84H022DH DB 0C4H,0B4H,04H0230H DB 82H,01H,81H,0F4H,0D4H0235H DB 0B4H,0A4H,94H0238H DB 0E2H,01H,0E1H,0D4H,0B4H023DH DB 0C4H,0B4H,04H0240H DB 00H第43頁,共62頁。參考程序:唱名碼表 ORG 0250H0250H TABLE2:DW FD82H,FDC8H,FE06H ;唱名碼表0256H DW FE22H,FE56H,FE85H025CH DW FE9AH
40、,FEB2H,FEE4H0262H DW FF03H,FF11H,FF2BH0268H DW FF42H,FF4DH,FF61H END;程序結(jié)束第44頁,共62頁。6.3.3 方式1及應用實例【例6】 P1.0口做輸出口,接一只喇叭,利用定時器中斷方式編寫程序,使喇叭放出悅耳的音樂。晶振頻率6MHz。解:音樂是由高低長短相同或不同的音符,按一定的規(guī)律組織起來的。每個音符都包括兩個要素:第一是音調(diào),即音符的頻率,頻率越高音調(diào)越高,頻率越低音調(diào)越低;第二是節(jié)拍,即音符的時間長短。 利用定時器/計數(shù)器可以產(chǎn)生不同頻率的音頻脈沖,也可以控制音頻脈沖的延時時間。不同的音符對應的頻率不同,用定時器T1方
41、式1可以產(chǎn)生與各音符對應頻率的方波,C調(diào)各音符頻率與定時器定時初值對應關系如下表所示;不同的節(jié)拍對應的延時時間不同,通過循環(huán)調(diào)用一個基本延時子程序可以產(chǎn)生不同的節(jié)拍,各曲調(diào)與節(jié)拍的時間對應關系如下表所示。 第45頁,共62頁。6.3.4 方式2及應用實例 在方式1下,以定時器0為例,定時器/計數(shù)器是一個能自動裝入初值的8位加1計數(shù)器,TH0中的8位用于存放定時初值或計數(shù)初值,TL0中的8位用于加1計數(shù)器。 方式2與方式0基本相似,最大的區(qū)別除方式2的加1計數(shù)器位數(shù)是8位外,加1計數(shù)器溢出后,硬件使TF0自動置1,同時自動將TH0中存放的定時初值或計數(shù)初值再裝入TL0,繼續(xù)計數(shù)。定時器/計數(shù)器0
42、方式2邏輯結(jié)構 C/TC/T第46頁,共62頁。6.3.4 方式2及應用實例【例7】 P1.1輸出脈沖寬度調(diào)制(PWM)信號,即脈沖頻率為1kHz、占空比為25的矩形波,以控制直流電動機按一定的速度轉(zhuǎn)動,晶振頻率為6MHz。解:直流電動機具有優(yōu)良的調(diào)速特性,調(diào)速方法也從模擬化逐步向數(shù)字化轉(zhuǎn)化,采用脈沖寬度調(diào)制(PWM)的方法可以實現(xiàn)平滑調(diào)速,電機轉(zhuǎn)速由脈沖的占空比決定。 頻率為1kHz,周期為1ms,占空比為2:5的P1.1輸出矩形波的波形如下圖所示。 對P1.1取反時,由于高、低電平的時間不同,可找出一個時間基準,如100s、200s。 本例設定時間基準200s,即定時時間為200s。 定時
43、初值 X=28-T/T機=28-200/2=256-100=156=9CH 高電平的軟件計數(shù)為2,低電平的軟件計數(shù)為3。 定時器以查詢方式工作。 第47頁,共62頁。6.3.4 方式2及應用實例 ORG 0000H0000H02 00 30 LJMP MAIN ORG 000BH;定時器0的中斷入口地址000BH02 00 50 LJMP INT0 ORG 0030H0030HD2 91MAIN:SETB P1.1;設置P1.1初始狀態(tài)0032H7A 02 MOV R2, #02H;給R2賦高電平計數(shù)值0034H75 89 02 MOV TMOD, #02H;定時器0工作方式20037H75
44、8C 9C MOV TH0, #9CH;置200s定時初值003AH75 8A 9C MOV TL0, #9CH003DHD2 AF SETB EA003FHD2 A9 SETB ET00041HD2 8C SETB TR00043H80 FE SJMP $;動態(tài)暫停主程序:第48頁,共62頁。6.3.4 方式2及應用實例 ORG 0050H0050HDA 0BINT0:DJNZ R2,EXIT0052HB2 91 CPL P1.1;P1.1取反0054H30 91 04 JNB P1.1,L1;判斷P1.1電平高低0057H7A 02 MOV R2, #02H;若P1.1=1,給R2賦高電平
45、計數(shù)值0059H80 02 SJMP EXIT005BH7A 04 L1:MOV R2, #03H;若P1.1=0,給R2賦低電平計數(shù)值005DH32EXIT:RETI END定時器0中斷服務程序:矩形波的波形圖第49頁,共62頁。6.3.4 方式2及應用實例【例8】 定時器0外部輸入端(P3.4) 作為計數(shù)脈沖輸入端,利用手控單脈沖信號作為計數(shù)輸入脈沖,編寫控制程序,每輸入十個脈沖,工作寄存器R0的內(nèi)容加一,晶振頻率為6MHz。解:用定時器0方式2時,定時器/計數(shù)器方式寄存器TMOD低4位中的M1M0應取10; 可設定為軟件啟動定時器,故GATE取0; 因用計數(shù)功能,C/T取1; 定時器方式
46、寄存器TMOD高4位為無關位,一般都取0,所以TMOD應為06H。 計數(shù)初值 X=28-計數(shù)值=28-10=256-0=246=F6H 定時器以中斷方式工作。 第50頁,共62頁。參考程序: ORG 0000H0000H02 00 50 LJMP MAIN ORG 000BH;定時器0的中斷入口地址000BH02 02 00 LJMP SER0;轉(zhuǎn)向中斷服務程序 ORG 0050H0050H78 00 MAIN: MOV R0,#00H0052H75 89 06 MOV TMOD,#06H;置計數(shù)器0為工作方式20055H75 8C F6 MOV TH0,#0F6H;置10次計數(shù)初值0058H
47、75 8A F6 MOV TL0,#0F6H005BHD2 AF SETB EA005DHD2 A9 SETB ET0005FHD2 8C SETB TR00061H80 FE SJMP $ ORG 0200H0200H08 SER0: INC R0;中斷服務程序0201H32 RETI END第51頁,共62頁。6.3.4 方式2及應用實例【例9】 利用定時器/計數(shù)器擴展一個外部中斷源,用手控單脈沖信號作為外部中斷信號,P1口控制八只燈(P1口輸出低電平時燈被點亮),同一時間只有一盞燈點亮,編寫控制程序,每發(fā)一個單脈沖信號,循環(huán)點亮下一盞燈。解:定時器/計數(shù)器0以計數(shù)功能工作,當計數(shù)初值為F
48、FH時,只要外部計數(shù)輸入引腳T0(P3.4)輸入一個計數(shù)脈沖,8位加1計數(shù)器TL0變?yōu)?0H,TF0由硬件自動置1,并申請中斷。利用這一特點,將外部中斷請求信號作為計數(shù)脈沖送入外部計數(shù)輸入引腳T0(P3.4),就可實現(xiàn)中斷功能。 定時器/計數(shù)器0以方式2工作。 第52頁,共62頁。參考程序: ORG 0000H0000H01 50 AJMP MAIN ORG 000BH;定時器0的中斷入口地址000BH21 00 AJMP INT;轉(zhuǎn)向中斷服務程序 ORG 0050H0050H75 89 06 MAIN: MOV TMOD,#06H;置計數(shù)器0為工作方式20053H75 8C FF MOV T
49、H0,#0FFH0056H75 8A FF MOV TL0,#0FFH0058HD2 AF SETB EA005AHD2 A9 SETB ET0005CHD2 8C SETB TR0005EH74 FE MOV A,#0FEH0060HF5 90 MOV P1,A0062H80 FE SJMP ORG 0100H0100H23 INT: RL A;中斷服務程序0101HF5 90 MOV P1,A0103H32 RETI END第53頁,共62頁。6.3.5 方式3 1. T0方式3的結(jié)構特點在方式3下,定時器0分為兩個獨立的8位加1計數(shù)器TH0和TL0。其中TL0既可用于定時,也能用于計數(shù);TH0只能用于定時。定時器/計數(shù)器0方式3邏輯結(jié)構如下圖所示。 在方式3下,加1計數(shù)器TL0占用了T0除TH0外的全部資源,原T0的控制位和信
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 司機雇傭勞務合同范本
- 化學助劑采購合同范本
- 丹廈店面租房合同范本
- 中央團校培訓心得體會
- 運城小學英語試卷
- 低壓電工試題庫含參考答案
- 會員服裝租賃合同范本
- 體現(xiàn)返利合同范本
- 中級電工考試模擬題(附參考答案)
- 烹飪原料知識模考試題含參考答案
- 自建房培訓課件甘肅
- 閩教版四年級下冊勞動教案
- 中小學必背飛花令詩詞-(春、月、風、花、山、江、人、日、動物、顏色、數(shù)字)
- 北師大版小學數(shù)學六年級下冊全冊一課一練課課練(含答案)
- 發(fā)揚體育精神展青春光彩
- 腳輪行走測試技術規(guī)范
- 頸部膿腫護理查房課件
- 跨境電子商務案例分析 習題及答案 易靜
- 信息技術與小學數(shù)學學科教學整合的
- 500格作文紙-(20x25)文檔
- 九年級中考物理-安培定則(右手螺旋定則)復習題匯總及解析
評論
0/150
提交評論