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