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

51單片機(jī)匯編語言

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













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