專注電子技術(shù)學習與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

51單片機匯編語言

作者:未知   來源:會員上傳   點擊數(shù):  更新時間:2014年05月20日   【字體:













a)  單個按鍵與多個LED燈(位操作輸入與字節(jié)操作輸出)判斷與子程序
此處只是將輸出指令由位指令換成了字節(jié)指令,而輸入判斷仍然是位判斷指令。
ORG 0000H
MAIN:
  CLR C
   MOV C,P2.0 ;獲取P2.0位狀態(tài) 送位累加器;位與字節(jié)轉(zhuǎn)換需要判斷指令
JNC ZIJIE;JC位累加器—進位位為1轉(zhuǎn)移到ZIJIE ,
JNC位累加器為0轉(zhuǎn)移到ZIJIE,否則順序執(zhí)行。
MOV C,P1.0
ZIJIE:;子程序起始
MOV  A#00H
    MOV  P3,A
RET;子程序結(jié)束并返回調(diào)用處
END
 
b)  單個按鍵與多個LED燈(位操作輸入與位、字節(jié)操作輸出)
l  位輸入控制位或字節(jié)輸出
ORG 0000H
MAIN:
  CLR C
   MOV C,P1.0 ;獲取P1.0位狀態(tài) 送位累加器;位與字節(jié)轉(zhuǎn)換需要判斷指令
JNC ZIJIE      ;JC位累加器—進位位為1轉(zhuǎn)移到ZIJIE ,JNC位累加器為0轉(zhuǎn)移到ZIJIE,否則順序執(zhí)行。
  MOV P0.0,C ;送位累加器到P0.0位等,P1.0位狀態(tài)變化則輸出隨之變化
    ACALL  DELAY   ; 調(diào)延時子程序
  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
    ACALL  DELAY    MOV P0.7,C    ACALL  DELAY     
SJMP MAIN ;相對轉(zhuǎn)移時間短,用AJMP絕對轉(zhuǎn)移時間長,RET是用于子程序的返回
ZIJIE:
  MOV A,#00H
  MOV P2,A      ACALL  DELAY 
  MOV P3,A    ACALL  DELAY
     CLR A      MOV P0,A
   MOV P1,A     ACALL  DELAY  
  RET
  DELAY:      ; 延時子程序 - 這是一個非常有用、而且常見的一個子程序
  MOV R5,#04H    ;將16進制數(shù)04H傳遞給寄存器R5
F1:
  DJNZ  R7, F1 ;寄存器R7減1非0跳轉(zhuǎn)到F1,直到減為0順序執(zhí)行下一指令
  RET       ; 子程序結(jié)束,返回子程序入口處  ACALL  DELAY   ; 調(diào)延時子程序 
  END
l  位輸入控制字節(jié)輸出
 
c)  單個按鍵與單個電機控制開環(huán)控制
單“位”P口1位--單個燈位輸出,單個按鍵控制硬控制與軟控制
一個按鍵,一盞照明燈,一個繼電器。硬件接口問題—線路連接、硬件硬驅(qū)動問題(程序稱為軟驅(qū)動)。
一個按鍵,兩盞燈(指示、照明),一個繼電器。硬件接口問題—線路連接、硬件硬驅(qū)動問題。程序稱為軟驅(qū)動:就是利用兩個端口,通過延時或計時器完成轉(zhuǎn)換。
說明:
硬件特性,驅(qū)動與控制信號,程序編寫
由繼電器引出的強電驅(qū)動電器的控制問題,如電動機交流電機、直流電機、步進電機、伺服電機;單項或多項
 
1.  單個開關(guān)(按鍵)與多個LED數(shù)碼管點陣問題最小系統(tǒng)輸出擴展
a)        單個按鍵與多個LED燈(位操作輸入與字節(jié)操作輸出)
b)        單個按鍵與多個LED數(shù)碼管(位操作輸入與字節(jié)操作輸出)數(shù)組
c)         單個按鍵與多個數(shù)碼管(位操作輸入與多字節(jié)操作輸出)靜態(tài)數(shù)組
d)        多個按鍵與多個數(shù)碼管(位操作輸入與字節(jié)操作輸出)動態(tài)掃描函數(shù)
e)         單個按鍵與多個數(shù)碼管點陣(位操作輸入與字節(jié)操作輸出)靜態(tài)
f)         多個按鍵與多個數(shù)碼管點陣(位操作輸入與字節(jié)操作輸出)動態(tài)
 
3.單個開關(guān)(按鍵)與多個LED燈→數(shù)碼管→點陣問題—輸出擴展—最小系統(tǒng)
a)  單個按鍵,多個LED燈(位操作—輸入與字節(jié)操作—輸出)
l  單輸入與多輸出的電子線路—靜態(tài)特性—結(jié)構(gòu)與聯(lián)接   
對于多個LED燈(LED數(shù) < 8個)來說(圖4),在硬件連接方面、軟件編寫方面均沒有大的難點。按照單個LED的連接方式增加便可�?刂瞥绦蚓帉懟旧弦彩侵貜�(fù)性工作—用COPY簡單修改即可。
對于LED數(shù)= 8個或是8的倍數(shù)的情況,需要解決兩個方面的問題。一個是硬件的連接方法,一個是控制程序的編寫指令—用詞方法—字節(jié)操作指令。硬件方面可以用單個或多個成組(NET)的LED或總線接口、單個接口擴展等實現(xiàn)。程序編寫則可以使用重復(fù)性工作、可以使用字節(jié)操作指令而摒棄位操作指令,使得程序簡潔、可讀性好、硬件運行效率高。
對于LED數(shù)> 8個且不能被8整除的,仍需要用位操作指令。參見圖5,指令如下:
l  單輸入與多輸出電子線路的控制指令—動態(tài)特性
ORG  0000H  
   MAIN: 
      MOV  A,#00H  
MOV  P1   ;P1口的狀態(tài),低電平為關(guān)
MOV  C,0A0H  ;按位操作,P2.0口的狀態(tài)—按鍵定,關(guān)為低電平,開為高電平
MOV  P1.0,  ;P1.0口的狀態(tài),按位高電平顯示燈亮,低電平顯示燈滅
MOV  P1.1, 
MOV  P1.2, 
MOV  P1.3,  ;P1.3口的狀態(tài),
MOV  P1.7,C
MOV  P2.1C
MOV  P2.2,C
MOV  P2.4,C
MOV  P3.0,C
MOV  P3.3,C
MOV  P3.5,C
MOV  P3.7,C
MOV  P0.0,C
MOV  P0.4,C
END  
對于LED數(shù)> 8個且能被8整除的需要用字節(jié)操作指令。參見圖2所示。
ORG  0000H  
START: 
      MOV  A#00H  
MOV  P1,  
MOV  C,0A0H 
JB    0A0H,GUAN   ;按位操作;按P2.0口的狀態(tài)獲得兩種顯示結(jié)果,0跳轉(zhuǎn)
MOV  P1,#0FFH   ;按P2.0口的狀態(tài)為非1時的順序顯示本指令
RET  ;返回控制指令
GUAN :   ;程序控制指令入口,跳轉(zhuǎn)入口
MOV  P2,#0FFH   ;按P2.0口的狀態(tài)為1時的轉(zhuǎn)移顯示本指令
RET  ;子程序返回控制指令
END  
程序說明
每個口用位賦值指令來開關(guān)P1口的各個LED。也可以用字節(jié)賦值指令一次性的開關(guān)8位P1口全部LED。
P1=0;   // P1口8位置低電平,點亮8個LED
P1=1;   // P1口8位置高電平,關(guān)閉8個LED。圖5為多個LED燈-單個按鍵的運行結(jié)果與匯編語言。
上面的單片機系統(tǒng)和匯編語言控制指令,很容易被更改為多口、多位的單鍵控制系統(tǒng)。圖5為多個LED燈-單個按鍵的運行結(jié)果與匯編語言。圖6中對P2.0口改用雙擲開關(guān),實現(xiàn)P2.0口的兩種電平狀態(tài)。
ORG 0000H
  START: 
    MOV  A,#0FFH  
    MOV  P3,A
       MOV  P1,A
       MOV C, 0A0H
    JNB  0A0H,GUAN
       MOV  P1,#00H
RET
GUAN : 
       MOV  P3,#00H
     RET   ;可以產(chǎn)生閃爍效果
 END   

 

關(guān)閉窗口

相關(guān)文章