ORG 0000H
START:
程序說明:
可以用7段數碼管來代替各端口的8個LED燈,硬件的這種顯示方式使得數字表達成為實用。數字顯示由數碼管的硬件結構與工作原理(7個LED燈的幾何變形組合)和數字表達的數據格式確定。
如:
共陽極數碼管顯示數字3,則有P1口送數據#4FH;
MOV P1, #0B0H
共陰極數碼管顯示數字8,則有P1口送數據#80H;
MOV P1, #7F H
用數據表表示則有:
TABshuziyang: //陽極管(共陰極管取反即可)
DB (數字0~F)
C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH
TABshuziyin: //陰極管(共陽極管取反即可)
DB(數字0~F)
前邊已經看到,通過改變位或字節的賦值,可以使得LED燈亮或滅,以此形成閃爍效果。但是硬件的響應時間太短,使得效果不佳。雖然可以通過改變單片機的時鐘設置來改變效果。但時鐘的改變極其不方便,因此需要利用延時指令(注意定時器功能)獲得理想的效果。延時效果是利用單片機空轉來實現的。
*************************************************************************
DELAY: ; 延時子程序 — 這是一個非常有用、而且常見的一個子程序
F3:
F2:
F1:
***************************************************************************
應用實例
MAIN:
; CLR A
ACALL DELAY; 調延時子程序
SJMP MAIN ;相對轉移時間短,用AJMP絕對轉移時間長,RET是用于子程序的返回
F3:
F2:
F1:
程序說明:
注意延時子程序中的DJNZ R7, F1;DJNZ R6, F2 ; DJNZ R5, F3 ;通過增加或減少循環數目控制或改變延時時間
ORG 0000H
MAIN:
;****************位循環—掃描—流水燈—逐級增加燈的數目*******************
CLR C MOV P0.0,C ACALL DELAY ; 調延時子程序
MOV P0.1,C ACALL DELAY MOV P0.2,C
ACALL DELAY MOV P0.3,C ACALL DELAY MOV P0.4,C
ACALL DELAY MOV P0.5,C ACALL DELAY MOV P0.6,C
;****************位循環—流水燈—逐個改變燈亮與滅*******************
CPL C MOV P0.0,C ACALL DELAY
CPL C MOV P0.1,C ACALL DELAY
CPL C MOV P0.2,C ACALL DELAY
CPL C MOV P0.3,C ACALL DELAY
CPL C MOV P0.4,C ACALL DELAY
CPL C MOV P0.5,C ACALL DELAY;注意前面各位狀態—電平、輸出狀態變化
……、……
;*******************字節循環—流水燈—逐漸改變燈的亮滅狀態*************
;****************字節循環—數碼管—字符(數字、字母等)**************
SJMP MAIN ;相對轉移時間短,用AJMP絕對轉移時間長,RET是用于子程序的返回
;*******************延時子程序***************************
F2:
F1:
MAIN:
CLR A
DISP: ;段標記
TABshuziyang://陽極管
DB C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH,0FFH
TABshuziyin: //陰極管
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH
END
;*************字節循環—數碼管—字符(數字、字母等)—移位控制***********
RL A 將累加器的值左移一位
RLC A 將累加器含進位C左移一位
RR A 將累加器的值右移一位
RRC A 將累加器含進位C右移一位
1. 單個按鍵,單個與多個LED燈—最小系統—位輸入與位、字節輸出—判斷與子程序
a) 單個按鍵與單個LED燈(位操作—輸入與輸出)—判斷與子程序
b) 單個按鍵與多個LED燈(位操作—輸入與字節操作—輸出)
c) 單個按鍵與多個LED燈(位操作—輸入與位、字節操作—輸出)
d) 單個按鍵與單個電機控制—開環控制
1. 單個按鍵,單個與多個LED(位操作—輸入與位、字節操作—輸出)—最小系統
a) 單個按鍵,單個LED燈(位操作與位輸入、輸出)—有、無判斷而傳送數據
通過三個方面(程序指令、虛擬仿真、實體電路)探討單輸入與單輸出:主要是理解位數據傳送,包括匯編語言的數據傳送指令實踐、實際虛擬電路的數據傳送響應,以體現抽象與具體的可理解性。
?? 單輸出的電子線路 — 靜態特性— 動態特性,指令控制輸出
?? 單輸入與單的電子線路 — 靜態特性(線路組成與結構)
?? 單輸入與單輸出電子線路的控制指令 — 動態特性(行為與狀態)
;分號,這是一種注釋方式符號
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 ;偽指令,程序結束標志
程序說明:
單個按鍵控制單個LED燈及其狀態,也可以控制若干個LED燈及其狀態。也就是多個LED燈,單個按鍵。反過來,可以是多個按鍵控制單個燈或多個按鍵控制多個LED燈。通過簡單硬件連接和匯編語言的位指令運用,理解單片機作為數字電路的特點,門電路的特點,開關電路的特點,高與低電平時的電子線路處于開或關的狀態,或叫關閉與導通。