久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

51單片機匯編語言

作者:未知   來源:會員上傳   點擊數:  更新時間:2014年05月20日   【字體:
 
a)        單個與多個LED燈,位操作與字節操作輸出
ORG 0000H
START:
   CLR C
  MOV P0.0,C
  MOV P1.1,C
  MOV P2.2,C
  MOV P3.3,C
  CLR A
  CPL A
  MOV P0,A
  MOV P1,A
  MOV P2,A
  MOV P3,A
  END
程序說明:
可以用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
        3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
 
b)        單個與多個LED燈閃爍—延時子程序注意定時器


前邊已經看到,通過改變位或字節的賦值,可以使得LED燈亮或滅,以此形成閃爍效果。但是硬件的響應時間太短,使得效果不佳。雖然可以通過改變單片機的時鐘設置來改變效果。但時鐘的改變極其不方便,因此需要利用延時指令(注意定時器功能)獲得理想的效果。延時效果是利用單片機空轉來實現的。
  ACALL  DELAY   ; 調延時子程序 
*************************************************************************
DELAY:      ; 延時子程序 — 這是一個非常有用、而且常見的一個子程序
  MOV R5,#04H    ;將16進制數04H傳遞給寄存器R5
F3:
  MOV R6,#0FFH  ;將16進制數0FFH傳遞給寄存器R6
F2:
  MOV R7,#0FFH  ;將16進制數0FFH傳遞給寄存器R7
F1:
  DJNZ  R7, F1 ;寄存器R7減1非0跳轉到F1,直到減為0順序執行下一指令
  DJNZ  R6, F2 ;寄存器R6減1非0跳轉到F2,直到減為0順序執行下一指令
  DJNZ  R5, F3 ;寄存器R5減1非0跳轉到F3,直到減為0順序執行下一指令
  RET       ; 子程序結束,返回子程序入口處  ACALL  DELAY   ; 調延時子程序 
***************************************************************************
應用實例
MAIN:
   CLR C      MOV P0.0,C      MOV P1.1,C     MOV P2.2,C   MOV P3.3,C
    ACALL  DELAY   ; 調延時子程序
 CLR A
  CPL A
  MOV P0,A
  MOV P1,A
  MOV P2,A
  MOV P3,A
ACALL DELAY; 調延時子程序 
SJMP MAIN ;相對轉移時間短,用AJMP絕對轉移時間長,RET是用于子程序的返回
  DELAY:      ; 延時子程序 - 這是一個非常有用、而且常見的一個子程序
  MOV R5,#04H    ;16進制數04H傳遞給寄存器R5
F3:
  MOV R6,#0FFH  ;16進制數0FFH傳遞給寄存器R6
F2:
  MOV R7,#0FFH  ;16進制數0FFH傳遞給寄存器R7
F1:
  DJNZ  R7, F1 ;寄存器R710跳轉到F1,直到減為0順序執行下一指令
  DJNZ  R6, F2 ;寄存器R610跳轉到F2,直到減為0順序執行下一指令
  DJNZ  R5, F3 ;寄存器R510跳轉到F3,直到減為0順序執行下一指令
  RET       ; 子程序結束,返回子程序入口處  ACALL  DELAY   ; 調延時子程序  
  END
程序說明:
注意延時子程序中的DJNZ  R7, F1;DJNZ  R6, F2 ; DJNZ  R5, F3 ;通過增加或減少循環數目控制或改變延時時間
 
c)         單個與多個LED燈流動—位循環、字節循環與延時子程序
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
    ACALL  DELAY   MOV P0.7,C
    ACALL  DELAY ;注意前面各位狀態一直持續。P0口各位電平保持不變
;****************位循環—流水燈—逐個改變燈亮與滅*******************
  CLR C       MOV P0.0,C         ACALL  DELAY  ; 調延時子程序
CPL C       MOV P0.0,C         ACALL  DELAY
  CLR C       MOV P0.1,C         ACALL  DELAY
CPL C       MOV P0.1,C         ACALL  DELAY
  CLR C       MOV P0.2,C         ACALL  DELAY
CPL C       MOV P0.2,C         ACALL  DELAY
  CLR C       MOV P0.3,C         ACALL  DELAY
CPL C       MOV P0.3,C         ACALL  DELAY
  CLR C      MOV P0.4,C      ACALL  DELAY
CPL C      MOV P0.4,C      ACALL  DELAY
  CLR C      MOV P0.5,C      ACALL  DELAY
CPL C  MOV P0.5,C   ACALL DELAY;注意前面各位狀態—電平、輸出狀態變化
……、……
 ;*******************字節循環—逐級增加輸出口的數目********************
  CPL A  MOV P0,A     ACALL  DELAY    MOV P1,A     ACALL  DELAY 
  MOV P2,A      ACALL  DELAY   MOV P3,A    ACALL  DELAY
;*******************字節循環—流水燈—逐漸改變燈的亮滅狀態*************
  MOV  P2,#01H ;注意:#01H #02H #04H #08H #80H #40H #20H #10H陽極管
     ACALL  DELAY 
  MOV  P2,#02H;注意:#FEH #FDH #FBH #F7H #7FH #BFH #DFH #EFH陰極管
     ACALL  DELAY   MOV  P2,#04H   ACALL  DELAY  MOV  P2,#08H
     ACALL  DELAY   MOV  P2,#10H   ACALL  DELAY  MOV  P2,#20H
     ACALL  DELAY   MOV  P2,#40H   ACALL  DELAY  MOV  P2,#80H
     ACALL  DELAY 
;****************字節循環—數碼管—字符(數字、字母等)**************
  MOV  P1,#40H  ;改變字節中各位的電平狀態,以便控制輸出、顯示所要求的內容
     ACALL  DELAY   MOV  P1,#79H    ACALL  DELAY   MOV  P1,#24H
     ACALL  DELAY   MOV  P1,#30H    ACALL  DELAY   MOV  P1,# 19H
     ACALL  DELAY   MOV  P1,#12H    ACALL  DELAY   MOV  P1,#02H
     ACALL  DELAY   MOV  P1,#78H    ACALL  DELAY 
SJMP MAIN ;相對轉移時間短,用AJMP絕對轉移時間長,RET是用于子程序的返回
;*******************延時子程序***************************
  DELAY:      ; 延時子程序—去除一個循環,時間變短了。
  MOV R6,#04H ;將16進制數04H傳遞給工作寄存器R6。改變#04H為#3FH時間變長
F2:
  MOV R7,#0FFH  ;將16進制數0FFH傳遞給工作寄存器R7
F1:
  DJNZ  R7, F1 ;寄存器R7減1非0跳轉到F1,直到減為0順序執行下一指令
  DJNZ  R6, F2 ;寄存器R6減1非0跳轉到F2,直到減為0順序執行下一指令
  RET       ; 子程序結束,返回子程序入口處  ACALL  DELAY   ; 調延時子程序 
  END
 
********字節循環數碼管字符(數字、字母等)數表指針***********
MAIN:
CLR A
       MOV P3,#00H
        MOV P0,#00H
        MOV P2,#00H
     MOV R0,#00H  ;寄存器中放數值0
        MOV DPTR,#TABZshuzi ;指針PC指向數表
DISP:                ;段標記
     MOV A,R0  ;將寄存器中的數值轉移到累加器中
        MOVC A,@A+DPTR  ;以DPTR作為基礎,與累加器相加得到新地址給累加器
        MOV P3,A   ;將累加器的地址給P3口
        MOV P0,A
        SETB p2.3 ;一位數顯示位控制;個位
        SETB p2.7
              ACALL DELAY  ;調延時子程序
              ACALL DELAY
        INC R0 ;寄存器R0加1
        CJNE R0,#16H,DISP ;寄存器與立即數18比較,不相等則轉移到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:  ;這是偽指令,機器并不執行。只是為了匯編語言講故事的可理解性
   MAIN:    ;偽指令,主程序,用于區別子程序
   PC→MOV  A#00H   ;將立即數00000000B(常數0D)傳送給累加器ACC(專用寄存器,可用于存放計算結果等)。要通過累加器A和其它存儲地址進行數據交換。注意PC是自動移位(自動+1)到下一個語句的地址。使用該語句實質上是讓PC具有初始位置。
PC→MOV  P1   ;將累加器中的數(常數0D)傳送給端口P1(P1口8位全部置0,低電平, P1端口各位處于關閉狀態,LED燈處于系統響應的準備狀態),按字節傳送數據。特別記憶:PC→表示指針所指地址,并會自動加1。輸出口字節
PC→MOV  C0A0H   ;檢測P2.0口的狀態,將P2.0口的狀態(由按鍵狀態決定)傳送給位累加器C,位累加器C的地址是PSW(程序狀態字寄存器)的進位標志位CY(D7H\PSW.7)。P2.0口可以是開或關,也就是置1或0,高電平或低電平),按字節傳送數據。要通過位累加器C和其它存儲地址進行數據交換。該語句也可以寫成:MOV  CP2.0,比較字節數據傳送MOV A,#00H或MOV  A,P1。輸入口
PC→MOV  P1.0C   等價于MOV  90HC  ;將位累加器C地址中的值傳送給P1.0口(90H是其直接地址),也就是將P2.0口的狀態(由直接地址0A0H狀態決定)傳送給直接地址90HP1.0口,輸出口
PC→MOV  P1.1  ;等價于MOV  91HC
PC→MOV  P1.2  ;等價于MOV  92HC
PC→MOV  P1.3  ;等價于MOV  93H 等等
END ;偽指令,程序結束標志
程序說明
單個按鍵控制單個LED燈及其狀態,也可以控制若干個LED燈及其狀態。也就是多個LED燈,單個按鍵。反過來,可以是多個按鍵控制單個燈或多個按鍵控制多個LED燈。通過簡單硬件連接和匯編語言的位指令運用,理解單片機作為數字電路的特點,門電路的特點,開關電路的特點,高與低電平時的電子線路處于開或關的狀態,或叫關閉與導通。

圖1-單個LED燈-單個按鍵的實現。用P2.0口的狀態來控制其它Px.i口的狀態,從而實現燈的開與關。其中:左圖為Proteus軟件的界面,右圖為Keil軟件的界面。


圖2-單個LED燈與數碼管-單個按鍵的實現。用P2.0口的位狀態來控制其它P1口的字節狀態,從而用字節數據傳輸實現數碼管的開與關。詳細的說明,后續再談。其中:圖2的左圖為Proteus軟件的界面,右圖為Keil軟件的界面。圖3為匯編指令集—匯編程序。
關閉窗口

相關文章

主站蜘蛛池模板: 成年人精品视频在线观看 | 免费大黄视频 | 91视频一区 | 国产精品99久久久久久久vr | 黄色日批视频 | 亚洲精品乱码久久久久久黑人 | 97超碰免费| 亚洲精品视频免费 | 91精品国产综合久久精品 | 亚洲xx在线| 99久久婷婷国产综合精品电影 | 精品综合久久久 | 久久国产一区二区 | 7777在线视频免费播放 | 国产精品一区二区欧美黑人喷潮水 | 日韩国产在线观看 | 欧洲av一区 | 欧美一级黄带 | 日本福利视频免费观看 | 一区二区三区四区免费在线观看 | 中文在线视频观看 | 中文久久 | 超碰在线人人干 | 正在播放一区二区 | 亚洲成人精品 | 91天堂网| 国产 日韩 欧美 在线 | 国产精品久久久久久久岛一牛影视 | 国产一级片一区二区三区 | 欧美天堂在线 | 免费观看黄色一级片 | 激情五月综合 | 久久久久一区 | 日韩有码在线观看 | 搞av.com | 国产成人免费一区二区60岁 | 国产95在线 | 色视频网站 | 免费毛片网站在线观看 | 久久久久久一区 | 欧美黄色一区 |