




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)及C51編程技術(shù)授課老師:劉建陽(yáng)
Email:ljy@Dept.:
機(jī)械工程系西南交通大學(xué)機(jī)械工程系QQ:1853103741主要內(nèi)容2014-9-62LJY80C51匯編語(yǔ)言語(yǔ)句結(jié)構(gòu)的基本格式偽指令匯編的概念程序設(shè)計(jì)的步驟和基本方法順序程序,分支程序,循環(huán)程序,查表程序,散轉(zhuǎn)程序匯編語(yǔ)言的基本知識(shí)
標(biāo)號(hào):操作碼
操作數(shù);
注釋
指令基本格式RED:
SETB
P1.2
;紅燈亮ORG:ORG2000HENDEQU:AAAEQU20HMOVA,20H(MOVA,AAA)DATA(可前可后)DB、DWBIT:A1BIT00H(MOVC,A1)
偽指令匯編程序偽指令在匯編時(shí)起控制作用,自身并不產(chǎn)生機(jī)器碼,而僅是為匯編服務(wù)的一些指令,稱為偽指令。偽指令不屬于80C51指令系統(tǒng)。常用的偽指令有以下幾種:⒈起始偽指令
ORG(Origin)
功能:規(guī)定ORG下面目標(biāo)程序的起始地址。格式:ORG16位地址功能:將一個(gè)數(shù)據(jù)或特定的匯編符號(hào)賦予規(guī)定 的字符名稱。⒉結(jié)束偽指令END功能:匯編語(yǔ)言源程序的結(jié)束標(biāo)志。在END后面的指令,匯編程序不再處理。格式:END⒊等值偽指令
EQU(Equate)格式:字符名稱EQU
數(shù)據(jù)或匯編符號(hào)⒋數(shù)據(jù)地址賦值偽指令
DATA格式:字符名稱DATA
表達(dá)式功能:將數(shù)據(jù)地址或代碼地址賦予規(guī)定的 字符名稱。⒌定義字節(jié)偽指令DB(DefineByte)格式:DB8位二進(jìn)制數(shù)表功能:從指定的地址單元開(kāi)始,定義若干 個(gè)8位內(nèi)存單元的數(shù)據(jù)。數(shù)據(jù)與數(shù)據(jù)之間用“,”分割。格式:字符名稱BIT
位地址⒍定義字偽指令DW(DefineWord)格式:DW16位二進(jìn)制數(shù)表功能:從指定的地址單元開(kāi)始,定義 若干個(gè)16位數(shù)據(jù)。⒎定義位地址偽指令BIT功能:將位地址賦予所規(guī)定的字符名稱。匯編語(yǔ)言基本概念將匯編語(yǔ)言源程序轉(zhuǎn)換為計(jì)算機(jī)所能識(shí)別的機(jī)器語(yǔ)言代碼程序的過(guò)程稱為匯編。
匯編可分為:⒈手工匯編(偽代碼)⒉計(jì)算機(jī)匯編(能編譯運(yùn)行代碼)⑷
調(diào)試程序設(shè)計(jì)的基本方法編寫(xiě)程序要求:不僅要完成規(guī)定的功能任務(wù),而且還要求:執(zhí)行速度快、占用內(nèi)存少、條理清晰、閱讀方便、便于移植、巧妙而實(shí)用。一般應(yīng)按以下幾個(gè)步驟進(jìn)行:⑴分析問(wèn)題,確定算法或解題思路⑵畫(huà)流程圖⑶編寫(xiě)源程序匯編程序設(shè)計(jì)流程明確要求和要達(dá)到的目的確定解決問(wèn)題的計(jì)算方法和步驟畫(huà)出流程圖分配內(nèi)存地址按流程圖編寫(xiě)程序上機(jī)匯編、調(diào)試、修改及最后確定源程序簡(jiǎn)單程序(順序結(jié)構(gòu))大量使用數(shù)據(jù)傳送類指令注意正確選擇指令以提高效率【例】已知16位二進(jìn)制負(fù)數(shù)存放在R1R0中,試求其補(bǔ)碼,并將結(jié)果存在R3R2中。解:二進(jìn)制負(fù)數(shù)的求補(bǔ)方法可歸結(jié)為“求反加1”,符號(hào)位不變。利用CPL指令實(shí)現(xiàn)求反;加1時(shí),則應(yīng)低8位先加1,高8位再加上低位的進(jìn)位。注意這里不能用INC指令,因?yàn)镮NC指令不影響標(biāo)志位。CONT:MOV A,R0 ;讀低8位
CPL A ;取反
ADD A,#1 ;加1
MOV R2,A ;存低8位
MOV A,R1 ;讀高8位
CPL A ;取反
ADDC A,#80H
;加進(jìn)位及符號(hào)位
MOVR3,A
;存高8位
RET
;#80H:10000000B負(fù)數(shù)記得加符號(hào)位!分支程序根據(jù)程序要求無(wú)條件或有條件改變程序執(zhí)行執(zhí)行的順序,選擇程序的流向.特點(diǎn):程序中含有轉(zhuǎn)移類指令關(guān)鍵:正確選用轉(zhuǎn)移指令80C51指令系統(tǒng)中的條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令、位轉(zhuǎn)移指令,可以實(shí)現(xiàn)分支程序。正確運(yùn)用轉(zhuǎn)移指令無(wú)條件分支程序LJMP、AJMP、SJMP有條件分支程序根據(jù)已經(jīng)執(zhí)行的程序?qū)?biāo)志位、ACC或內(nèi)部RAM的某些位的影響結(jié)果決定程序的流向JZ/JNZ、CJNE、DJNZ、位控制轉(zhuǎn)移類指令注意:使用條件轉(zhuǎn)移指令形成分支前一定安排可供條件轉(zhuǎn)移指令進(jìn)行判別的條件。JCLOOP正確選定所用的轉(zhuǎn)移條件及轉(zhuǎn)移目標(biāo)地址①S0單獨(dú)按下,
紅燈亮,其余燈滅;②S1單獨(dú)按下,
綠燈亮,其余燈滅;③其余情況,黃燈亮。【例】已知電路如圖所示,要求實(shí)現(xiàn):解:程序如下SGNL:ANLP1,#11100011B;紅綠黃燈滅
ORLP1,#00000011B;置P1.0、P1.1輸入態(tài),
P1.5~P1.7狀態(tài)不變SL0:JNBP1.0,SL1 ;P1.0=0,S0未按下,轉(zhuǎn)判SL1
JNBP1.1,RED ;P1.0=1,S0按下;且P1.1=0,S1未按下,轉(zhuǎn)紅燈亮YELW:SETBP1.4 ;黃燈亮
CLRP1.2 ;紅燈滅
CLRP1.3 ;綠燈滅
SJMPSL0 ;轉(zhuǎn)循環(huán)SL1:JNBP1.1,YELW;P1.0=0,S0未按下;P1.1=0,S1未按下,轉(zhuǎn)黃燈亮GREN:SETBP1.3 ;綠燈亮
CLRP1.2 ;紅燈滅
CLRP1.4 ;黃燈滅
SJMPSL0 ;轉(zhuǎn)循環(huán)RED:SETBP1.2 ;紅燈亮
CLRP1.3 ;綠燈滅
CLRP1.4 ;黃燈滅
SJMPSL0 ;轉(zhuǎn)循環(huán)
循環(huán)程序循環(huán)初始化循環(huán)次數(shù)計(jì)數(shù)器,工作寄存器設(shè)初值等循環(huán)體盡量簡(jiǎn)練;注意地址指針的修改循環(huán)控制檢查結(jié)束條件,及時(shí)退出循環(huán)允許外重循環(huán)嵌套內(nèi)重循環(huán)循環(huán)體不能交叉不能從循環(huán)程序外部跳入循環(huán)程序內(nèi)部注意循環(huán)嵌套循環(huán)程序流程圖【例】設(shè)Xi均為單字節(jié)數(shù),并按順序存放在以50H為首地址的內(nèi)RAM存儲(chǔ)單元中,數(shù)據(jù)長(zhǎng)度(個(gè)數(shù))N存在R2中,試編程求和S=X1+X2+‥‥+XN,并將S(雙字節(jié))存放在R3R4中,(設(shè)S<65536)。解:程序如下:SXN:MOVR2,#N ;置數(shù)據(jù)長(zhǎng)度(循環(huán)次數(shù))MOVR3,#00H;和單元(高8位)清0MOVR4,#00H;和單元(低8位)清0MOVR0,#50H;求和數(shù)據(jù)區(qū)首址LOOP:MOVA,R4 ;讀前次低8位和
ADDA,@R0 ;低8位累加
MOVR4,A ;存低8位和
CLRA;
ADDCA,R3;高8位加進(jìn)位
MOVR3,A;存高8位和
INCR0;指向下一數(shù)據(jù)循環(huán)修改
DJNZR2,LOOP;判N個(gè)數(shù)據(jù)累加完否?循環(huán)控制
RET;退出循環(huán)退出循環(huán)
置循環(huán)初值循環(huán)體【例】編寫(xiě)延時(shí)10ms子程序,fosc=12MHz。
解:fosc=12MHz,一個(gè)機(jī)器周期為1s。DY10ms:MOVR6,#20;置外循環(huán)次數(shù)DLP1:MOVR7,#250;置內(nèi)循環(huán)次數(shù)DLP2:DJNZR7,DLP2;2機(jī)周×250=500機(jī)周
DJNZR6,DLP1;500機(jī)周×20=10000機(jī)周
RET;說(shuō)明:MOVRn指令為1個(gè)機(jī)器周期;DJNZ指令為2個(gè)機(jī)器周期;RET指令為2個(gè)機(jī)器周期;{[(2機(jī)周×250)+1+2]×20+1+2}×1s/機(jī)周=10063s≈10ms2014-9-6LJY21【課堂練習(xí)題】
按下列要求編寫(xiě)延時(shí)子程序:(1)延時(shí)2ms,fosc=6MHz;(2)延時(shí)10s,fosc=12MHz;設(shè)80C51單片機(jī)的P1口作為輸出口,經(jīng)驅(qū)動(dòng)電路74LS240(8反相三態(tài)緩沖/驅(qū)動(dòng)器)接8只發(fā)光二極管,如下圖所示。當(dāng)輸出位為“1”時(shí),發(fā)光二極管點(diǎn)亮,輸出位為“0”時(shí)為暗。試編程實(shí)現(xiàn):每個(gè)燈閃爍點(diǎn)亮10次,再轉(zhuǎn)移到下一個(gè)燈閃爍點(diǎn)亮10次,循環(huán)不止?!纠烤幹埔粋€(gè)循環(huán)閃爍燈的程序。FLASH:MOVA,#01H ;置燈亮初值FSH0:MOVR2,#0AH ;置閃爍次數(shù)FLOP:MOVP1,A ;點(diǎn)亮
LCALLDY1s ;延時(shí)1sMOVP1,#00H ;熄滅
LCALLDY1s ;延時(shí)1sDJNZR2,FLOP ;閃爍10次
RL A ;左移一位
SJMPFSH0 ;循環(huán)
RET 解:程序如下:延時(shí)子程序可根據(jù)延時(shí)長(zhǎng)短,自行編寫(xiě)。
【課堂練習(xí)題】
根據(jù)上圖電路,設(shè)計(jì)燈亮移位程序,要求8只發(fā)光二極管每次點(diǎn)亮一個(gè),點(diǎn)亮?xí)r間為250ms,順序是從下到上一個(gè)一個(gè)地循環(huán)點(diǎn)亮。設(shè)fosc=6MHz。查表程序
主要用于:復(fù)雜代碼轉(zhuǎn)換顯示數(shù)據(jù)補(bǔ)償:傳感器補(bǔ)償復(fù)雜函數(shù)計(jì)算:Y=SIN(X)查表指令用于查表的指令有兩條:⑴MOVCA,@A+DPTR⑵MOVCA,@A+PC當(dāng)用DPTR作基址寄存器時(shí),查表的步驟分三步:①基址值(表格首地址)→DPTR;②變址值(表中要查的項(xiàng)與表格首地址之間的間隔字節(jié)數(shù))→A;③執(zhí)行MOVCA,@A+DPTR。
注:當(dāng)用PC作基址寄存器時(shí),其表格首地址與PC值間距不能超過(guò)256字節(jié),且編程要事先計(jì)算好偏移量,比較麻煩。因此,一般情況下用DPTR作基址寄存器。解:編程如下:TEST: MOVDPTR,#TAB;置平方表首址
MOVA,30H ;讀數(shù)據(jù)序號(hào)
MOVCA,@A+DPTR;讀對(duì)應(yīng)平方數(shù)據(jù)
MOV31H,A ;存平方數(shù)據(jù)
RET;TAB:DB0,1,4,9,16,25,36,49,64,81,100;0~10平方表【例】用查表程序求0~10之間整數(shù)的平方。已知該整數(shù)存在內(nèi)RAM30H中,查得平方數(shù)存內(nèi)RAM31H。已知平方表首地址為TAB。解:編程如下:CHAG:MOVDPTR,#TABD;置共陰字段碼表首址
MOVA,30H;讀顯示數(shù)字
MOVCA,@A+DPTR;查表,轉(zhuǎn)換為顯示字段碼
MOV30H,A;存顯示字段碼
RET;TABD:DB3FH,06H,5BH,4FH,66H;0~4共陰字段碼表
DB6DH,7DH,07H,7FH,6FH;5~9共陰字段碼表【例】在單片機(jī)應(yīng)用系統(tǒng)中,常用LED數(shù)碼管顯示數(shù)碼,但顯示數(shù)字(≤9)與顯示數(shù)字編碼并不相同,需要將顯示數(shù)字轉(zhuǎn)換為顯示字段碼,通常是用查表的方法?,F(xiàn)要求將30H中的顯示數(shù)字轉(zhuǎn)換為顯示字段碼并存入30H。已知共陰字段碼表首址為TABD。散轉(zhuǎn)程序設(shè)計(jì)
JMP@A+DPTR
轉(zhuǎn)移指令表地址偏移量采用”RET”指令進(jìn)行散轉(zhuǎn)
散轉(zhuǎn)程序是一種并行多分支程序。
在單片機(jī)系統(tǒng)中設(shè)置+、、、四個(gè)運(yùn)算命令鍵,它們的鍵號(hào)分別為0、1、2、3。當(dāng)其中一個(gè)鍵按下時(shí),進(jìn)行相應(yīng)的運(yùn)算。操作數(shù)由P1口和P3口輸入,運(yùn)算結(jié)果仍由P1口和P3口輸出。具體如下:P1口輸入被加數(shù)、被減數(shù)、被乘數(shù)和被除數(shù),輸出運(yùn)算結(jié)果的低8位或商;P3口輸入加數(shù)、減數(shù)、乘數(shù)和除數(shù),輸出進(jìn)位(借位)、運(yùn)算結(jié)果的高8位或余數(shù)。鍵盤號(hào)已存放在30H中?!纠繂纹瑱C(jī)四則運(yùn)算解:程序如下:PRGM:MOVP1,#0FFH;P1口置輸入態(tài)
MOVP3,#0FFH;P3口置輸入態(tài)
MOVDPTR,#TBJ;置“+-×÷”表首地址
MOVA,30H;讀鍵號(hào)
RLA;鍵號(hào)2→A ADDA,30H;鍵號(hào)3→A JMP@A+DPTR;散轉(zhuǎn)TBJ:LJMPPRGM0
;轉(zhuǎn)PRGM0(加法)LJMPPRGM1
;轉(zhuǎn)PRGM1(減法)LJMPPRGM3
;轉(zhuǎn)PRGM3(除法)LJMPPRGM2
;轉(zhuǎn)PRGM2(乘法)PRGM0:MOVA,P1;讀加數(shù)
ADDA,P3;P1+P3MOVP1,A;和→P1CLRA;ADDCA,#00H;進(jìn)位→AMOVP3,A;進(jìn)位→P3RET;
PRGM1:MOVA,P1;讀被減數(shù)
CLRC;SUBBA,P3;P1-P3MOVP1,A;差→P1CLRA;RLCA;借位→AMOVP3,A;借位→P3RET;PRGM2:MOVA,P
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 菊花種苗購(gòu)銷合同
- 特許經(jīng)營(yíng)合同
- 電商運(yùn)營(yíng)合作合同協(xié)議書(shū)
- 車輛過(guò)戶協(xié)議合同
- 建筑施工分包合同書(shū)
- 職場(chǎng)裝修合同規(guī)定
- Unit 6 A Day in the Life Section A 1a-Pronunciation教學(xué)設(shè)計(jì)2024-2025學(xué)年人教版英語(yǔ)七年級(jí)上冊(cè)
- 2《丁香結(jié)》教學(xué)設(shè)計(jì)2024-2025學(xué)年統(tǒng)編版語(yǔ)文六年級(jí)上冊(cè)
- 陜西電子信息職業(yè)技術(shù)學(xué)院《寒區(qū)水力計(jì)算》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東司法警官職業(yè)學(xué)院《紀(jì)錄片創(chuàng)作與欣賞》2023-2024學(xué)年第二學(xué)期期末試卷
- 中美歐規(guī)范樁基承載力計(jì)算設(shè)計(jì)對(duì)比
- 鋼筋工程隱蔽檢查驗(yàn)收記錄表
- 區(qū)塊鏈技術(shù)應(yīng)用開(kāi)發(fā)項(xiàng)目可行性分析報(bào)告
- 加強(qiáng)師德師風(fēng)建設(shè)學(xué)校師德師風(fēng)警示教育講座培訓(xùn)課件
- 豬飼料購(gòu)銷合同書(shū)
- 常用小學(xué)生詞語(yǔ)成語(yǔ)積累歸類大全
- 七種不同樣式的標(biāo)書(shū)密封條
- 全國(guó)水利工程監(jiān)理工程師培訓(xùn)教材質(zhì)量控制
- 中國(guó)傳統(tǒng)成語(yǔ)故事(英文版)
- 鑄造廠總降壓變電所及廠區(qū)配電系統(tǒng)設(shè)計(jì)
- 航拍中國(guó)優(yōu)秀課件
評(píng)論
0/150
提交評(píng)論