單片機(jī)與嵌入式系統(tǒng)4_第1頁(yè)
單片機(jī)與嵌入式系統(tǒng)4_第2頁(yè)
單片機(jī)與嵌入式系統(tǒng)4_第3頁(yè)
單片機(jī)與嵌入式系統(tǒng)4_第4頁(yè)
單片機(jī)與嵌入式系統(tǒng)4_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第四章

匯編語(yǔ)言程序設(shè)計(jì)4.1常用的偽指令<1>定義匯編起始位置偽指令ORG

ORGnn;nn為16位地址例如:ORG2000H;定義了下面指令的地址是從2000H開(kāi)始

MOVSP,#80H;設(shè)堆棧

…….<2>賦值偽指令EQU字節(jié)名稱EQU數(shù)據(jù)(或地址或匯編符號(hào))例如:LED_ABEQU2000H;LED_AB等于2000HNUMBEQU30HKKEQUR0

一般放在程序開(kāi)頭,賦值后不能更改2/4/2023<3>定義字節(jié)常量DB(查表用)

[標(biāo)號(hào):]DB8位二進(jìn)數(shù)表例如:TAB1:DB12H,34H,77H,……TAB2:DB07H,44H,……<4>定義字常量DW(查表用)

[標(biāo)號(hào):]DW16位二進(jìn)數(shù)表例如:(每個(gè)字占個(gè)字節(jié),高8位在先,低8位在后)ORG1000HTAB:DW1234H,3CH,……2/4/2023<5>預(yù)留存儲(chǔ)空間偽指令DS[標(biāo)號(hào):]DS表達(dá)式從定義地址開(kāi)始保留DS之后表達(dá)式的值所規(guī)定的存儲(chǔ)單元,以備后用。例如:

ORG

1000HDS

08HDB

30H,8AH

匯編以后,從1000H保留8個(gè)單元,然后從1008H開(kāi)始給內(nèi)存賦值,即

(1008H)=30H(1009H)=8AH2/4/2023<6>位地址符號(hào)偽指令BIT位名稱BITI/O口(或位地址)例如:CLKBITP1.4;定義P1.4為CLKAD_CSBITP1.6;定義P1.6為AD_CSFLGBIT00H;定義00H位地址為FLG<7>定義匯編結(jié)束指令END

[標(biāo)號(hào):]END[地址或標(biāo)號(hào)]END指令一定要放到程序的最后,否則不會(huì)編譯!2/4/20234.2匯編程序設(shè)計(jì)過(guò)程

<1>明確課題的任務(wù)(硬件/功能/精度等);<2>按功能,分塊規(guī)劃程序結(jié)構(gòu)(模塊設(shè)計(jì)/子程序);<3>分配存儲(chǔ)器資源(定義變量/設(shè)堆?!?);<4>根據(jù)功能選擇合適的指令組合;<5>對(duì)源程序進(jìn)行編譯,調(diào)試和修改;<6>燒寫(xiě)代碼(下載代碼….)。2/4/2023中斷向量入口地址表中

入口地址

外部中斷0

0003H

定時(shí)計(jì)數(shù)器T0溢出

000BH

外部中斷1

0013H

定時(shí)計(jì)數(shù)器T1溢出

001BH

串行口中斷

0023H

定時(shí)計(jì)數(shù)器T2溢出或T2EX輸入負(fù)跳變

002BH

2/4/20234.3匯編程序的結(jié)構(gòu)CLKBITP1.7;I/O口定義…..NUBEQU2020H;常數(shù)或地址定義….………….;定義變量或常數(shù)ORG0000H;復(fù)位入口地址(上電)LJMPMAIN;跳到主程序ORG0003H;INT0入口地址(P3.2)LJMPT_INT0;跳到INT0中斷程序ORG000BH;定時(shí)器T0入口地址(P3.4)LJMPT_T0;跳到T0中斷程序

ORG0013H;INT1入口地址(P3.3)LJMPT_INT1;跳INT1中斷程序ORG001BH;定時(shí)器T1入口地址(P3.5)LJMPT_T1;跳T1中斷程序ORG0023H;串口入口地址(P3.0,P3.1)LJMPT_CK;跳串口中斷程序

………..;

2/4/2023

ORG0100HT_INT0:……..;INT0中斷子程序

RETIT_INT1:……;INT1中斷子程序

RETIT_T0:……;T0中斷子程序

RETIT_T1:……;T1中斷子程序

RETIT_CK:……;串口中斷子程序

RETI…………;其他子程序……..;MAIN:MOVSP,#90H;設(shè)堆棧(主程序部分)MOVIE,#00H;………;其他指令

END;結(jié)束2/4/2023順序程序分支程序單分支雙分支多分支循環(huán)程序

單重循環(huán)多重循環(huán)常用程序結(jié)構(gòu)2/4/2023順序程序例1:4字節(jié)(雙字)加法。將內(nèi)部RAM30H開(kāi)始的4個(gè)單元中存放的4字節(jié)十六進(jìn)制數(shù)和內(nèi)部RAM40H單元開(kāi)始的4個(gè)單元中存放的4字節(jié)十六進(jìn)制數(shù)相加,結(jié)果存放到40H開(kāi)始的單元中。(如圖所示)30H31H33H32H加數(shù)

1存放處4FH23HABHA0H43H42H41H40H

7BH

56H

80H

E8H加數(shù)

2存放處43H42H41H40HCAH79H2BH89H相加結(jié)果存放處+A0AB234FE880567B892B79CA12/4/2023

ORG 0000H MOV A,30H ADD A,40H MOV 40H,A ;最低字節(jié)加法并送結(jié)果

MOV A,31H ADDC A,41H MOV 41H,A ;第二字節(jié)加法并送結(jié)果MOV A,32H ADDCA,42H MOV 42H,A ;第三字節(jié)加法并送結(jié)果

MOV A,33H ADDC A,43H MOV 43H,A;第四字節(jié)加法并送結(jié)果,進(jìn)位位在CY中

SJMP$ END源程序:2/4/20232/4/2023分支程序條件成立?程序段下條指令NY程序段1條件成立?程序段2NY程序段2條件N=?程序段N-10N程序段1程序段N1N-1……多分支單分支雙分支2/4/2023單分支程序例2:如圖所示,設(shè)計(jì)一段程序?qū)崿F(xiàn)功能:如果寄存器A中1的個(gè)數(shù)為奇數(shù),所有的二極管發(fā)光;如果全0,則只讓D1-VD4發(fā)光;否則全滅。2/4/2023開(kāi)始位P=1?A=0?P2FFHP200HP20FH結(jié)束YYNN

ORG0000HMOVA,#00011100BJBP,JISHUJZ QUANMOVP2,#00HSJMP TOendJISHU:MOVP2,#0FFHSJMPTOendQUAN:MOVP2,#0FHTOend:SJMP$END流程圖:源程序:判斷奇偶標(biāo)志位的值判斷A的值是否為0A有偶數(shù)個(gè)1,二極管滅A有奇數(shù)個(gè)1,二極管全亮A為0,D1-D4亮2/4/2023A中1的個(gè)數(shù)為奇數(shù)2/4/2023A中1的個(gè)數(shù)為02/4/2023A中1的個(gè)數(shù)為偶數(shù)2/4/2023雙分支程序例3:內(nèi)部RAM的40H單元和50H單元各存放了一個(gè)8位無(wú)符號(hào)數(shù),請(qǐng)比較這兩個(gè)數(shù)的大小,比較結(jié)果用發(fā)光二極管顯示(LED為高有效):若(40H)≥(50H),則P2.0管腳連接的D1發(fā)光;若(40H)<(50H),則P2.1管腳連接的D2發(fā)光。2/4/2023流程圖X-YX≥Y,D1點(diǎn)亮CY=1?X<Y,

YND2點(diǎn)亮開(kāi)始結(jié)束

XEQU40HYEQU50HORG 0000HMOVP2,#0MOVX,#78H

MOVY,#0F0HMOVA,X CLRC SUBBA,Y JCL1 ;CY=1,轉(zhuǎn)移到

L1 SETBP2.0 ;CY=0,(40H)≥(50H),點(diǎn)亮P2.0SJMPFIN;直接跳轉(zhuǎn)到結(jié)束等待L1:SETBP2.1 ;(40H)<(50H),點(diǎn)亮P2.1FIN:SJMP$END

源程序2/4/2023多分支程序例4:在某單片機(jī)系統(tǒng)中,按下一按鍵,鍵值(代表哪個(gè)鍵被按下)存放在內(nèi)部RAM的40H單元內(nèi)。設(shè)計(jì)一段程序?qū)崿F(xiàn)功能:如果(40H)=00H,調(diào)用子程序SUB1;如果(40H)=01H,調(diào)用子程序SUB2;如果(40H)=02H,調(diào)用子程序SUB3;如果(40H)=03H,調(diào)用子程序SUB4;如果(40H)=04H,調(diào)用子程序SUB5。2/4/2023流程圖……..(40H)=?調(diào)SUB1調(diào)SUB2調(diào)SUB3調(diào)SUB4調(diào)SUB5=00H=02H=03H=04H=01H2/4/2023源程序

……MOVA,40HMOVB,#3MULABMOVDPTR,#TABJMP@A+DPTR……TAB:LJMPSUB1LJMPSUB2LJMPSUB3LJMPSUB4LJMPSUB5(40H)×3傳送給A

查表轉(zhuǎn)移轉(zhuǎn)移地址表

對(duì)AJMP指令應(yīng)將分支序號(hào)乘以2,轉(zhuǎn)移范圍為2KB;

對(duì)LJMP指令應(yīng)將分支序號(hào)乘以3,轉(zhuǎn)移范圍為64KB。2/4/2023循環(huán)程序循環(huán)次數(shù)夠否?循環(huán)初始化置循環(huán)次數(shù)循環(huán)體下一條指令NY2/4/2023定時(shí)程序:用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實(shí)現(xiàn)軟件延時(shí)。單重循環(huán)延時(shí)

例5:假設(shè)單片機(jī)的fosc=12MHz,計(jì)算單片機(jī)執(zhí)行下面程序消耗的時(shí)間。DELAY:MOVR5,#TIME;1機(jī)器周期

MM:NOP;1機(jī)器周期

NOP;1機(jī)器周期

DJNZR5,MM;2機(jī)器周期

RET;2機(jī)器周期1T=12/12MHZ=1s執(zhí)行完以上5條語(yǔ)句,所花時(shí)間:Tdelay=(1+(1+1+2)×TIME+2)×1s第一條和第五條指令延時(shí)時(shí)間可忽略不計(jì)Tdelay=4×TIME×1s最長(zhǎng)定時(shí):TIME=255時(shí),Tdelay≈1ms2/4/2023多重循環(huán)延時(shí)例6:假設(shè)單片機(jī)的fosc=12MHz,計(jì)算單片機(jī)執(zhí)行下面程序消耗的時(shí)間。

DELAY:MOVR3,#TIME1;1機(jī)器周期

LOOP1:MOVR2,#TIME2;1機(jī)器周期

LOOP2:NOP;1機(jī)器周期

NOP;1機(jī)器周期

NOP;1機(jī)器周期

NOP;1機(jī)器周期

NOP;1機(jī)器周期

NOP;1機(jī)器周期

DJNZR2,LOOP2;2機(jī)器周期

DJNZR3,LOOP1;2機(jī)器周期

RET;2機(jī)器周期執(zhí)行完以上語(yǔ)句(第一條和最后一條語(yǔ)句執(zhí)行時(shí)間忽略不計(jì)),所花時(shí)間:Tdelay=(1+(6+2)×TIME2+2)×TIME1×1sTIME1=TIME2=250時(shí),Tdelay≈500ms則:MOVR0,#02LOOP3:LCALLDELAYDJNZR0,LOOP3可實(shí)現(xiàn)1s延時(shí)2/4/2023練習(xí)參照下圖設(shè)計(jì)一個(gè)彩燈控制程序,讓8個(gè)led按照自己的設(shè)想發(fā)光,顯示的樣式盡可能的豐富。2/4/2023HD-51-A型學(xué)習(xí)/開(kāi)發(fā)板2/4/2023原理圖2/4/2023

ORG 0000HSTART:CLR P1.0 ;第一個(gè)LED亮

SETB P1.1;第二個(gè)LED滅

LCALL DELAY ;延時(shí)0.5秒

SETB P1.0;第一個(gè)LED滅

CLR P1.1 ;第二個(gè)LED亮

LCALL DELAY ;延時(shí)0.5秒

SJMP START ;反復(fù)循環(huán)

;延時(shí)子程序,12M晶振延時(shí)約500毫秒DELAY:MOV R4,#4L3:MOV R2,#250L1: MOV R3,#250L2: DJNZ R3,L2 DJNZ R2,L1 DJNZ R4,L3 RET ENDSTART流水燈程序2/4/20232/4/2023LED(LightEmittingDiode)八段數(shù)碼管數(shù)碼管外形agdfecbdpabcdefgdp(a)共陰極GNDVccabcdefgdp(b)共陽(yáng)極2/4/2023編碼abcdefg

dpD7D6D5D4D3D2D1D0P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0

0

0000011數(shù)碼管外形agdfecbdp顯示字形“0”,編碼:03H

1

0011111數(shù)碼管外形agdfecbdp顯示字形“1”,編碼:9FH

0

0100101數(shù)碼管外形agdfecbdp顯示字形“2”,編碼:25H

0

0001101數(shù)碼管外形agdfecbdp顯示字形“3”,編碼:0DH

1

0011001數(shù)碼管外形agdfecbdp顯示字形“4”,編碼:99H

0

1001001數(shù)碼管外形agdfecbdp顯示字形“5”,編碼:49H

0

1000001數(shù)碼管外形agdfecbdp顯示字形“6”,編碼:41H

0

0011111數(shù)碼管外形agdfecbdp顯示字形“7”,編碼:1FH

0

0000001數(shù)碼管外形agdfecbdp顯示字形“8”,編碼:01H

0

0001001數(shù)碼管外形agdfecbdp顯示字形“9”,編碼:09H

0

0010001數(shù)碼管外形agdfecbdp顯示字形“A”,編碼:11H

1

1000001數(shù)碼管外形agdfecbdp顯示字形“b”,編碼:0C1H

0

1100011數(shù)碼管外形agdfecbdp顯示字形“C”,編碼:63H

1

0000101數(shù)碼管外形agdfecbdp顯示字形“d”,編碼:85H

0

1100001數(shù)碼管外形agdfecbdp顯示字形“E”,編碼:61H

0

1110001數(shù)碼管外形agdfecbdp顯示字形“F”,編碼:71H

0

0110000數(shù)碼管外形agdfecbdp顯示字形“P.”,編碼:30H2/4/2023按鍵通常,按鍵所用開(kāi)關(guān)為機(jī)械彈性開(kāi)關(guān),一般為常開(kāi)型,不按下時(shí)觸點(diǎn)斷開(kāi),按下時(shí)閉合。按鍵按下和松開(kāi)的瞬間,伴隨有一連串的抖動(dòng),抖動(dòng)時(shí)間一般為5~10ms。檢測(cè)出鍵閉合后,再執(zhí)行一個(gè)10ms左右的延時(shí)程序,以避開(kāi)抖動(dòng)時(shí)間,等信號(hào)穩(wěn)定后再進(jìn)行按鍵查詢,如果仍保持閉合,則確認(rèn)有鍵按下,否則認(rèn)為是抖動(dòng)。2/4/2023例:按鍵則數(shù)碼管增一開(kāi)始K1按下?數(shù)碼管初始顯示為0延時(shí)10ms再次判斷K1按下?K1抬起?數(shù)碼管增1顯示是否否是是否2/4/2023按鍵則數(shù)碼管增一程序K1BITP1.4SMG_SELBITP1.7SMGDATA30H ORG0000H LJMPMAIN ORG0030HMAIN:MOVP2,#03H;初始顯示0 CLRSMG_SEL;選通數(shù)碼管

L1:JBK1,L1;K1未按下,等待

ACALLDELAY;K1按下,延時(shí)去抖動(dòng)

JBK1,L1;再判K1是否按下,未按下則認(rèn)為是抖動(dòng)

JNBK1,$ ;判按鍵是否松開(kāi),沒(méi)松開(kāi)則等待

L2:INCSMG;數(shù)碼管增一

MOVA,SMG ANLA,#0FH ACALLDISP;調(diào)用顯示子程序

SJMPL12/4/2023按鍵則數(shù)碼管增一程序(續(xù));-------------延時(shí)子程序------------------DELAY:MOVR7,#20DL1:MOVR6,#00DJNZR6,$ DJNZR7,DL1 RET;------------顯示子程序-------------------DISP:MOVDPTR,#DISP_CODE;DISP_CODE為編碼表首地址

MOVCA,@A+DPTR MOVP2,A RETDISP_CODE:DB03H,9FH,25H,0DH,99H,49H,41H,1FHDB01H,09H,11H,0C1H,63H,85H,61H,71H ;對(duì)應(yīng)數(shù)碼:0123456789AbCdEF ENDMAIN2/4/2023外擴(kuò)RAM、ROM時(shí),使用鎖存器2/4/20238D鎖存器2/4/2023一、擴(kuò)展的基本信息(1)地址總線(AddressBus,AB)

A15….A8,A7…A0

(2)數(shù)據(jù)總線(DataBus,DB)

D7….D0

(3)控制總線(ControlBus,CB)

/WR、/RD、/PSEN、/EA、ALE2/4/20232/4/20232/4/2023外部數(shù)據(jù)和常數(shù)訪問(wèn)方法1.外部數(shù)據(jù)訪問(wèn)

MOVXA,@DPTRMOVX@DPTR,AMOVXA,@RiMOVX@Ri,A2.常數(shù)訪問(wèn)

MOVCA,@A+DPTRMOVCA,@A+PC2/4/2023

復(fù)習(xí)單片機(jī)I/O端口邏輯結(jié)構(gòu)

8051有4個(gè)8位并行I/O端口,記做P0、P1、P2和P3。這四個(gè)口都是準(zhǔn)雙向的I/O口,共占有32條管腳,每一條I/O線都能獨(dú)立的用作輸入或輸出。

1、P0口(I/O、總線)2/4/20232、P1口(I/O口)2/4/20233、P2口(I/O口、總線)2/4/20234、P3口(I/O口、復(fù)用功能)2/4/2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論