版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)系統(tǒng)41單片機(jī)系統(tǒng)42本章學(xué)習(xí)目標(biāo)本章學(xué)習(xí)目標(biāo) vmcs-51mcs-51單片機(jī)匯編語言程序設(shè)計(jì)的步驟單片機(jī)匯編語言程序設(shè)計(jì)的步驟v循環(huán)程序和分支程序的結(jié)構(gòu)及使用方法循環(huán)程序和分支程序的結(jié)構(gòu)及使用方法v延時(shí)程序的使用方法延時(shí)程序的使用方法v查表程序設(shè)計(jì)查表程序設(shè)計(jì)v數(shù)制轉(zhuǎn)換的原理數(shù)制轉(zhuǎn)換的原理v定點(diǎn)數(shù)運(yùn)算程序定點(diǎn)數(shù)運(yùn)算程序v浮點(diǎn)數(shù)運(yùn)算程序浮點(diǎn)數(shù)運(yùn)算程序單片機(jī)系統(tǒng)43雖然單片機(jī)的每條指令能使計(jì)算機(jī)完成一種特定的操作。但要完成某一特定的任務(wù)還需要將這些指令按工作要求有序組合為一段完整的程序。程序?qū)嶋H上是一系列計(jì)算機(jī)指令的有序集合。我們把利用計(jì)算機(jī)的指令系統(tǒng)來合理地編寫出解決某個(gè)問題的程序的過
2、程,稱之為程序設(shè)計(jì)。4.1 簡(jiǎn)單匯編語言程序設(shè)計(jì) 單片機(jī)系統(tǒng)44編制程序的步驟編制程序的步驟1.1.任務(wù)分析(硬件、軟件系統(tǒng)分析)任務(wù)分析(硬件、軟件系統(tǒng)分析)2.2.確定算法和工作步驟;確定算法和工作步驟;3.3.程序總體設(shè)計(jì)和流程圖繪制程序總體設(shè)計(jì)和流程圖繪制關(guān)于流程圖符號(hào):關(guān)于流程圖符號(hào):開始、結(jié)束開始、結(jié)束-圓角矩形圓角矩形工作任務(wù)工作任務(wù)-矩形矩形判斷分支判斷分支-菱形菱形程序流向程序流向-程序連接程序連接-開始結(jié)束單片機(jī)系統(tǒng)454. 4. 分配內(nèi)存,確定程序與數(shù)據(jù)區(qū)存放地址;分配內(nèi)存,確定程序與數(shù)據(jù)區(qū)存放地址;5. 5. 編寫源程序;編寫源程序;6. 6. 調(diào)試、修改,最終確定程序
3、。調(diào)試、修改,最終確定程序。單片機(jī)系統(tǒng)46方法技巧方法技巧1. 1. 模塊化設(shè)計(jì)(按功能分:顯示、打模塊化設(shè)計(jì)(按功能分:顯示、打 印、輸入、發(fā)送等)印、輸入、發(fā)送等)2. 2. 盡量采用循環(huán)及子程序結(jié)構(gòu)(節(jié)省內(nèi)存)盡量采用循環(huán)及子程序結(jié)構(gòu)(節(jié)省內(nèi)存)單片機(jī)系統(tǒng)47匯編語言的規(guī)范匯編語言的規(guī)范匯編語言源程序由以下兩種指令構(gòu)成匯編語言源程序由以下兩種指令構(gòu)成匯編語句(指令語句)匯編語句(指令語句)偽指令(指示性語句)偽指令(指示性語句)匯編語句的格式:匯編語句的格式: 標(biāo)號(hào)標(biāo)號(hào):操作碼操作碼操作數(shù)操作數(shù);注釋;注釋數(shù)據(jù)表示形式:數(shù)據(jù)表示形式: 二進(jìn)制(二進(jìn)制(b b)、十六進(jìn)制)、十六進(jìn)制(h)
4、(h)、十進(jìn)制、十進(jìn)制(d(d或省略或省略) )、asciiascii碼(以單引號(hào)標(biāo)識(shí))碼(以單引號(hào)標(biāo)識(shí)) 3.3.偽指令:控制匯編用的特殊指令,這些指令不屬偽指令:控制匯編用的特殊指令,這些指令不屬 于指令系統(tǒng),不產(chǎn)生機(jī)器代碼。于指令系統(tǒng),不產(chǎn)生機(jī)器代碼。單片機(jī)系統(tǒng)484.1.1分支程序分支程序 org 1000hstart:mov dptr,#table mov a,20h movc a,a+dptr mov 21h,a sjmp $org 2000htable:db 0,1,4,9,16,25 end例1:變量存在內(nèi)部ram的20h單元中,其取值范圍:05,編成,查表法求其平方值單片機(jī)系
5、統(tǒng)494.1.1分支程序分支程序分支程序可根據(jù)要求分支程序可根據(jù)要求無條件無條件或或條件地條件地改變程序執(zhí)行流改變程序執(zhí)行流向。編寫分支程序主要在于正確使用向。編寫分支程序主要在于正確使用轉(zhuǎn)移指令轉(zhuǎn)移指令。分支。分支程序有:?jiǎn)畏种ЫY(jié)構(gòu)、雙分支結(jié)構(gòu)、多分支結(jié)構(gòu)(散程序有:?jiǎn)畏种ЫY(jié)構(gòu)、雙分支結(jié)構(gòu)、多分支結(jié)構(gòu)(散轉(zhuǎn))轉(zhuǎn))條件成立?下條指令程序段a單分支結(jié)構(gòu)yn條件成立?程序段ayn程序段a雙分支結(jié)構(gòu)單片機(jī)系統(tǒng)410分支程序分支程序可根據(jù)要求無條件或條件地改變程序執(zhí)行流分支程序可根據(jù)要求無條件或條件地改變程序執(zhí)行流向。編寫分支程序主要在于正確使用轉(zhuǎn)移指令。分支向。編寫分支程序主要在于正確使用轉(zhuǎn)移指令。
6、分支程序有:?jiǎn)畏种ЫY(jié)構(gòu)、雙分支結(jié)構(gòu)、多分支結(jié)構(gòu)(散程序有:?jiǎn)畏种ЫY(jié)構(gòu)、雙分支結(jié)構(gòu)、多分支結(jié)構(gòu)(散轉(zhuǎn))轉(zhuǎn))k=?程序段nn0程序段1多分支結(jié)構(gòu)程序段01單片機(jī)系統(tǒng)4111比較數(shù)的大小 入口條件:兩個(gè)帶符號(hào)數(shù)分別存在內(nèi)部ram 30h和31h單元中,試比較它們的大小,將較大的數(shù)存入32h單元中。xy為正:ov0,則xyov=1,則xyxy為負(fù):ov0,則xyov1,則xyx-y0?yov = 1?nyyn開始置初值32hy32hxov = 1?yx=y?nn單片機(jī)系統(tǒng)412 org0100hmov a,30h;取初值clrcsubb a,31h;xyjzdz1;x=y?jbov,eb1;xy0,
7、ov=1,xyajmp dz1;xy0, ov=0,xyjbov,dz1;xy0, ov=1,xy eb1:mova,31h;xyajmp js0 dz1:mova,30h;xy js0:mov32h,aend單片機(jī)系統(tǒng)413例例:設(shè)變量:設(shè)變量x x以補(bǔ)碼形式存放在片內(nèi)以補(bǔ)碼形式存放在片內(nèi)ram 30hram 30h單元單元中,變量中,變量y y與與x x的關(guān)系是:的關(guān)系是:編程根據(jù)編程根據(jù)x x的值求的值求y y值并放回原單元。值并放回原單元。0, 50,200,xxxhxxy2函數(shù)運(yùn)算 單片機(jī)系統(tǒng)414a=?y=x+50y=20hy=x0取x 即(30h) a開始存y 即y 20h結(jié)束單
8、片機(jī)系統(tǒng)415 org 1000hstart:mov a,30h jz next ;x=0,轉(zhuǎn)移 anl a,#80h ;保留符號(hào)位 jz ed ;x0,轉(zhuǎn)移 mov a,#05h ;x0,不轉(zhuǎn)移 add a,30h mov 30h,a sjmp ed next:mov 30h,#20h ed:sjmp $單片機(jī)系統(tǒng)416startstart:mov dptrmov dptr,#tab#tab mov a mov a,r7r7 add a,r7 add a,r7 ;r7r72 2a a mov r3,a ; mov r3,a ;暫存暫存r3r3 movc a,a+dptr movc a,a+d
9、ptr ;取高位地址;取高位地址 xch a xch a ,r3r3 inc a inc a movc a movc a,a+dptr a+dptr ;取低位地址取低位地址 mov dplmov dpl,a a mov dph mov dph,r3 r3 ;轉(zhuǎn)移地址送入;轉(zhuǎn)移地址送入dptrdptr clr a clr a jmp a+dptr jmp a+dptr tab: tab: dwdw p0 p0 dwdw p1 p1 dw dw pn pn例例:根據(jù)根據(jù)r7r7的內(nèi)容,轉(zhuǎn)至對(duì)應(yīng)的分支程序。的內(nèi)容,轉(zhuǎn)至對(duì)應(yīng)的分支程序。設(shè)設(shè)r7r7的內(nèi)容為的內(nèi)容為0 0n n,對(duì)應(yīng)的處理程序地址,對(duì)應(yīng)
10、的處理程序地址分別為分別為p0p0p7p7p0高位p0低位tabp1高位p1低位tab+2單片機(jī)系統(tǒng)417 4.3.3 4.3.3 循環(huán)程序循環(huán)程序循環(huán)程序一般由: 初始化部分 循環(huán)體部分-處理部分、修改部分、控制部分 結(jié)束部分其結(jié)構(gòu)一般有兩種: 先進(jìn)入處理部分,再控制循環(huán) 至少執(zhí)行一次循環(huán)體 先控制循環(huán),再進(jìn)入處理部分 循環(huán)體是否執(zhí)行,取決于判斷結(jié)果。單片機(jī)系統(tǒng)418開始設(shè)置循環(huán)初值循環(huán)處理循環(huán)修改結(jié)束處理結(jié)束循環(huán)結(jié)束?開始設(shè)置循環(huán)初值循環(huán)處理循環(huán)修改結(jié)束處理結(jié)束循環(huán)結(jié)束?nyyn單片機(jī)系統(tǒng)419循環(huán)控制的一般方法:循環(huán)控制的一般方法:v循環(huán)次數(shù)已知循環(huán)次數(shù)已知利用循環(huán)次數(shù)控制利用循環(huán)次數(shù)控
11、制v循環(huán)次數(shù)未知循環(huán)次數(shù)未知利用關(guān)鍵字控制利用關(guān)鍵字控制v利用利用“邏輯尺邏輯尺”根據(jù)根據(jù)“邏輯尺邏輯尺”的內(nèi)容,進(jìn)行控制。的內(nèi)容,進(jìn)行控制。單片機(jī)系統(tǒng)420例:統(tǒng)計(jì)數(shù)據(jù)塊的長(zhǎng)度 入口條件:內(nèi)部ram 30h開始的存儲(chǔ)區(qū)有若干個(gè)數(shù)據(jù),最后一個(gè)數(shù)據(jù)為字符ffh,結(jié)果存入40h單元。 org 0100hmain: mov r1,#30h;r1作為地址指針 clra;累加器a作為計(jì)數(shù)器loop:cjner1,#0ffh,next;與數(shù)據(jù)ff比較,不等轉(zhuǎn)移 sjmpjsh1;找到結(jié)束符號(hào),結(jié)束循環(huán)next:inc a;計(jì)數(shù)器加1 incr1;指針加l sjmp l00p;循環(huán)jshl:inca ;再加
12、入l個(gè)字符 mov30h,a;存結(jié)果 end 單片機(jī)系統(tǒng)4214.1.3 延時(shí)程序 10.1s延時(shí)程序(晶振為延時(shí)程序(晶振為12m)org 0100hmov r2,#200loopmov r3,#250djnzr3,$djnzr2,loopret 由于采用12m晶振,機(jī)器周期為1s,djnz的指令周 期 為 2 , 整 個(gè) 程 序 的 執(zhí) 行 時(shí) 間 為25020021s100000s0.1s 單片機(jī)系統(tǒng)42221s延時(shí)程序(晶振為延時(shí)程序(晶振為12m) org0100h movr1,#10 loop1:mov r2,#200 loop: mov r3,#250djnzr3,$djnzr2
13、,loopdjnzr1,loop1ret單片機(jī)系統(tǒng)423例: 50ms延時(shí)子程序。設(shè)晶振頻率為12mhz,則機(jī)器周期為1us。del: mov r7,#200 ;1mcdel1:mov r6,#123 ;1mc nop ;1mc djnz r6,$ ;2mc djnz r7,del1 ;2mc ret ;2mc延時(shí)時(shí)間:t=1+200(1+1+2*123)+2+2 50000us=50ms單片機(jī)系統(tǒng)4244.2 mcs-51常用子程序 4.2.1 代碼轉(zhuǎn)換類程序設(shè)計(jì) 4.2.2 查表程序設(shè)計(jì) 4.2.3 定點(diǎn)數(shù)運(yùn)算子程序 4.2.4 浮點(diǎn)數(shù)運(yùn)算子程序 單片機(jī)系統(tǒng)425子程序問題子程序問題子程序
14、設(shè)計(jì)時(shí)注意事項(xiàng):子程序設(shè)計(jì)時(shí)注意事項(xiàng):1. 1. 給子程序賦一個(gè)名字。實(shí)際為入口地址代號(hào)。給子程序賦一個(gè)名字。實(shí)際為入口地址代號(hào)。2. 2. 要能正確傳遞參數(shù):要能正確傳遞參數(shù): 入口條件:子程序中要處理的數(shù)據(jù)如何給予。入口條件:子程序中要處理的數(shù)據(jù)如何給予。 出口條件:子程序處理結(jié)果如何存放。出口條件:子程序處理結(jié)果如何存放。 (寄存器、存儲(chǔ)器、堆棧方式)(寄存器、存儲(chǔ)器、堆棧方式)3. 3. 保護(hù)與恢復(fù)現(xiàn)場(chǎng):保護(hù)與恢復(fù)現(xiàn)場(chǎng): 保護(hù)現(xiàn)場(chǎng):保護(hù)現(xiàn)場(chǎng):壓棧指令壓棧指令pushpush 恢復(fù)現(xiàn)場(chǎng):恢復(fù)現(xiàn)場(chǎng):彈出指令彈出指令poppop4. 4. 子程序可以嵌套子程序可以嵌套單片機(jī)系統(tǒng)426 4.2
15、.1代碼轉(zhuǎn)換類程序設(shè)計(jì)代碼轉(zhuǎn)換類程序設(shè)計(jì) 1單字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換成雙字節(jié)ascii碼 表4-1 十六進(jìn)制數(shù)與ascii碼之間的關(guān)系十 六進(jìn)制數(shù)十 六進(jìn)制數(shù)十 六進(jìn)制數(shù)十 六進(jìn)制數(shù) 0 30h 4 34h 8 38h c 43h 1 31h 5 35h 9 39h d 44h 2 32h 6 36h a 41h e 45h 3 33h 7 37h b 42h f 46h單片機(jī)系統(tǒng)427入口條件:待轉(zhuǎn)換的單字節(jié)十六進(jìn)制數(shù)在寄存器r2中。出口:高四位的ascii碼在a中,低四位的ascii碼在b中。 org 0100h mov a,r2 mov b,a ;暫存待轉(zhuǎn)換的單字節(jié)十六進(jìn)制數(shù) lcallms
16、1 ;轉(zhuǎn)換低四位 xch a,b;存放低四位的ascii碼 swapa ;準(zhǔn)備轉(zhuǎn)換高四位 lcallms1 ;轉(zhuǎn)換高四位 sjmp$ms1:anla,#0fh;將累加器的低四位轉(zhuǎn)換成 ascii 碼 add a,#90h da a addca,#40h da a ret單片機(jī)系統(tǒng)428將多位十六進(jìn)制數(shù)轉(zhuǎn)換成ascii碼,設(shè)r0指向十六進(jìn)制數(shù)低位, r2存放字節(jié)數(shù),轉(zhuǎn)換后r1指向ascii碼高位。htasc: mov a,r0 ;取十六進(jìn)制數(shù) anl a,#0fh ;取低四位 add a,#15 ;偏移修正 movc a,a+pc ;查表得ascii碼 mov r1,a ;保存 inc r1 m
17、ov a,r0 ;取十六進(jìn)制數(shù)高四位 swap a ; anl a,#0f0h add a,#06h ;偏移修正 movc a,a+pc ;查表 mov r1,a ;保存 inc r0 ;指向下一單元 inc r1 djnz r2,htasc retasctab:db 30h,31h,32h,33h,34h,35h,36h,37h db 38h,39h,41h,42h,43h,44h,45h,46h單片機(jī)系統(tǒng)4292.ascii碼轉(zhuǎn)換成十六進(jìn)制數(shù)碼轉(zhuǎn)換成十六進(jìn)制數(shù) 入口條件:待轉(zhuǎn)換的 ascii 碼在r2中。 出口:轉(zhuǎn)換后的十六進(jìn)制數(shù)在r3中。org 0100hmov a,r2 subb a,
18、#30h clr c jnb acc.4,m1 subb a,#7 m1:mov r3,a sjmp $end單片機(jī)系統(tǒng)4303.3.十六進(jìn)制整數(shù)轉(zhuǎn)換成單字節(jié)碼整數(shù)十六進(jìn)制整數(shù)轉(zhuǎn)換成單字節(jié)碼整數(shù) 入口條件:待轉(zhuǎn)換的單字節(jié)十六進(jìn)制整數(shù)在r2中。 出口:轉(zhuǎn)換后的碼整數(shù)(十位和個(gè)位)在r5中,百位在r3中。 mova,r2 hbcd:movb,#100;分離出百位,存放在 r3中 divab mov r3,a mova,#10;余數(shù)繼續(xù)分離十位和個(gè)位 xcha,b divab swap a orla,b ;將十位和個(gè)位拼裝成碼 movr5,a sjmp$end單片機(jī)系統(tǒng)4314雙字節(jié)十六進(jìn)制整數(shù)轉(zhuǎn)換
19、成雙字節(jié)碼整數(shù) 入口條件:待轉(zhuǎn)換的雙字節(jié)十六進(jìn)制整數(shù)在r6、r7中。出口:轉(zhuǎn)換后的三字節(jié)碼整數(shù)在r3、r4、r5中。 org 0100hhb2:clra;碼初始化 movr3,a movr4,a movr5,a mov r2,#10h;轉(zhuǎn)換雙字節(jié)十六進(jìn)制整數(shù)hb3:mov a,r7 ;從高端移出待轉(zhuǎn)換數(shù)的一位到 cy 中 rlca mov r7,a mova,r6 rlca單片機(jī)系統(tǒng)432 movr6,a mova,r5;碼帶進(jìn)位自身相加,相當(dāng)于乘 addca,r5 daa ;十進(jìn)制調(diào)整 movr5,a mova,r4 addc a,r4 daa movr4,a mova,r3 addca,r
20、3 movr3,a;雙字節(jié)十六進(jìn)制數(shù)的萬位數(shù)不超過,不用調(diào)整 djnzr2,hb3;判斷16位處理完? sjmp$ end單片機(jī)系統(tǒng)4335雙字節(jié)碼整數(shù)轉(zhuǎn)換成雙字節(jié)十六進(jìn)制整數(shù) 入口條件:待轉(zhuǎn)換的雙字節(jié)碼整數(shù)在r2、r3中。出口:轉(zhuǎn)換后的雙字節(jié)十六進(jìn)制整數(shù)仍在r2、r3中。 org 0100hbh2:mova,r3;將低字節(jié)轉(zhuǎn)換成十六進(jìn)制 lcallbcd1 mov r3,a mov a,r2;將高字節(jié)轉(zhuǎn)換成十六進(jìn)制 lcallbcd1 mov b,#100;擴(kuò)大一百倍 mul ab add a,r3;和低字節(jié)按十六進(jìn)制相加 mov r3,a clr a單片機(jī)系統(tǒng)434 addca,b mov
21、 r2,a sjmp $bcd1:movb,#10h;分離十位和個(gè)位 div ab mov r4,b ;暫存?zhèn)€位 mov b,#10;將十位轉(zhuǎn)換成十六進(jìn)制 mul ab adda,r4;十六進(jìn)制加上個(gè)位 retend 單片機(jī)系統(tǒng)4354.2.2 查表程序設(shè)計(jì) movc a,a+dptr movc a,a+pc 1查表求查表求ascii碼碼 入口條件:r0低四位有一個(gè)十六進(jìn)制數(shù)(0f)。 出口:將查表找出的相應(yīng)ascii碼并送回r0中。單片機(jī)系統(tǒng)436 org0100h mova,r0 anla,#0fh;屏蔽高4位 adda,#03h;查表指令pc值與表格pc值相差3字節(jié) movca,a+pc
22、;查表 movr0,a;存結(jié)果 sjmp$ asctab:db 0,1,2,3,4,5,6,7 db 8,9,a,b,c,d,e,f單片機(jī)系統(tǒng)4374.2.3 定點(diǎn)數(shù)運(yùn)算子程序 1多字節(jié)碼加法 入口條件:字節(jié)數(shù)在r7中,被加數(shù)在30h起始單元中,加數(shù)在40h起始單元中。 出口:和在30h起始單元中,最高位進(jìn)位在cy中。org 0100hmov r7,#03hmov r0,#30hmov r1,#40hmov a,r7 ;取字節(jié)數(shù)至 r2 中 mov r2,a add a,r0;初始化數(shù)據(jù)指針單片機(jī)系統(tǒng)438 movr0,amov a,r2add a,r1mov r1,aclr c bb1:de
23、c r0;調(diào)整數(shù)據(jù)指針dec r1mov a,r0addc a,r1;按字節(jié)相加daa;十進(jìn)制調(diào)整mov r0,a;和存回 r0 中djnz r2,bb1;處理完所有字節(jié)end單片機(jī)系統(tǒng)4392多字節(jié)碼減法多字節(jié)碼減法入口條件:字節(jié)數(shù)在 r7 中,被減數(shù)在r0 中,減數(shù)在 r1 中。 出口:差在 r0 中,最高位借位在cy中。 org0100h bcdb:lcallmn1 ;減數(shù) r1 十進(jìn)制取補(bǔ) lcallbcda ;按多字節(jié)碼加法處理 cplc;將補(bǔ)碼加法的進(jìn)位標(biāo)志轉(zhuǎn)換成借位標(biāo)志 movf0,c lcallmn1 ;恢復(fù)減數(shù) r1 的原始值 movc,f0;恢復(fù)借位標(biāo)志 ret單片機(jī)系統(tǒng)4
24、40 mn1:mova,r0 ;r1 十進(jìn)制取補(bǔ)子程序入口 xch a,r1;交換指針 xch a,r0 lcallneg;通過 r0 實(shí)現(xiàn) r1 取補(bǔ) mov a,r0 xch a,r1 ;換回指針 xch a,r0 ret bcda:mov a,r7 ;取字節(jié)數(shù)至 r2 中 mov r2,a add a,r0 ;初始化數(shù)據(jù)指針 mov r0,a mov a,r2單片機(jī)系統(tǒng)441 add a,r1 mov r1,a clr c bcd1:decr0;調(diào)整數(shù)據(jù)指針 decr1 mova,r0 addca,r1 ;按字節(jié)相加 da a;十進(jìn)制調(diào)整 movr0,a;和存回 r0 中 djnzr2,
25、bcd1;處理完所有字節(jié) ret neg:mova,r7;bcd碼取補(bǔ)子程序 deca單片機(jī)系統(tǒng)442 movr2,a mova,r0 movr3,a neg0: clr c mova,#99h subba,r0 ;按字節(jié)十進(jìn)制取補(bǔ) movr0,a;存回 r0 中 incr0 ;調(diào)整數(shù)據(jù)指針 djnzr2,neg0 ;處理完( r2 )字節(jié) mova,#9ah ;最低字節(jié)單獨(dú)取補(bǔ) subb a,r0 movr0,a mova,r3 ;恢復(fù)指針 mov r0,a ret 單片機(jī)系統(tǒng)443 4雙字節(jié)二進(jìn)制無符號(hào)數(shù)乘法子程序雙字節(jié)二進(jìn)制無符號(hào)數(shù)乘法子程序 入口條件:被乘數(shù)在r2、r3 中,乘數(shù)在r6
26、、r7中。 出口:乘積在 r2 、 r3 、 r4 、 r5 中。org 0100h muld:mov a,r3;計(jì)算 r3 乘 r7 movb,r7 mulab movr4,b ;暫存部分積 movr5,a mova,r3;計(jì)算 r3 乘 r6 movb,r6 mulab adda,r4;累加部分積 movr4,a單片機(jī)系統(tǒng)444 clra addca,b movr3,a mova,r2 ;計(jì)算 r2 乘 r7 movb,r7 mulab adda,r4;累加部分積 movr4,a mova,r3 addca,b movr3,a clra rlca單片機(jī)系統(tǒng)445 xcha,r2 ;計(jì)算 r
27、2 乘 r6 movb,r6 mulab adda,r3 ;累加部分積 movr3,a mova,r2 addca,b movr2,a ret單片機(jī)系統(tǒng)446 6雙字節(jié)二進(jìn)制無符號(hào)數(shù)除法子程序雙字節(jié)二進(jìn)制無符號(hào)數(shù)除法子程序 入口條件:被除數(shù)在 r2 、 r3 、 r4 、 r5 中,除數(shù)在 r6 、 r7 中。 出口: ov=0 時(shí),雙字節(jié)商在 r2 、 r3 中, ov=1 時(shí)溢出。org 0100h divd:clrc;比較被除數(shù)和除數(shù) mova,r3 subba,r7 mova,r2 subba,r6 jc dvd1 setbov ;溢出 ret單片機(jī)系統(tǒng)447 dvd1:mov b,#
28、10h;計(jì)算雙字節(jié)商 dvd2:clrc;部分商和余數(shù)同時(shí)左移一位 mova,r5 rlca movr5,a mova,r4 rlca movr4,a mova,r3 rlca movr3,a xcha,r2 rlca單片機(jī)系統(tǒng)448 xcha,r2 movf0,c ;保存溢出位 clrc subba,r7;計(jì)算( r2r3 r6r7 ) movr1,a mova,r2 subba,r6 anlc,/f0;結(jié)果判斷 jc dvd3 movr2,a;夠減,存放新的余數(shù) mova,r1 movr3,a incr5;商的低位置一單片機(jī)系統(tǒng)449 dvd3:djnz b,dvd2 ;計(jì)算完十六位商(
29、r4r5 ) mova,r4;將商移到 r2r3 中 movr2,a mova,r5 movr3,a clrov;設(shè)立成功標(biāo)志 ret單片機(jī)系統(tǒng)4504.2.4浮點(diǎn)數(shù)運(yùn)算子程序浮點(diǎn)數(shù)運(yùn)算子程序 1浮點(diǎn)數(shù)的表示浮點(diǎn)數(shù)的表示 (1)二進(jìn)制浮點(diǎn)操作數(shù) 用三個(gè)字節(jié)表示,第一個(gè)字節(jié)的最高位為數(shù)符,其余七位為階碼(補(bǔ)碼形式),第二字節(jié)為尾數(shù)的高字節(jié),第三字節(jié)為尾數(shù)的低字節(jié),尾數(shù)用雙字節(jié)純小數(shù)(原碼)來表示。當(dāng)尾數(shù)的最高位為時(shí),便稱為規(guī)格化浮點(diǎn)數(shù),簡(jiǎn)稱操作數(shù)單片機(jī)系統(tǒng)451 (2 2)十進(jìn)制浮點(diǎn)操作數(shù))十進(jìn)制浮點(diǎn)操作數(shù) 用三個(gè)字節(jié)表示,第一個(gè)字節(jié)的最高位為數(shù)符,用來表示正負(fù)數(shù)(0表示正數(shù),1表示負(fù)數(shù))其余七
30、位為階碼(二進(jìn)制補(bǔ)碼形式),第二字節(jié)為尾數(shù)的高字節(jié),第三字節(jié)為尾數(shù)的低字節(jié),尾數(shù)用雙字節(jié)bcd碼純小數(shù)(原碼)來表示。當(dāng)十進(jìn)制數(shù)的絕對(duì)值大于時(shí),階碼就等于整數(shù)部分的位數(shù)。 例如:156.6 的階碼是03h,156.6 的階碼是 83h ; 當(dāng)十進(jìn)制數(shù)的絕對(duì)值小于 1 時(shí),階碼就等于 80h 減去小數(shù)點(diǎn)后面零的個(gè)數(shù)。 例如 :0.00362的階碼是 7eh ,0.00362 的階碼是 0feh 。 例如:有一個(gè)十進(jìn)制浮點(diǎn)操作數(shù)存放在30h、31h、32h中,數(shù)值是0.07315,即0.7315 乘以10 的1 次方,則階碼為7fh,若加上數(shù)符(30h)=0ffh,31h=73h,(32h)=15
31、h 。單片機(jī)系統(tǒng)452 (3)運(yùn)算精度)運(yùn)算精度 單次定點(diǎn)運(yùn)算精度為結(jié)果最低位的當(dāng)量值;單次二進(jìn)制浮點(diǎn)算術(shù)運(yùn)算的精度優(yōu)于十萬分之三;單次二進(jìn)制浮點(diǎn)超越函數(shù)運(yùn)算的精度優(yōu)于萬分之一;bcd碼浮點(diǎn)數(shù)本身的精度比較低(萬分之一到千分之一),不宜作為運(yùn)算的操作數(shù),僅用于輸入或輸出時(shí)的數(shù)制轉(zhuǎn)換。不管那種數(shù)據(jù)格式,隨著連續(xù)運(yùn)算的次數(shù)增加,精度都會(huì)下降。 單片機(jī)系統(tǒng)453 2浮點(diǎn)數(shù)加減法子程序浮點(diǎn)數(shù)加減法子程序 入口條件:被加數(shù)在 r0 中,加數(shù)在 r1 中。被減數(shù)在 r0 中,減數(shù)在 r1 中。 當(dāng)f0=0時(shí),程序作浮點(diǎn)數(shù)加法運(yùn)算;當(dāng)f0=1時(shí),程序作浮點(diǎn)數(shù)減法運(yùn)算。 出口: ov=0 時(shí),和(差)仍在 r
32、0 中, ov=1 時(shí),溢出。單片機(jī)系統(tǒng)454 org0100h fadd:clrf0 ;設(shè)立加法標(biāo)志 sjmpas ;計(jì)算代數(shù)和 fsub:setbf0 ;設(shè)立減法標(biāo)志 as: lcallmvr1 ;計(jì)算代數(shù)和。先將 r1 傳送到第二工作區(qū) mov c,f0 ;用加減標(biāo)志來校正第二操作數(shù)的有效符號(hào) rrca xrla,r1 movc,acc.7asn:mov 1eh,c ;將第二操作數(shù)的有效符號(hào)存入位 1eh 中 xrla,r0 ;與第一操作數(shù)的符號(hào)比較 rlcamovf0,c ;保存比較結(jié)果 lcallmvr0;將 r0 傳送到第一工作區(qū)中 lcallas1 ;在工作寄存器中完成代數(shù)運(yùn)算m
33、ov0:incr0 ;將結(jié)果傳回到 r0 中的子程序入口 incr0單片機(jī)系統(tǒng)455 mov a,r4 ;傳回尾數(shù)的低字節(jié) mov r0,a decr0 mov a,r3 ;傳回尾數(shù)的高字節(jié) mov r0,a decr0 mova,r2 ;取結(jié)果的階碼 movc,1fh ;取結(jié)果的數(shù)符 movacc.7,c ;拼入階碼中 movr0,a clracc.7 ;不考慮數(shù)符 clrov ;清除溢出標(biāo)志 cjne a,#3fh,mv01 ;階碼是否上溢? setb ov ;設(shè)立溢出標(biāo)志mv01:mova,r0 ;取出帶數(shù)符的階碼 retmvr0:mova,r0 ;將 r0 傳送到第一工作區(qū)中的子程序
34、mov c,acc.7 ;將數(shù)符保存在位 1fh 中 mov 1fh,c 單片機(jī)系統(tǒng)456 mov c,acc.6 ;將階碼擴(kuò)充為補(bǔ)碼 mov acc.7,c mov r2,a ;存放在 r2 中 inc r0 mov a,r0 ;將尾數(shù)高字節(jié)存放在 r3 中 mov r3,a inc r0 mov a,r0 ;將尾數(shù)低字節(jié)存放在 r4 中 mov r4,a dec r0 ;恢復(fù)數(shù)據(jù)指針 dec r0 retmvr1: mov a,r1 ;將 r1 傳送到第二工作區(qū)中的子程序 mov c,acc.7 ;將數(shù)符保存在位 1eh 中 mov 1eh,c mov c,acc.6 ;將階碼擴(kuò)充為補(bǔ)碼
35、mov acc.7,c mov r5,a ;存放在 r5 中 inc r1 單片機(jī)系統(tǒng)457 mov a,r1 ;將尾數(shù)高字節(jié)存放在 r6 中mov r6,a inc r1 mov a,r1 ;將尾數(shù)低字節(jié)存放在 r7 中 mov r7,a dec r1 ;恢復(fù)數(shù)據(jù)指針 dec r1 retas1: mov a,r6 ;讀取第二操作數(shù)尾數(shù)高字節(jié) orl a,r7 jz as2 ;第二操作數(shù)為零,不必運(yùn)算 mov a,r3 ;讀取第一操作數(shù)尾數(shù)高字節(jié) orl a,r4 jnz eq mov a,r6 ;第一操作數(shù)為零,結(jié)果以第二操 作數(shù)為準(zhǔn) 單片機(jī)系統(tǒng)458 mov r3,a mov a,r7
36、mov r4,a mov a,r5 mov r2,a mov c,1eh mov 1fh,cas2: reteq: mov a,r2 ;對(duì)階,比較兩個(gè)操作數(shù)的階碼 xrl a,r5 jz as4 ;階碼相同,對(duì)階結(jié)束 j b a c c . 7 , e q 3 ; 階 符 互 異 mov a,r2 ;階符相同,比較大小 clr c subb a,r5 jc eq4eq2: clrc ;第二操作數(shù)右規(guī)一次 m o va , r 6 ; 尾 數(shù) 縮 小 一 半 單片機(jī)系統(tǒng)459 rrca movr6,a mova,r7 rrca movr7,a i n cr 5 ; 階 碼 加 一 orla,r6
37、 ;尾數(shù)為零否? jnzeq ;尾數(shù)不為零,繼續(xù)對(duì)階 mov a,r2 ;尾數(shù)為零,提前結(jié)束對(duì)階 movr5,a sjmpas4eq3: mova,r2 ;判斷第一操作數(shù)階符 jnbacc.7,eq2 ;如為正,右規(guī)第二操作數(shù)eq4: clrc lcallrr1 ;第一操作數(shù)右規(guī)一次 o r l a , r 3 ; 尾 數(shù) 為 零 否 ? jnz eq ;不為零,繼續(xù)對(duì)階 mov a,r5 ;尾數(shù)為零,提前結(jié)束對(duì)階 mov r2,a單片機(jī)系統(tǒng)460 as4: jb f0,as5 ;尾數(shù)加減判斷 m o va , r 4 ; 尾 數(shù) 相 加 adda,r7 movr4,a mova,r3 addca,r6 movr3,a jncas2 l
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆浙江省富陽二中高三上物理期中統(tǒng)考模擬試題含解析
- 2025屆貴州省北京師范大學(xué)貴陽附中高三上物理期中綜合測(cè)試試題含解析
- 2025屆江蘇省五校物理高一上期中復(fù)習(xí)檢測(cè)試題含解析
- 內(nèi)蒙古鄂爾多斯市康巴什區(qū)鄂爾多斯一中2025屆高二物理第一學(xué)期期中監(jiān)測(cè)模擬試題含解析
- 2025屆山東省泰安市泰山區(qū)泰安一中物理高一第一學(xué)期期中經(jīng)典模擬試題含解析
- 2025屆浙江省紹興市諸暨市高二物理第一學(xué)期期末達(dá)標(biāo)檢測(cè)模擬試題含解析
- 安徽省合肥市眾興中學(xué)2025屆物理高三第一學(xué)期期中經(jīng)典試題含解析
- 2025屆北京市中央美術(shù)學(xué)院附屬實(shí)驗(yàn)學(xué)校高一物理第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 2025屆青海省海北市高三物理第一學(xué)期期中檢測(cè)模擬試題含解析
- 2025屆河南濮陽建業(yè)國(guó)際學(xué)校物理高二上期末復(fù)習(xí)檢測(cè)模擬試題含解析
- 醫(yī)院培訓(xùn)課件:《危重患者護(hù)理文書書寫規(guī)范》
- 小學(xué)數(shù)學(xué)創(chuàng)新作業(yè)設(shè)計(jì)研究的中期成果
- 糖皮質(zhì)激素在呼吸科應(yīng)用課件
- 二年級(jí)《小鯉魚躍龍門》閱讀題及答案
- 美術(shù)新課標(biāo)培訓(xùn)課件
- 醫(yī)院醫(yī)療質(zhì)量管理委員會(huì)會(huì)議記錄五篇
- WIFI基礎(chǔ)知識(shí)簡(jiǎn)介課件
- 以冬奧會(huì)為主題創(chuàng)業(yè)計(jì)劃書
- 企業(yè)合規(guī)與風(fēng)險(xiǎn)管理的法律責(zé)任與風(fēng)險(xiǎn)承擔(dān)
- 運(yùn)用PDCA提高病歷質(zhì)量
- 工會(huì)愛心母嬰室管理制度
評(píng)論
0/150
提交評(píng)論