l
這是一個常用程序段—子程序—標準程序,通過端口掃描而獲得輸入數據或控制輸出數據,達到節省位或字節的目的—節約硬件資源。
關于掃描,可以從位及其取反實現流水燈著手來理解。可以通過移位實現流水燈—掃描。可以通過字節數據(01H,02H,04H,08H,10H,20H,40H,80H—陽極管)的端口發送實現流水燈—掃描。可以通過數據表(DB 01H,02H,04H,08H,10H,20H,40H,80H—陰極管)實現流水燈—掃描。可以通過循環跳轉實現流水燈—掃描。掃描注意入比出查—獲得輸入要比較數據、發送輸出要檢查出口
掃描獲取端口字節
掃描輸出位移動產生動態效果(01、02、04、08、10、20、40、80),可以用字節表
掃描輸出字符字節,通過延時可以變換字符以便造成數字進位效果
ORG 0000H
START:
dbuf equ 30h ;置存儲區首址
temp equ 40h ;置緩沖區首址
dp00: mov a,@r0 ;取要顯示的數據
disp0: mov r0,#temp ;顯示子程序
dp01: mov a,@r0
segtab: db 0C0H,0F9H,0A4H,0B0H,99H,92H ;共陽極管
delay: mov r4,#29h ;延時子程序
aa1: mov r5,0ffh
aa: djnz r5,aa
???????????????????????
************************************************************************
還可以用其他程序形式進行掃描,像循環、遞增或遞減判斷程序等。掃描技術可以用于點陣顯示,液晶板(LCD)顯示。這些都需要字符編碼、顯示延時、掃描端口以充分利用資源(節約資源)。
l 實例1—關于動態顯示—LED閃爍
ORG 0000H
RET
GUAN :
其他方法(如:延時子程序)也可以實現動態顯示。
ORG 0000H ;這是偽指令,機器并不執行,用于程序的交流。指令執行的起始地址,十進制用D表示,十六進制用H表示,二進制用B表示。一個字節(8位機、16位機、32位機、64位機)一次執行。也可以按位來執行,也就是一個bit。
ORG 00000000B與ORG 0000H作用相同。注意8位(bit)一個字節。16位的處理器需要用0000 0000H 表示。16或32位以上,使用操作系統(Wince、Linux等)更有效,可以利用大量的、底層的、專業化、標準化的面向控制的庫函數(如:API等)。
START: ;這是偽指令,機器并不執行。只是為了匯編語言講故事的可理解性
PC→MOV P1,A ;將累加器中的數(常數0D)傳送給端口P1(P1口8位全部置0,低電平, P1端口各位處于關閉狀態,LED燈處于系統響應的準備狀態),按字節傳送數據。特別記憶:PC→表示指針所指地址,并會自動加1。
PC→MOV C,0A0H ;檢測P2.0口的狀態,將P2.0口的狀態(由按鍵狀態決定)傳送給位累加器C,位累加器C的地址是PSW(程序狀態字寄存器)的進位標志位CY(D7H\PSW.7)。P2.0口可以是開或關,也就是置1或0,高電平或低電平),按字節傳送數據。要通過位累加器C和其它存儲地址進行數據交換。該語句也可以寫成:MOV C,P2.0,比較字節數據傳送MOV A,#00H或MOV A,P1。
PC→MOV P1.0,C;等價于MOV 90H,C;將位累加器C地址中的值傳送給P1.0口(90H是其直接地址),也就是將P2.0口的狀態(由直接地址0A0H狀態決定)傳送給直接地址90H,P1.0口
PC→MOV P1.1,C ;等價于MOV 91H,C
PC→MOV P1.2,C ;等價于MOV 92H,C
PC→MOV P1.3,C ;等價于MOV 93H,C 等等
END ;偽指令,程序結束標志
l 實例5—雙四數碼管組雙端口數字顯示—單端口掃描移動仿真—點陣
雙四數碼管組雙端口數字顯示—單端口掃描移動仿真,可以被分解為
a) 雙四數碼管組雙端口數字顯示—單端口無掃描無移動—>數字變化(依靠數表和指針),
b) 雙四數碼管組雙端口數字顯示—單端口掃描移動—>數字不變化(依靠數表和指針),
c) 雙四數碼管組雙端口數字顯示—單端口掃描移動—>數字變化(依靠數表和指針),