1 / 15

單元二

單元二. 電子琴. 8051 使喇叭發聲的方法. 要使喇叭發聲最簡單的方式就是送一個連續脈波給喇叭,然後喇叭上之線圈和磁鐵間的作用會使紙盆振動而發出聲音。. P3.7=0. 延遲 t 秒. P3.7=1. 延遲 t 秒. 8051 輸出方波產生. 方波是由相同時間長度的0和1不斷的變化所組成,而0和1的時間加起來就是方波的週期,因此只要改變0、1的時間就可得到各種不同頻率的方波 。. 8051 輸出方波頻率之計算. 下列為之前常用之延遲副程式之延遲計算:. DELAY: MOV I,#T1 ....1 個機械週期 D1:

tivona
Download Presentation

單元二

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 單元二 電子琴

  2. 8051使喇叭發聲的方法 要使喇叭發聲最簡單的方式就是送一個連續脈波給喇叭,然後喇叭上之線圈和磁鐵間的作用會使紙盆振動而發出聲音。

  3. P3.7=0 延遲t秒 P3.7=1 延遲t秒 8051輸出方波產生 方波是由相同時間長度的0和1不斷的變化所組成,而0和1的時間加起來就是方波的週期,因此只要改變0、1的時間就可得到各種不同頻率的方波 。

  4. 8051輸出方波頻率之計算 下列為之前常用之延遲副程式之延遲計算: DELAY: MOV I,#T1 ....1個機械週期 D1: MOV J,#T2 ....1個機械週期 DJNZ J,$ ....2個機械週期 DJNZ I,D1 ....2個機械週期 RET ....2個機械週期 T2×2 [(1+T2×2)+2] ×T1 內迴圈 外迴圈 總延遲= [(1+T2×2)+2] ×T1 +1 +2 2×T1×T2+3×T1+3 單位:機械週期 =

  5. 8051的機械週期 CPU內振盪電路會產生執行程式時所需的狀態序列,而每一個狀態序列時由2個振盪週期組成,而執行指令所需的每一個機械週期則是由6個狀態序列所組成(即12個振盪週期),因此若所外接的石英振盪為12MHz,則每一個機械週期即為1/(12M/12)=1uSec。

  6. 1 1 t= = 0.5mSec = 500μSec × 2 1K 12 = 1μSec 機械週期= 12M 計算範例(一) 單晶片所使用的XTAL為12MHz,若想要產生一個1KHz的方波,其延遲設計過程如下: 步驟一、先算出1KHz方波的0和1的時間長度t: 步驟二、再算出一個機械週期之時間: 步驟三、決定延遲迴圈中T1及T2的值: 3T1+2T1T2+3= 500 最後假設T1=1,則T2為: 3+2T2=497 =>T2=247 =>3T1+2T1T2=497

  7. 計算範例(二) 利用前述之結果,可得下列程式: DELAY: MOV I,#1 D1: MOV J,#247 DJNZ J,$ DJNZ I,D1 RET

  8. 8051輸入電路之設計 若要將8051的PROT連接開關做為輸入使用,必需要先將連接開關的接腳用程式設為Hi,接著只要讀取到該接腳為Low時即代表開關有動作,電路連方式如下圖所示: 此點常態為「1」,當開關按下後因開關短路接地而變為「0」 將此接腳以SETB的命令設為「1」

  9. YES 位元=1 跳到指定位址 NO 位元判斷跳躍指令-JB 指令格式: JB 要判斷的位元, 要跳躍的位址(LABEL) 說明: 當所指定要判斷的位元為「1」時會跳躍到指定的程式位址(即LABEL),若為「0」則忽略此一程式,直接執行下一行。

  10. YES 位元=0 跳到指定位址 NO 位元判斷跳躍指令-JNB 指令格式: JNB 要判斷的位元, 要跳躍的位址(LABEL) 說明: 當所指定要判斷的位元為「0」時會跳躍到指定的程式位址(即LABEL),若為「1」則忽略此一程式,直接執行下一行。

  11. NO P1.0=0 YES 當開關動作時執行的程式段 判斷單一開關動作的方法 方法一: X: JB P1.0,X MOV R1,#1 MOV R2,#247   . . 方法二: X: JNB P1.0,Y AJMP X Y: MOV R1,#1 MOV R2,#247   .   .

  12. 判斷單多個開關動作的方法(一) X: JB P1.0,Y AJMP F1 Y: JB P1.1,Z AJMP F2 Z:   .   . AJMP X F1: MOV R1,#1   .   . AJMP X F2: MOV R1,#5   .   . AJMP X YES P1.0=0 功能一 NO YES 功能二 P1.1=0 NO YES 功能N P1.N=0 NO

  13. YES P1.0=0 功能一 NO YES 功能二 P1.1=0 NO YES 功能N P1.N=0 NO 判斷單多個開關動作的方法(二) X: JNB P1.0,F1 JNB P1.1,F2   .   . AJMP X F1: MOV R1,#1   .   . AJMP X F2: MOV R1,#5   .   . AJMP X 此種方式程式較為精簡,但因JNB及JB等指令其跳躍能力最大為256Bytes,若功能段程式過長可能會造成無法跳躍的錯誤

  14. 範例程式動作 I EQU 20H J EQU 21H ORG 0 START: MOVR0, #0H DJNZR0,$ MOVSP,#60H 基本設定 No P1.0=0 Yes AGAIN: JB P1.0,AGAIN R1=1 R2=247 MOV R1,#1 MOV R2,#247 P3.7=0 CLR P3.7 延遲 ACALL DELAY SETB P3.7 P3.7=1 ACALL DELAY 延遲 AJMP AGAIN

  15. END

More Related