110 likes | 244 Views
單元二. 基本 I/O 控制 --- 查表. 範例程式動作. P3. P1. P17. P16. P15. P14. P13. P12. P11. 範例程式動作分解說明. 顯示零時 Port 各接腳狀態及七段的對應關係. a. b. f. g. e. c. d. P16. P17. P15. P14. P13. P12. P11. P10. g. e. d. b. a. f. c. 因為共陰極七段,故 P1 的輸出為: 11000000b. 七段顯示0~ 3 時 P1 的值.
E N D
單元二 基本I/O控制---查表
範例程式動作 P3 P1 P17 P16 P15 P14 P13 P12 P11
範例程式動作分解說明 顯示零時Port各接腳狀態及七段的對應關係 a b f g e c d P16 P17 P15 P14 P13 P12 P11 P10 g e d b a f c 因為共陰極七段,故P1的輸出為:11000000b
七段顯示0~3時P1的值 表格中可看到各狀態間,其0和1的變化並無邏輯性可言;因此無法用旋轉等方法完成
從沒有邏輯性找邏輯 從前面的說明中,雖然七段顯示器顯示數字時PORT中的每個bit的狀態間沒有邏輯性,但是整體來看0~9間不斷循環的顯示,依舊是一個重覆的狀態. 因此若能將0~9的各段變化狀態建立一個表,顯示時只要依序去做查詢對照,依然可以完成有邏輯性的迴圈動作。
動作邏輯說明... . .
單晶片輸出狀態控制必殺技-查表 指令格式: MOVDPTR,#LABEL MOVCA,@A+DPTR 說明: 資料所在的記憶體位置(在程式記憶體中)指定給DPTR(資料指標暫存器,16位元,因此足以指向到64K的程式空間。 以MOVC指令告訴CPU是要到程式記憶體中提取資料,其位置為A+DPTR,因此DPTR可視為基底,而A代表偏移量。
查表實例 先將資料所在位址取出,並存入DPTR中 MOV DPTR,#TABLE MOV A,#2 MOVC A,@A+DPTR . . TABLE: DB 45H DB A7H DB 30H 將欲查資料的索引存入A中備用 令CPU到程式記憶體A+DPTR即2+TABLE的位址取資料,然後存入A中 →TABLE+0 →TABLE+1 →TABLE+2 因此最後A之內容為:30H
以七段顯示0~9 步驟一:將0~9的狀態碼先建立表格 步驟二:以迴圈的方式逐一讀取表格中資料然後丟到P1去驅動七段顯示器
範例程式動作 ORG 0 START: MOVR0, #0H DJNZR0,$ MOVSP,#60H 基本設定 DPTR指向資料區 0→R0 MOV DPTR,#FONT AGAIN: MOV R0,#0 R0→A X: MOV A,R0 MOV A,@A+DPTR 查表 MOV P1,A MOV P3,A A→P1、A→P3 ACALL DELAY 延遲 INC R0 CJNE R0,#10, X AJMP AGAIN R0=R0+1 NO YES R0=10