<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)匯編語言(四)

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

          作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
          8.5功能說明:

          使用4×4矩陣式鍵盤,共有16個(gè)按鍵,通過掃描方法控制顯示器輸出0~F十六進(jìn)制數(shù)。

          本文引用地址:http://www.ex-cimer.com/article/201611/321012.htm

          程序:JP02.ASM

          01:ORG 00H ;

          02: START: MOV R4,#00H ;

          03: L1: MOV R3,#0F7H ;掃描初值(P3.3=0)

          04: MOV R1,#00H ;取碼指針 設(shè)置初值

          05: L2: MOV A,R3 ;開始掃描

          06: MOV P3,A ;將掃描值輸出至P3

          07: MOV A,P3 ;讀入P3值,判斷有無按下 送出行掃描初

          08: MOV R4,A ;存入R4,以判斷是否放開 值(P3.3=0)

          09: SETB C ;C=1

          10: MOV R5,#04H ;掃描P3.4~P3.7

          11: L3: RLC A ;將按鍵值左移一位

          12: JNC KEY ; 有鍵按下C=0,跳至KEY

          13: INC R1 ;C=1沒鍵按下,指針值加1

          14: DJNZ R5,L3 ;4列掃描完畢了? 左移檢測列

          15: MOV A,R3 ;掃描值載入

          16: SETB C ;C=1

          17: RRC A ;掃描下一行

          18: MOV R3,A ;存回掃描寄存器

          19: JC L2 ;C=1,程序轉(zhuǎn)到L2處

          20: JMP L1 ;C=0則4行已掃描完畢 右移掃描行

          21: KEY: ACALL DELAY ;調(diào)延時(shí)子程序 消除抖動

          22: D1: MOV A,P3 ;讀入P3值

          23: XRL A,R4 ;與上次讀入值作比較

          24: JZ D1 ;A=0,表示按鍵未放

          25: MOV A,R1 ;按鍵已放開,指針載入A 按鍵釋放從

          26: ACALL DISP ;調(diào)用顯示子程序 TABLE取碼

          27: JMP L1 ; 重復(fù)掃描

          28: DISP: MOV DPTR,#TABLE ;數(shù)據(jù)指針指到TABLE

          29: MOVC A,@A+ DPTR ;至TABLE取碼

          30: MOV P0,A ; 輸出

          31: RET ; 子程序返回 顯示子程序

          32: DELAY: MOV R7, #60 ;

          33: MOV R6, #248 ;

          34: DLY1: DJNZ R6, $ ;

          35: DJNZ R7, DLY1 ; 消除抖動

          36: RET ; 延時(shí)子程序

          37: TABLE: DB 0C0H, 0F9H, 0A4H,0B0H ;

          39: DB 99H, 92H, 82H, 0F8H ;

          40: DB 80H, 90H, 88H, 83H ;

          41: DB 0C6H, 0A1H, 86H, 8EH ; 編碼表

          42: END ; 程序結(jié)束

          中斷

          9.1功能說明:

          單片機(jī)P1端口的8個(gè)LED作左移右移,不斷循環(huán)。當(dāng)按外部中斷INT0開關(guān)K1時(shí),循環(huán)停止,轉(zhuǎn)而使8個(gè)LED閃爍4次。之后,又恢復(fù)燈的左右移循環(huán)。

          程序:ZD01.ASM

          01: ORG 00H ; 起始地址

          02: JMP START ;跳到主程序START

          03: ORG 03H ;INT0中斷起始地址 規(guī)定起

          04: JMP EXT0 ;跳到中斷子程序 始地址

          05: START:MOV IE, #10000001B ;INT0中斷開通

          06: MOV IP, #00000001B ;INT0中斷優(yōu)先

          07: MOV TCON, #00000000B ;INT0為電平觸發(fā)

          08: MOV SP, #70H ;設(shè)定堆棧指針 中斷設(shè)定

          09: LOOP:MOV R0, #8 ; 設(shè)置左移位數(shù)

          10: MOV A , #0FEH ; 設(shè)置左移初值

          11: LOOP1:MOV P1, A ; 輸出至P1

          12: ACALL DELAY ; 調(diào)延時(shí)子程序

          13: RL A ; 左移一位

          14: DJNZ R0, LOOP1 ; 判斷移動位數(shù) 左移

          15: MOV R0, #8 ; 設(shè)置右移位數(shù)

          16: LOOP2:RR A ; 右移一位

          17: MOV P1, A ; 輸出至P1

          18: LCALL DELAY ; 調(diào)延時(shí)子程序

          19: DJNZ R0, LOOP2 ; 判斷移動位數(shù)

          20: JMP LOOP ; 重設(shè)顯示值 右移 左右移

          21: EXT0: PUSH ACC ;將A 值壓入堆棧

          22: PUSH PSW ;將 PSW值壓入堆棧

          23: SETB RS0 ;設(shè)定工作寄存器組1 保護(hù)

          24: CLR RS1 ; 現(xiàn)場

          25: MOV R0, #4 ; 設(shè)置閃爍次數(shù)

          26: LOOP3:MOV A, #00H ; A存有P1口欲顯值

          27: MOV P1, A ; P1端口燈亮

          28: LCALL DELAY ; 調(diào)延時(shí)1秒子程序

          29: CPL A ;將A的值反相

          30: DJNZ R0, LOOP3 ; 判斷閃爍次數(shù) 閃爍

          31: POP PSW ;從堆棧取回PSW值 恢復(fù)

          32: POP ACC ;從堆棧取回值 A值 現(xiàn)場 中斷

          33: RETI ;返回主程序 子程序

          9.4功能說明:

          開始時(shí)P1端口8個(gè)LED燈在閃爍。當(dāng)按外部中斷INT0開關(guān)K1時(shí),使一個(gè)燈左右移3次。當(dāng)按外部中斷INT1開關(guān) K2時(shí),使二個(gè)燈左右移4次。之后, 8個(gè)LED燈恢復(fù)閃爍。

          程序:ZD02.ASM

          01: ORG 00H ; 主程序起始地址

          02: JMP START ; 跳到主程序START

          03: ORG 03H ; INT0中斷子程序起始地址

          04: JMP EXT0 ; 跳至中斷子程序EXT0

          05: ORG 13H ; INT1中斷子程序起始地址 地址

          06: JMP EXT1 ; 跳至中斷子程序EXT1 設(shè)置

          07: START:MOV IE, #10000101B ; 中斷開通

          08: MOV IP, #00000100B ; INT1優(yōu)先中斷

          09: MOV TCON, #00000000B ; INT0 、INT1為電平觸發(fā) 中斷

          10: MOV SP, #70H ; 設(shè)定堆棧在(70 H) 設(shè)置

          11: MOV A, #00H ; 設(shè)初始值

          12: LOOP: MOV P1,A ; 使P1閃爍

          13: LCALL DELAY ; 調(diào)延時(shí)子程序

          14: CPL A ; 將A的值反相

          15: JMP LOOP ; 重復(fù)循環(huán) 閃爍

          16: EXT0: PUSH ACC ; 將A 值壓入堆棧

          17: PUSH PSW ; 將 PSW值壓入堆棧

          18: SETB RS0 ; 保護(hù)

          19: CLR RS1 ; 設(shè)置寄存器組1 現(xiàn)場

          20: MOV R3,#03 ; 左右移3次

          21: LOOP1:MOV R0, #08 ; 設(shè)置左移位數(shù)

          22: MOV A ,#0FEH ; 設(shè)置左移初值

          23: LOOP2:MOV P1, A ; 輸出至P1

          24: ACALL DELAY ; 調(diào)延時(shí)子程序

          25: RL A ; 左移一位

          26: DJNZ R0, LOOP2 ; 判斷移動位數(shù)

          27: MOV R0,#07 ; 設(shè)置右移位數(shù)

          28: LOOP3:RR A ; 右移一位

          29: MOV P1, A ; 輸出至P1

          30: LCALL DELAY ; 調(diào)延時(shí)子程序

          31: DJNZ R0, LOOP3 ; 右移7 位? 左右

          32: DJNZ R3,LOOP1 ; 左右移3次?

          33: POP PSW ; 從堆棧取回PSW值 恢復(fù) EXT0

          34: POP ACC ; 從堆棧取回值 A值 現(xiàn)場 中斷子

          35: RETI ; 返回主程序 程序

          36: EXT1: PUSH ACC ; 將A值壓入堆棧

          37: PUSH PSW ; 將 PSW值壓入堆棧

          38: SETB RS1 ; 設(shè)工作組2 ,RS1=1 保護(hù)

          39: CLR RS0 ; RS0=0 現(xiàn)場

          40: MOV R3,#04 ;左右移4次

          41: LOOP4:MOV R0, #06 ; 設(shè)置左移位數(shù)

          42: MOV A ,#0FCH ; 設(shè)置左移初值

          43: LOOP5:MOV P1, A ; 輸出至P1

          44: ACALL DELAY ; 調(diào)延時(shí)子程序

          45: RL A ; 左移一位

          46: DJNZ R0, LOOP5 ; 判斷移動位數(shù)

          47: MOV R0,#06 ; 設(shè)置右移位數(shù)

          48: LOOP6:RR A ; 右移一位

          49: MOV P1, A ; 輸出至P1

          50: LCALL DELAY ; 調(diào)延時(shí)子程序

          51: DJNZ R0, LOOP6 ; 判斷 左右

          52: DJNZ R3,LOOP4 ; 左右移4次?

          53: POP PSW ; 從堆棧取回PSW值 恢復(fù) EXT1

          54: POP ACC ; 從堆棧取回值 A值 現(xiàn)場 中斷子

          55: RETI ; 返回主程序 程序

          56: DELAY:MOV R5, #20 ; 延時(shí)0.2秒子程序

          57: DLY1: MOV R6, #20 ;

          58: DLY2: MOV R7, #248 ;

          59: DJNZ R7, $ ;

          60: DJNZ R6, DLY2 ;

          61: DJNZ R5, DLY ; 延時(shí)子

          62: RET ; 程序

          63: END ; 程序結(jié)束



          關(guān)鍵詞: 51單片機(jī)匯編語

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();