版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
會(huì)計(jì)學(xué)1第3章-匯編程序設(shè)計(jì)3.4.1匯編程序偽指令
在匯編時(shí)起控制作用,自身并不產(chǎn)生機(jī)器碼,而僅是為匯編服務(wù)的一些指令,稱為偽指令。偽指令不屬于80C51指令系統(tǒng)。常用的偽指令有以下幾種:⒈起始偽指令
ORG(Origin)
功能:規(guī)定ORG下面目標(biāo)程序的起始地址。格式:ORG16位地址第1頁/共31頁功能:將一個(gè)數(shù)據(jù)或特定的匯編符號(hào)賦予規(guī)定 的字符名稱。⒉結(jié)束偽指令END功能:匯編語言源程序的結(jié)束標(biāo)志。在END后面的指令,匯編程序不再處理。格式:END⒊等值偽指令
EQU(Equate)格式:字符名稱EQU
數(shù)據(jù)或匯編符號(hào)第2頁/共31頁⒋數(shù)據(jù)地址賦值偽指令
DATA格式:字符名稱DATA
表達(dá)式功能:將數(shù)據(jù)地址或代碼地址賦予規(guī)定的 字符名稱。⒌定義字節(jié)偽指令DB(DefineByte)格式:DB8位二進(jìn)制數(shù)表功能:從指定的地址單元開始,定義若干 個(gè)8位內(nèi)存單元的數(shù)據(jù)。數(shù)據(jù)與數(shù)據(jù)之間用“,”分割。第3頁/共31頁格式:字符名稱BIT
位地址⒍定義字偽指令DW(DefineWord)格式:DW16位二進(jìn)制數(shù)表功能:從指定的地址單元開始,定義 若干個(gè)16位數(shù)據(jù)。⒎定義位地址偽指令BIT功能:將位地址賦予所規(guī)定的字符名稱。第4頁/共31頁匯編語言基本概念
將匯編語言源程序轉(zhuǎn)換為計(jì)算機(jī)所能識(shí)別的機(jī)器語言代碼程序的過程稱為匯編。匯編可分為:⒈手工匯編⒉計(jì)算機(jī)匯編第5頁/共31頁⑷
匯編和調(diào)試程序設(shè)計(jì)的基本方法編寫程序要求:
不僅要完成規(guī)定的功能任務(wù),而且還要求:
執(zhí)行速度快、占用內(nèi)存少、條理清晰、
閱讀方便、便于移植、巧妙而實(shí)用。一般應(yīng)按以下幾個(gè)步驟進(jìn)行:⑴分析問題,確定算法或解題思路⑵畫流程圖⑶編寫源程序第6頁/共31頁
順序程序是指按順序依次執(zhí)行的程序,也稱為簡單程序或直線程序。順序程序結(jié)構(gòu)雖然比較簡單,但也能完成一定的功能任務(wù),是構(gòu)成復(fù)雜程序的基礎(chǔ)。3.4.2順序程序第7頁/共31頁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 ;【例】已知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)志位。程序如下:第8頁/共31頁
根據(jù)不同條件轉(zhuǎn)向不同的處理程序,這種結(jié)構(gòu)的程序稱為分支程序。
80C51指令系統(tǒng)中的條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令和位轉(zhuǎn)移指令,可以實(shí)現(xiàn)分支程序。3.4.3分支程序第9頁/共31頁①S0單獨(dú)按下,
紅燈亮,其余燈滅;②S1單獨(dú)按下,
綠燈亮,其余燈滅;③其余情況,黃燈亮?!纠恳阎娐啡鐖D4-5所示,要求實(shí)現(xiàn):第10頁/共31頁解:程序如下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)判S1JNBP1.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)
第11頁/共31頁課堂練習(xí)題:
電路及燈亮滅要求同上述【例】題,其中第3、4兩條指令JNBP1.0和JNBP1.1按下列要求修改,試重新編程。 ⑴ JB P1.0,… JB P1.1,… ⑵ JB P1.0,… JNBP1.1,… ⑶ JNBP1.0,… JB P1.1,…第12頁/共31頁
循環(huán)程序一般包括以下幾個(gè)部分: ⑴循環(huán)初值; ⑵循環(huán)體; ⑶循環(huán)修改; ⑷循環(huán)控制; 以上四部分可以有兩種組織形式,其結(jié)構(gòu)如下圖所示。3.4.4
循環(huán)程序第13頁/共31頁第14頁/共31頁【例】設(shè)Xi均為單字節(jié)數(shù),并按順序存放在以50H為首地址的內(nèi)RAM存儲(chǔ)單元中,數(shù)據(jù)長度(個(gè)數(shù))N存在R2中,試編程求和S=X1+X2+‥‥+XN,并將S(雙字節(jié))存放在R3R4中,(設(shè)S<65536)。解:程序如下:SXN:MOVR2,#N ;置數(shù)據(jù)長度(循環(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)體第15頁/共31頁【例】編寫延時(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;說明:MOVRn指令為1個(gè)機(jī)器周期;DJNZ指令為2個(gè)機(jī)器周期;RET指令為2個(gè)機(jī)器周期;{[(2機(jī)周×250)+1+2]×20+1+2}×1s/機(jī)周=10063s≈10ms【課堂練習(xí)題】
按下列要求編寫延時(shí)子程序:⑴延時(shí)2ms,fosc=6MHz;⑵延時(shí)5ms,fosc=12MHz;⑶延時(shí)10s,fosc=12MHz;第16頁/共31頁
設(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)閃爍燈的程序。第17頁/共31頁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í)長短,自行編寫。第18頁/共31頁【課堂練習(xí)題】
根據(jù)上圖電路,設(shè)計(jì)燈亮移位程序,要求8只發(fā)光二極管每次點(diǎn)亮一個(gè),點(diǎn)亮?xí)r間為250ms,順序是從下到上一個(gè)一個(gè)地循環(huán)點(diǎn)亮。設(shè)fosc=6MHz。第19頁/共31頁【例】已知P1口數(shù)據(jù)每隔10ms刷新一次,試求其1s內(nèi)的平均值,平均值存30H。解:本題需求100個(gè)數(shù)據(jù)的平均值,一般有兩種方法:一種是全部累加后再平均;另一種是邊平均邊累加,現(xiàn)給出兩種方法的程序。第20頁/共31頁AVRG1:MOVR2,#0 ;低8位累加寄存器清0MOVR3,#0 ;高8位累加寄存器清0MOVR4,#100 ;置平均次數(shù)ALOP:MOVA,P1 ;讀P1口數(shù)據(jù)
ADDA,R2 ;低8位累加
MOVR2,A ;回存
CLRA ;高8位與進(jìn)位累加
ADDCA,R3 ;MOVR3,A ;回存
LCALLDY10ms ;延時(shí)10msDJNZR4,ALOP ;判100次累加完否?未完繼續(xù)
MOVA,R3 ;100次累加完,求平均值,被除數(shù)→A、BMOVB,R2 ;MOVR0,30H ;置商間址
MOVR6,#0 ;置除數(shù)100,除數(shù)→R6R5MOVR5,#100 ;LCALLSUM ;(A、B)÷(R6、R5)=商@R0,余數(shù)A
CJNEA,#50,NEXT ;四舍五入NEXT:JC GRET ;C=1,<50,舍
INC 30H ;C=0,≥50,入GRET:RET ;⑴全部累加后再平均注:SUM子程序可參閱例4-9第21頁/共31頁AVRG2: MOV 30H,#0 ;商累加寄存器清0 MOV 31H,#0 ;余數(shù)累加寄存器清0 MOV R4,#100 ;置平均次數(shù)ALOP: MOV A,P1 ;讀P1口數(shù)據(jù)
MOV B,#100 ;置除數(shù)(平均次數(shù)) DIV AB ;P1口數(shù)據(jù)除以100 ADD A,30H ;商累加
MOV 30H,A ;回存
MOV A,B ; ADD A,31H ;余數(shù)累加
MOV 31H,A ;回存
CLR C ; SUBB A,#100 ; JC GON ;余數(shù)累加<100,余數(shù)累加寄存器不變
INC 30H ;余數(shù)累加≥100,商累加寄存器+1 MOV 31H,A ;減去100后差→余數(shù)累加寄存器GON: LCALL DY10ms ;延時(shí)10ms DJNZ R4,ALOP ;判100次累加完否?未完繼續(xù)
MOV A,31H ;100次累加完畢,余數(shù)累加四舍五入
CJNE A,#50,NEXT ;NEXT: JC GRET ;C=1,<50,舍
INC 30H ;C=0,≥50,入GRET: RET;⑵邊平均邊累加第22頁/共31頁【課堂練習(xí)題】
已知某單片機(jī)系統(tǒng)每隔20ms測(cè)一次溫度,8位溫度A/D值存在特殊功能寄存器SBUF中,試分別求其1s和1分內(nèi)的平均值,分別存30H和31H。第23頁/共31頁
當(dāng)用PC作基址寄存器時(shí),其表格首地址與PC值間距不能超過256字節(jié),且編程要事先計(jì)算好偏移量,比較麻煩。因此,一般情況下用DPTR作基址寄存器。3.4.5查表程序用于查表的指令有兩條:⑴MOVCA,@A+DPTR⑵MOVCA,@A+PC
當(dāng)用DPTR作基址寄存器時(shí),查表的步驟分三步:①基址值(表格首地址)→DPTR;②變址值(表中要查的項(xiàng)與表格首地址之間的間隔字節(jié)數(shù))→A;③執(zhí)行MOVCA,@A+DPTR。第24頁/共31頁解:編程如下: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。第25頁/共31頁【課堂練習(xí)題】
已知8位顯示數(shù)字已存入首址為30H的內(nèi)RAM中,試將其轉(zhuǎn)換為共陰顯示字段碼,存入首址為40H的內(nèi)RAM中。第26頁/共31頁解:編程如下:CUBE: MOVDPTR,#TAB;置立方表首址
MOVA,30H ;讀數(shù)據(jù)
ADDA,30H ;數(shù)據(jù)×2→A MOV30H,A ;暫存立方表數(shù)據(jù)序號(hào)
MOVCA,@A+DPTR;讀立方數(shù)據(jù)高8位
XCHA,30H;存立方數(shù)據(jù)高8位,立方表數(shù)據(jù)序號(hào)→A INCA ;指向立方數(shù)據(jù)低8位
MOVCA,@A+DPTR;讀立方數(shù)據(jù)低8位
MOV31H,A ;存立方數(shù)據(jù)低8位
RET;TAB:DW0,0,0,1,0,8,0,27,0,64;0~40立方表
DW0,125,0,216,…,0FAH,00H;說明:數(shù)據(jù)×2→A原因是立方表數(shù)據(jù)為雙字節(jié)【例】用查表程序求0~40之間整數(shù)的立方。已知該整數(shù)存在內(nèi)RAM30H中,查得立方數(shù)存內(nèi)RAM30H(高8位)31H。已知立方表(雙字節(jié))首地址為TAB。第27頁/共31頁
在單片機(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中。3.4.6散轉(zhuǎn)程序散轉(zhuǎn)程序是一種并行多分支程序。【例】單片機(jī)四則運(yùn)算系統(tǒng)。第28頁/共31頁解:程序如下: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)P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 屈營學(xué)校2024年防溺水工作方案
- 物聯(lián)網(wǎng)服務(wù)合同
- 2024八年級(jí)數(shù)學(xué)第一學(xué)期教學(xué)工作總結(jié)
- 納稅籌劃協(xié)議
- 產(chǎn)品協(xié)議模板
- 業(yè)務(wù)進(jìn)出口合同
- 納稅融資租賃協(xié)議
- 教育產(chǎn)業(yè)貸款服務(wù)合同模板
- 熱力管道施工方案
- 合作伙伴協(xié)議
- 機(jī)電進(jìn)度控制表
- 信息科技課評(píng)分標(biāo)準(zhǔn)
- 廣州金證研公司的筆試題
- 化療后骨髓抑制的護(hù)理查房
- 外科護(hù)士進(jìn)修匯報(bào)課件
- 個(gè)人和公司關(guān)系證明
- 中國單純皰疹病毒性角膜炎診療專家共識(shí)(2023版)解讀
- 新蘇教版科學(xué)三年級(jí)上冊(cè)學(xué)生活動(dòng)手冊(cè)答案
- 壓瘡用具的使用護(hù)理課件
- 臨床醫(yī)學(xué)概論課程研究報(bào)告
- 術(shù)后鎮(zhèn)痛麻醉效果分析報(bào)告
評(píng)論
0/150
提交評(píng)論