單片機(jī)實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)一
數(shù)據(jù)傳送 (RA M – 〉XRA M)
一、實(shí)驗(yàn)?zāi)康?/p>
熟悉星研集成環(huán)境軟件或熟悉 Keil C51集成環(huán)境軟件得使用方法。
熟悉 MCS51 匯編指令,能自己編寫簡(jiǎn)單得程序,掌握數(shù)據(jù)傳輸?shù)梅椒ā?/p>
二、實(shí)驗(yàn)內(nèi)容
1、熟悉星研集成環(huán)境軟件或熟悉Keil C51 集成環(huán)境軟件得安裝與使用方法。
2、編寫程序,實(shí)現(xiàn)內(nèi)外部數(shù)據(jù)段得傳送、校驗(yàn)。
三、程序框圖
開(kāi)始 堆棧指針初始化計(jì)數(shù)器、地址初始化內(nèi)部RAM數(shù)據(jù)傳送外部RAM一次地址指針+1
計(jì)數(shù)器-1=0?計(jì)數(shù)器、地址指針復(fù)位取內(nèi)部RAM和對(duì)應(yīng)的外部RAM比較是否相等地址指針+1
計(jì)數(shù)器-1=0?傳送正確傳送錯(cuò)誤結(jié)束NNYYYN數(shù)據(jù)傳送程序框圖 四、實(shí)驗(yàn)步驟
MAR 據(jù)數(shù)部外測(cè)檢,序程試調(diào)式方點(diǎn)斷、步單用使;據(jù)數(shù)入輸中HF3~ H03 MAR 部?jī)?nèi)在?得 1000H ~100FH 中得內(nèi)容。熟悉查瞧特殊功能寄存器、內(nèi)部數(shù)據(jù) RAM、外部數(shù)據(jù)空間得各種方法. 五、程序清單
;將內(nèi)部RAM Address1 開(kāi)始得 16個(gè)字節(jié)送到外部RAM從 Address2開(kāi)始得單元里,再作比較。
Address1 DATA 30H
Address2 XDATA 1000H
ORG 0000H
LJMP STAR
ORG 0100H
STAR: MOV SP,#60H
MOV R0,#Address1
MOV DPTR,#Address2
MOV R7,#10H
STAR1: MOV A,R0 ;傳送
MOVX DPTR,A
INC R0
INC DPTR
DJNZ R7,STAR1
MOV R0,#Address1
MOV DPTR,#Address2
MOV R7,#10H
STAR2: MOV B,R0 ;比較
MOVX A,DPTR
CJNE A,B,STAR3
INC R0
INC DPTR
DJNZ R7,STAR2
SJMP $ ;傳送正確 STAR3: SJMP $ ;傳送錯(cuò)誤
END
實(shí)驗(yàn)二
雙字節(jié) D BCD 碼( ( 十進(jìn)制數(shù)) ) 加法
一、實(shí)驗(yàn)?zāi)康?/p>
熟悉51 匯編指令,學(xué)會(huì)使用星研集成環(huán)境軟件,能自己編寫簡(jiǎn)單得程序,熟悉BCD 碼,了解如何調(diào)用系統(tǒng)提供得子程序. 二、實(shí)驗(yàn)內(nèi)容
從鍵盤上輸入4位被加數(shù)、加數(shù),實(shí)現(xiàn)雙字節(jié) BCD 碼(四位數(shù))得加法,結(jié)果顯示在數(shù)碼管上;熟悉使用斷點(diǎn)、單步進(jìn)入、單步、運(yùn)行到光標(biāo)處、修改 PC 指針、全速運(yùn)行等各種調(diào)試手段;熟悉查瞧特殊功能寄存器、內(nèi)部數(shù)據(jù)RAM、外部數(shù)據(jù)空間得各種方法。
三、實(shí)驗(yàn)框圖
開(kāi)始初始化堆棧設(shè)定"先清LED,再接收鍵輸入"標(biāo)志通過(guò)鍵盤獲得4位被加數(shù)(壓縮BCD碼)置位"接收到第一個(gè)鍵后才清除LED"標(biāo)志通過(guò)鍵盤獲得4位加數(shù)(壓縮BCD碼)被加數(shù)與加數(shù)的低位字節(jié)不帶進(jìn)位加法被加數(shù)與加數(shù)的高位字節(jié)帶進(jìn)位加法十進(jìn)制調(diào)整十進(jìn)制調(diào)整壓縮BCD碼(結(jié)果)轉(zhuǎn)換為非壓縮BCD碼高位0消隱顯示結(jié)果雙字節(jié)BCD加法程序框圖
四、實(shí)驗(yàn)步驟
、1 :明說(shuō)線連?D3 區(qū) :CLK -- B2區(qū):2M D3 區(qū) :CS -- A3 區(qū):CS5 D3區(qū) :A0 -— A3區(qū):A0 2、在 F4 區(qū)得鍵盤上輸入 4 位被加數(shù)、加數(shù) 3、結(jié)果顯示在 F4 區(qū)得數(shù)碼管上 五、程序清單
EXTRN CODE(Display8, GetBCDKey)
Buffer DATA 30H ;8 字節(jié)顯示緩沖區(qū) F1 BIT 0D1H ;PSW、1
ORG 0000H
LJMP START
ORG 0100H
START: MOV SP,#60H
CLR F1 ;先清除顯示,再接收鍵輸入 START1: MOV R0,#buffer
MOV A,#4 ;按鍵次數(shù)
LCALL GetBCDKey ;得到雙字節(jié)十進(jìn)制數(shù)(被加數(shù))
SETB F1 ;接收到第一個(gè)鍵,才清除顯示
MOV R0,#buffer+4
MOV A,#4 ;按鍵次數(shù)
LCALL GetBCDKey ;得到雙字節(jié)十進(jìn)制數(shù)(加數(shù))
MOV A,buffer+1
ADD A,buffer+5
DA A
MOV buffer+5,A
MOV A,buffer
ADDC A,buffer+4
DA A
MOV buffer+4,A
CLR A
RLC A
Display: PUSH ACC ;顯示結(jié)果
MOV R0,#buffer
MOV A,buffer+5 ;低位
ACALL B1toB2 ;壓縮 BCD 碼轉(zhuǎn)換成非壓縮 BCD 碼
MOV A,buffer+4 ;高位
ACALL B1toB2
POP ACC ;進(jìn)位
ACALL B1toB2
MOV R0,#10H ;最高二位消隱
INC R0
MOV R0,#10H
MOV R0,#buffer+5
MOV R7,#5
ACALL BlackDisplay ;將高位 0 消隱
MOV R0,#buffer
LCALL Display8
SJMP START1
;將一個(gè)字節(jié)壓縮 BCD 碼轉(zhuǎn)換成二個(gè)字節(jié)非壓縮 BCD 碼 B1toB2: PUSH ACC
ANL A,#0FH
MOV R0,A
INC R0
POP ACC
ANL A,#0F0H
SWAP A
MOV R0,A
INC R0
RET
Bla ckDisplay: MOV A,R0 ;將高位0消隱
JNZ Exit
MOV A,#10H
MOV R0,A
DEC R0
DJNZ R7,BlackDisplay
Exit: RET
END
實(shí)驗(yàn)三
雙字節(jié) D BCD 碼(十進(jìn)制數(shù))減法
一、實(shí)驗(yàn)?zāi)康?/p>
熟悉51 匯編指令,學(xué)會(huì)使用星研集成環(huán)境軟件,掌握匯編語(yǔ)言得設(shè)計(jì)與調(diào)試方法.能瞧懂程序流程框圖,能自己設(shè)計(jì)程序,熟悉 BCD 碼、補(bǔ)碼,了解如何調(diào)用系統(tǒng)提供得子程序。
二、實(shí)驗(yàn)內(nèi)容
從鍵盤上輸入4位被減數(shù)、減數(shù),實(shí)現(xiàn)雙字節(jié) BCD 碼(四位數(shù))得減法,結(jié)果顯示在數(shù)碼管上;進(jìn)一步熟悉使用斷點(diǎn)、單步進(jìn)入、單步、運(yùn)行到光標(biāo)處、修改 PC指針、全速運(yùn)行等各種調(diào)試手段;熟悉查瞧特殊功能寄存器、內(nèi)部數(shù)據(jù) RAM、外部數(shù)據(jù)空間得各種方法。
三、程序框圖
設(shè)定"先清LED,再接收鍵輸入"標(biāo)志堆棧初始化開(kāi)始通過(guò)鍵盤獲得雙字節(jié)十進(jìn)制被減數(shù)(壓縮BCD碼)置位"接收到第一個(gè)鍵后才清除LED"標(biāo)志通過(guò)鍵盤獲得雙字節(jié)十進(jìn)制減數(shù)(壓縮BCD碼)減數(shù)進(jìn)行十進(jìn)制取補(bǔ)雙字節(jié)十進(jìn)制加法操作C=1?C=0,有進(jìn)位(結(jié)果為負(fù)),再執(zhí)行一次求補(bǔ)運(yùn)算,調(diào)整為正數(shù)高位0消隱,若結(jié)果為負(fù),前面加上"-"顯示結(jié)果YN雙字節(jié)十進(jìn)制減法程序框圖
四、實(shí)驗(yàn)步驟
、1 :明說(shuō)線連?D3 區(qū) :CLK —— B2區(qū):2M
D3 區(qū) :CS —— A3 區(qū):CS5 D3 區(qū) :A0 —— A3 區(qū):A0 2、在 F4 區(qū)得鍵盤上輸入 4 位被減數(shù)、減數(shù) 3、結(jié)果顯示在 F4區(qū)得數(shù)碼管上 五、程序清單
EXTRN CODE(Display8, GetBCDKey)
Buffer DATA 30H ;8 字節(jié)顯示緩沖區(qū) F1 BIT 0D1H ;PSW、1
ORG 0000H
LJMP START
ORG 0100H
START:
MOV SP,#60H
CLR F1 ;先清除顯示,再接收鍵輸入 START1: MOV R0,#buffer
MOV A,#4 ;按鍵次數(shù)
LCALL GetBCDKey ;得到雙字節(jié)十進(jìn)制數(shù)(被減數(shù))
SETB F1 ;接收到第一個(gè)鍵,才清除顯示
MOV R0,#buffer+4
MOV A,#4 ;按鍵次數(shù)
LCALL GetBCDKey ;得到雙字節(jié)十進(jìn)制數(shù)(減數(shù))
MOV A,#9AH
CLR C
SUBB A,buffer+5
MOV buffer+5,A
MOV A,#99H
CLR C
SUBB A,buffer+4
MOV buffer+4,A ;減數(shù)取補(bǔ)
MOV A,buffer+1
ADD A,buffer+5
DA A
MOV buffer+5,A
MOV A,buffer
ADDC A,buffer+4
DA A
MOV buffer+4,A
MOV F0,C ;借位標(biāo)志
JC Display
MOV A,#9AH
SUBB A,buffer+5
MOV buffer+5,A
MOV A,#99H
SUBB A,buffer+4
XCH A,buffer+5
ADD A,#00H
DA A
XCH A,buffer+5
ADDC A,#00H
DA A
MOV buffer+4,A
Display:
MOV R0,#buffer ;顯示結(jié)果
MOV A,buffer+5 ;低位
ACALL B1toB2 ;壓縮BCD 碼轉(zhuǎn)換成非壓縮 BCD 碼
MOV A,buffer+4 ;高位
ACALL B1toB2
MOV R0,#10H ;最高四位消隱
INC R0
MOV R0,#10H
INC R0
MOV R0,#10H
INC R0
MOV R0,#10H
MOV R0,#buffer+3
MOV R7,#3
ACALL BlackDisplay ;將高位 0 消隱
MOV R0,#buffer
LCALL Display8
SJMP START1
BlackDi splay:
MOV A,R0 ;將高位 0 消隱
JNZ Exit
MOV A,#10H
MOV R0,A
DEC R0
DJNZ R7, B l a c kDisplay
Exit: JB F0,Exit1
INC R0
MOV R0,#11H ;負(fù)數(shù)標(biāo)志 Exit1: RET
B1toB2: PUSH ACC
ANL A,#0FH
MOV R0,A
INC R0
POP ACC
ANL A,#0F0H
SWAP A
MOV R0,A
INC R0
RET
BlackDispl ay:
MOV A,R0
JNZ Exit
MOV A,#10H
MOV R0,A
DEC R0
DJNZ R7,BlackDisplay
Exit:
RET
END
四 實(shí)驗(yàn)四 數(shù)制進(jìn)十轉(zhuǎn)數(shù)制進(jìn)六十節(jié)字四? 四字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù)
一、實(shí)驗(yàn)?zāi)康?/p>
進(jìn)一步熟悉51 匯編指令,了解十六進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù)得方法. 二、實(shí)驗(yàn)內(nèi)容
從鍵盤上輸入 8 位十六進(jìn)制數(shù),實(shí)現(xiàn)四字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)8位十進(jìn)制數(shù),并在數(shù)碼管上顯示。注意輸入數(shù)據(jù)必須在00000000H~05F00000H 范圍,否則,結(jié)果超出8位十進(jìn)制數(shù),無(wú)法正確顯示。
三、程序框圖
初始化堆棧開(kāi)始設(shè)定"先清LED,再接收鍵輸入"標(biāo)志通過(guò)鍵盤獲得4字節(jié)十六進(jìn)制數(shù)置位"接收到第一個(gè)鍵后,才清除LED"標(biāo)志十六進(jìn)制轉(zhuǎn)十進(jìn)制子程序顯示開(kāi)始0→R4,R5,R6,R7(用于存放壓縮BCD碼)32→B(循環(huán)次數(shù))CLR
C四字節(jié)十六進(jìn)制數(shù)帶進(jìn)位左移一位(R4R5R6R7)×2+進(jìn)位位C→(R4R5R6R7),同時(shí)進(jìn)行十進(jìn)制調(diào)整主程序 十六進(jìn)制轉(zhuǎn)十進(jìn)制子程序NY返回B-1=0? 四、實(shí)驗(yàn)步驟
、1
:明說(shuō)線連?D3區(qū) :CLK -- B2 區(qū):2M D3 區(qū) :CS -— A3區(qū):CS5 D3區(qū) :A0 —- A3區(qū):A0 2、在 F4區(qū)得鍵盤上輸入 8 位十六進(jìn)制數(shù) 3、結(jié)果顯示在 F4 區(qū)得數(shù)碼管上 五、程序清單
?EXTRN CODE(Display8, GetKey) Buffer DATA 30H ;8 字節(jié)顯示緩沖區(qū) F1 BIT 0D1H ;PSW、1
ORG 0000H
LJMP START
ORG 0100H
START: MOV SP,#60H
CLR F1 ;先清除顯示,再接收鍵輸入 START1: MOV R0,#buffer
MOV A,#8 ;按鍵次數(shù)
LCALL GetKey ;得到4字節(jié)十六進(jìn)制數(shù)
SETB F1 ;接收到第一個(gè)鍵后,才清除顯示
MOV R0,buffer
MOV R1,buffer+1
MOV R2,buffer+2
MOV R3,buffer+3
ACALL B4toD4 ;轉(zhuǎn)換成十進(jìn)制數(shù) Display: MOV R0,#buffer ;顯示結(jié)果
MOV A,R7 ;低位
ACALL B1toB2 ;壓縮BCD 碼轉(zhuǎn)換成非壓縮BCD 碼
MOV A,R6
ACALL B1toB2
MOV A, R5
ACALL B1toB2
MOV A,R4 ;高位
A C A LL B1toB2
MOV R0,#buffer+7
MOV R7,#7
ACALL BlackDisplay ;將高位0消隱
MOV R0,#buffer
LCALL Display8
SJMP START1
;四字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù):R0R1R2R3為十六進(jìn)制,R4R5R6R7為壓縮 BCD碼 B4toD4:
CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,A
MOV B,#32
LOOP:
CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R1
RLC A
MOV R1,A
MOV A,R0
RLC A
MOV R0,A
MOV A,R7
ADDC A,R7
DA A
MOV R7,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ B,LOOP
RET
B1toB2: PUSH ACC
ANL A,#0FH
MOV R0,A
INC R0
POP ACC
ANL A,#0F0H
SWAP A
MOV R0,A
INC R0
RET
BlackDisplay: MOV A,R0 ;將高位 0 消隱
JNZ Exit
MOV A,#10H
MOV R0,A
DEC R0
DJNZ R7, B lac kDisplay
Exit: RET
END
五 實(shí)驗(yàn)五 節(jié)字雙? 雙字節(jié) D BCD 碼( ( 十 進(jìn)制數(shù)) ) 乘法
一、實(shí)驗(yàn)?zāi)康?/p>
進(jìn)一步熟悉51 匯編指令,掌握匯編語(yǔ)言得設(shè)計(jì)與調(diào)試方法.根據(jù)程序流程圖,自己設(shè)計(jì)程序,了解如何調(diào)用系統(tǒng)提供得子程序。
二、實(shí)驗(yàn)內(nèi)容
從鍵盤上輸入 4 位被乘數(shù)、乘數(shù),實(shí)現(xiàn)四位十進(jìn)制數(shù)得乘法,結(jié)果顯示在數(shù)碼管上。
三、程序框圖
開(kāi)始初始化堆棧設(shè)定"先清LED再接收鍵輸入"標(biāo)志通過(guò)鍵盤獲得4位十進(jìn)制被乘數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)并壓棧暫存置位"接收到第一個(gè)鍵后,才清除LED"標(biāo)志通過(guò)鍵盤獲得4位十進(jìn)制乘數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)(R2R3)被乘數(shù)出棧(R0R1)雙字節(jié)十六進(jìn)制乘法子程序十六進(jìn)制結(jié)果轉(zhuǎn)十進(jìn)制壓縮BCD碼轉(zhuǎn)非壓縮BCD碼將高位0消隱顯示雙字節(jié)BCD乘法程序框圖
(R0)(R1) × (R2)(R3)(R3R1H)(R3R1L)(R3R0H)(R3R0L)(R2R1H)(R2R1L)(R2R0H)(R2R0L)R0
R1
R2
R3+雙字節(jié)十六進(jìn)制乘法示意圖
四、實(shí)驗(yàn)步驟
、1
:明說(shuō)線連?D3 區(qū) :CLK -— B2區(qū):2M D3 區(qū) :CS -— A3區(qū):CS5 D3區(qū) :A0 —— A3 區(qū):A0 2、在F4 區(qū)得鍵盤上輸入 4 位被乘數(shù)、乘數(shù) 3、結(jié)果顯示在 F4 區(qū)得數(shù)碼管上 五、程序清單
EXTRN CODE(Display8, GetBCDKey)
Buffer DATA 30H ;8字節(jié)顯示緩沖區(qū) F1 BIT 0D1H ;PSW、1
ORG 0000H
LJMP START
ORG 0100H
START: MOV SP,#60H
CLR F1 ;先清除顯示,再接收鍵輸入 START1: MOV R0,#buffer
MOV A,#4 ;按鍵次數(shù)
LCALL GetBCDKey ;得到雙字節(jié)十進(jìn)制數(shù)(被乘數(shù))
MOV R0,#buffer
ACALL D4toB2 ;轉(zhuǎn)換成二進(jìn)制數(shù)
PUSH 02H
PUSH 03H
SETB F1 ;接收到第一個(gè)鍵,才清除顯示
MOV R0,#buffer
MOV A,#4 ;按鍵次數(shù)
LCALL GetBCDKey ;得到雙字節(jié)十進(jìn)制數(shù)(乘數(shù))
MOV R0,#buffer
ACALL D4toB2 ;轉(zhuǎn)換成二進(jìn)制數(shù)
POP 01H
POP 00H
ACALL WordMul ;(R0R1)*(R2R3)=R0R1R2R3
ACALL B4toD4 ;轉(zhuǎn)換成十進(jìn)制數(shù) Display: MOV R0,#buffer ;顯示結(jié)果
MOV A,R7 ;低位
ACALL B1toB2 ;壓縮 BCD 碼轉(zhuǎn)換成非壓縮 BCD 碼
MOV A,R6
ACALL B1toB2
MOV A, R5
ACALL B1toB2
MOV A,R4 ;高位
ACALL B1toB2
MOV R0,#buffer+7
MOV R7,#7
ACALL BlackDisplay ;將高位 0 消隱
MOV R0,#buffer
LCALL Display8
SJMP START1
;雙字節(jié)十六進(jìn)制數(shù)乘以雙字節(jié)十六進(jìn)制數(shù)子程序 WordMul:
MOV A,R3 ; (
)1R()0R? MOV B,R1 ;
×
(R2)(R3)
MUL AB ;—- - ---—-———-—— -——————---———
XCH A,R3 ;
(R3R1H)(R3R1L)
MOV R7,B ;
(R3R0H)(R3R0L)
MOV B,R0 ;
(R2R1H)(R2R1L)
MUL AB ;(R2R0H)(R2R0L)
ADD A,R7 ; — - - --——-— -————-—-—------————--——
MOV R7,A ;
R0
R1
R2
R3
CLR A
ADDC A,B
XCH A,R1
MOV B,R2
MUL AB
ADD A,R7
XCH A,R2
PUSH ACC
MOV A,B
ADDC A,R1
MOV R1,A
CLR A
RLC A
XCH A,R0
POP B
MUL AB
ADD A,R1
MOV R1,A
MOV A,R0
ADDC A,B
MOV R0,A
RET
;雙字節(jié)十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù) ,R0-—指向雙字節(jié)十進(jìn)制數(shù),結(jié)果在 R2R3 中 D4toB2: MOV A,R0
ANL A,#0FH
XCH A,R0
ANL A,#0F0H
SWAP A
MOV B,#10
MUL AB
ADD A,R0
INC R0
MOV B,#10
MUL AB
MOV R2,B
MOV R3,A
MOV A,R0
ANL A,#0FH
XCH A,R0
ANL A,#0F0H
SWAP A
ADD A,R3
XCH A,R2
ADDC A,#0
MOV B,#10
MUL AB
XCH A,R2
MOV B,#10
MUL AB
ADD A,R0
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
B1toB2:
PUSH ACC
ANL A,#0FH
MOV R0,A
INC R0
POP ACC
ANL A,#0F0H
SWAP A
MOV R0,A
INC R0
RET
BlackDisplay: MOV A,R0 ;將高位 0 消隱
JNZ Exit
MOV A,#10H
MOV R0,A
DEC R0
DJNZ R7,BlackDisplay
B4toD4:
? CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,A
MOV B,#32
Exit: RET END 實(shí)驗(yàn)六
雙字節(jié)BC C D碼除于單字節(jié) D BCD 碼
一、實(shí)驗(yàn)?zāi)康?/p>
進(jìn)一步熟悉 51 匯編指令,掌握匯編語(yǔ)言得設(shè)計(jì)與調(diào)試方法.自己設(shè)計(jì)程序,了解如何調(diào)用系統(tǒng)提供得子程序。
二、實(shí)驗(yàn)內(nèi)容
從鍵盤上輸入 4 位被除數(shù)、二位除數(shù),實(shí)現(xiàn)雙字節(jié) BCD碼除于單字節(jié)BCD 碼,結(jié)果顯示在數(shù)碼管上。
三、程序框圖
開(kāi)始初始化堆棧設(shè)定"先清LED,再接收鍵輸入"標(biāo)志通過(guò)鍵盤獲得4位被除數(shù),轉(zhuǎn)換為十六進(jìn)制數(shù)并暫存通過(guò)鍵盤獲得單字節(jié)除數(shù),轉(zhuǎn)換為16進(jìn)制數(shù)顯示子程序置位"接收到第一個(gè)鍵后,才清除LED"標(biāo)志單字節(jié)除法:被除數(shù)的高字節(jié)除以除數(shù),結(jié)果為最終商的高8位雙字節(jié)除以單字節(jié)(商為16位)雙字節(jié)除以單字節(jié)(商只有8位)子程序最終獲得結(jié)果(16位的商,8位余數(shù))雙字節(jié)除以單字節(jié)(商為16位)子程序循環(huán)次數(shù)8→R716位被除數(shù)(R2,R3)帶進(jìn)位左移一位(最低位補(bǔ)0, C →F0)R2-除數(shù)(B)F0=1?C=1?差→R2,R3自加1R7-1=0?雙字節(jié)除以單字節(jié)(商為8位)子程序開(kāi)始 開(kāi)始返回返回主程序YYYNNN雙字節(jié)BCD除法程序框圖 四、實(shí)驗(yàn)步驟
1、連線說(shuō)明:
D3 區(qū) :CLK —— B2 區(qū):2M D3 區(qū) :CS -- A3區(qū):CS5 D3 區(qū) :A0 —— A3 區(qū):A0 2、在 F4 區(qū)得鍵盤上輸入 4 位被乘數(shù)、乘數(shù) 3、使用各種手段調(diào)試程序 4、結(jié)果顯示在 F4 區(qū)得數(shù)碼管上 單 五、程序清單 ??
?EXTRN ? CODE(Display8, GetBCDKey) Buffer DATA 30H ;8 字節(jié)顯示緩沖區(qū) F1 BIT 0D1H ;PSW、1
ORG 0000H
LJMP START
ORG 0100H
START: MOV ? SP,#60H
CLR F1 ;先清除顯示,再接收鍵輸入 START1: MOV R0,#buffer
MOV A,#4 ;按鍵次數(shù)
LCALL GetBCDKey ;得到雙字節(jié)十進(jìn)制數(shù)(被除數(shù))
SETB F1 ;接收到第一個(gè)鍵,才清除顯示
MOV R0,#buffer
ACALL D4toB2 ;轉(zhuǎn)換成二進(jìn)制數(shù)
MOV R0,#buffer
MOV A,#2
LCALL GetBCDKey ;得到 1 字節(jié)十進(jìn)制數(shù)(除數(shù))
MOV R0,#buffer
ACALL D2toB2 ;轉(zhuǎn)換成二進(jìn)制數(shù)
JNZ START2
ACALL DisplayError ;除數(shù)為0,出錯(cuò)
SJMP START
START2:
ACALL B2_DIV_B1 ;被除數(shù) / 除數(shù)
ACALL Display ;顯示商與被除數(shù)
SJMP START1
; 雙字節(jié)除于單字節(jié),R2R3為 16位二進(jìn)制數(shù),B 為除數(shù),商在 R2R3中, 余數(shù)在 A 中 B2_DIV_B1:
PUSH B
MOV A,R2
DIV AB
MOV R2,B
POP B
PUSH ACC
CALL DIV_B2_B1
POP ACC
XCH A,R2
RET
;雙字節(jié)除于單字節(jié),R2R3 為被除數(shù),B為除數(shù),結(jié)果:商 R3 中,余數(shù)在 R2中 DIV_B2_B1: MOV R7,#8 ;雙字節(jié)除于單字節(jié) DIV2: CLR C ;R2R3 為被除數(shù),B 為除數(shù),
MOV A,R3 ;結(jié)果:商R3 中,余數(shù)在 R2 中
RLC ? A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV F0,C
CLR C
SUBB A,B
JB F0,DIV3
JC DIV4
DIV3: MOV R2,A
INC ? R3
DIV4: DJNZ R7,DIV2
RET
;4 字節(jié)二進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù),R2R3 為 16位二進(jìn)制數(shù),R4R5R6為壓縮BCD 碼 B2toD5:
CLR
A
MOV R4,A ;
MOV R5,A
MOV R6,A
MOV R7,#16
LOOP:
CLR ? C
MOV A,R3
RLC ? A
MOV R3,A
MOV A,R2
RLC ? A
MOV R2,A
MOV A,R6
ADDC A,R6
DA ? A
MOV R6,A
MOV A,R5
ADDC A,R5
DA ? A
MOV R5,A
MOV A,R4
ADDC
A,R4
DA ? A
MOV R4,A
DJNZ R7,LOOP
RET
D2toB2: MOV A,R0 ;1 字節(jié)十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù)
ANL A,#0FH ;R0——指向 1 字節(jié)十進(jìn)制數(shù),結(jié)果在B中
XCH A,R0
ANL A,#0F0H
SWAP A
MOV B,#10
MUL AB
ADD A,R0 ;轉(zhuǎn)換成二進(jìn)制數(shù)
MOV B,A
RET
Display:
PUSH ACC ;商在低四位,余數(shù)在高三位
ACALL B2toD5 ;二進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù)
MOV R0,#buffer
MOV A,R6
ACALL B1toB2 ;壓縮BCD碼轉(zhuǎn)換成非壓縮 BCD 碼
MOV A,R5
ACALL B1toB2
DEC R0
MOV R7,#3
ACALL BlackDisplay ;將高位0消隱
MOV buffer+4,#10H ;消隱
MOV R0,#buffer+7
POP ? ACC
MOV
B,#100
DIV ? AB
MOV R0,A
DEC R0
MOV A,B
MOV B,#10
DIV ? AB
MOV R0,A
DEC R0
MOV R0,B
MOV R0,#buffer+7
MOV R7,#2
ACALL BlackDisplay ;將高位 0 消隱
MOV R0,#buffer
LCALL Display8
RET
Displa y E rror:
MOV
R0,#buffer
MOV R7,#8
MOV A,#0FH
DisplayError1:
MOV ? R0,A
INC ? R0
DJNZ R7,DisplayError1
MOV R0,#buffer
LCALL Display8
RET
D4toB2:
MOV A,R0
ANL A,#0FH
XCH A,R0
ANL A,#0F0H
SWAP A
MOV B,#10
MUL AB
ADD A,R0
INC R0
MOV B,#10
MUL AB
MOV R2,B
MOV R3,A
MOV A,R0
ANL A,#0FH
XCH A,R0
ANL A,#0F0H
SWAP A
ADD A,R3
XCH A,R2
ADDC A,#0
MOV B,#10
MUL AB
XCH A,R2
MOV B,#10
MUL AB
ADD A,R0
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
B1toB2:
PUSH ACC
ANL A,#0FH
MOV R0,A
INC R0
POP ACC
ANL A,#0F0H
SWAP A
MOV R0,A
INC R0
RET
Blac k D i splay:
MOV A,R0 ;將高位0消隱
JNZ Exit
MOV A,#10H
MOV R0,A
DEC R0
DJNZ R 7 , Bl a ckD isplay
END
實(shí)驗(yàn)八
冒泡排序
一、實(shí)驗(yàn)?zāi)康?/p>
熟悉使用 MCS51 指令,掌握匯編語(yǔ)言得設(shè)計(jì)與調(diào)試方法,了解如何使用高效方法對(duì)數(shù)據(jù)排序. 二、實(shí)驗(yàn)內(nèi)容
。列排新重大到小從據(jù)數(shù)組一將法泡冒用使求要,序程序排個(gè)一試調(diào)并寫編?
三、程 序框圖
開(kāi)始初始化堆棧將待排序數(shù)組轉(zhuǎn)移到內(nèi)部30H開(kāi)始的RAM中數(shù)據(jù)數(shù)-1→R7,數(shù)據(jù)交換標(biāo)志bSort=0
PUSH
07H被比較數(shù)地址R0=30H比較數(shù)地址R1=R0+1DEC
R7@R0>@R1?@R0與@R1互換1→bSortINC R0INC R1POP R7R7=R7-1 R7=0?bSort=0?結(jié)束NNNYYY冒泡排序程序框圖 四、實(shí)驗(yàn)步驟
。列排序順得大到小從按否是就據(jù)數(shù)中 HF3~H03 MAR部?jī)?nèi)查檢,序程試調(diào)式方點(diǎn)斷用使?單 五、程序清單 ? ?bSort BIT F0
ORG 0000H
LJMP STAR
ORG 0100H
STAR: MOV SP,#60H ;堆棧
MOV R0,#30H ;存放待排序數(shù)據(jù)得首地址
MOV R7,#16 ;數(shù)據(jù)個(gè)數(shù)
MOV DPTR,#TAB_1
STAR1:
CLR A
MOVC A,A+DPTR
MOV R0,A ;將數(shù)據(jù)移入內(nèi)部 RAM中
INC R0
INC DPTR
DJNZ R7,STAR1
MOV R7,#16-1 ;存放比較次數(shù) STAR2: PUSH 07H
MOV R0,#30H ;存放啟始地址
CLR bSort
MOV R1,00H
INC R1
MOV A,R0
STAR3:
MOV B,A
MOV A,R1
CJNE A,B,$+3
JNC
STAR5
XCH A,R0
MOV R1,A
SETB bSort
STAR5: INC R0
INC R1
DJNZ R7,STAR3
POP 07H
JNB bSort,Exit
DEC R7
SJMP STAR2
Exit:
SJMP $
TAB_1:
DB 0H,5H,6H,3H,8H,92H,04H,57H,46H,01H,0FFH,0A0H,45H,99H,55H,66H
END
推薦訪問(wèn): 單片機(jī) 實(shí)驗(yàn) 報(bào)告同志們:今天這個(gè)大會(huì),是市委全面落實(shí)黨要管黨、從嚴(yán)治黨要求的一項(xiàng)重大舉措,也是對(duì)縣市區(qū)委書記履行基層黨建工作第一責(zé)任人情況的一次集中檢閱,同時(shí)是對(duì)全市基層黨建工作的一次再部署、再落實(shí)的會(huì)議。前面,**
***年,我認(rèn)真履行領(lǐng)班子、帶隊(duì)伍、抓黨員、保穩(wěn)定的基層黨建工作思路,以學(xué)習(xí)貫徹習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想和黨的十九大歷次全會(huì)精神為主線,以市局基層黨建工作考核細(xì)則為落腳點(diǎn),落實(shí)全面從嚴(yán)治黨主體
根據(jù)會(huì)議安排,現(xiàn)將2022年履行抓基層黨建工作職責(zé)情況報(bào)告如下:一、履職工作特色和亮點(diǎn)1 突出政治建設(shè),著力在思想認(rèn)識(shí)上提高。牢固樹(shù)立抓黨建就是抓政績(jī)的理念,以“黨建工作抓引領(lǐng)、社區(qū)治理求突破,為民服
2022年以來(lái),在**黨委的正確領(lǐng)導(dǎo)下,堅(jiān)持以習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想為指導(dǎo),深入學(xué)習(xí)宣傳貫徹黨的二十大精神,以黨建工作為統(tǒng)領(lǐng),扎實(shí)開(kāi)展夯實(shí)“三個(gè)基本”活動(dòng),以“四化四力”行動(dòng)為抓手,聚力創(chuàng)建
各位領(lǐng)導(dǎo),同志們:根據(jù)會(huì)議安排,現(xiàn)就2022年度抓基層黨建工作情況匯報(bào)如下:一、主要做法及成效(一)強(qiáng)化政治引領(lǐng)。一是不斷強(qiáng)化理論武裝。堅(jiān)持通過(guò)黨組會(huì)、中心組學(xué)習(xí)會(huì)和“三會(huì)一課”,第一時(shí)間、第一議題學(xué)
2022年度抓基層黨建工作述職報(bào)告按照黨委工作部署,現(xiàn)將本人2022年度抓基層黨建工作情況報(bào)告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發(fā)展首要位置,積極開(kāi)展
2022年,是我在數(shù)計(jì)系黨總支書記這個(gè)新崗位上度過(guò)的第一個(gè)完整的工作年度。回首一年來(lái)在校黨委的正確領(lǐng)導(dǎo)下,與數(shù)計(jì)系領(lǐng)導(dǎo)班子和全體師生共同走過(guò)的日子,艱辛歷歷在目,收獲溫潤(rùn)心田。作為黨總支書記,我始終牢
按照考核要求,現(xiàn)將本人一年來(lái),作為統(tǒng)戰(zhàn)部長(zhǎng)履行職責(zé)、廉潔自律等方面情況報(bào)告如下:一、著眼增強(qiáng)政治素質(zhì),不斷深化理論學(xué)習(xí)堅(jiān)持把旗幟鮮明講政治作為履職從政的第一位要求,帶領(lǐng)統(tǒng)戰(zhàn)系統(tǒng)干部堅(jiān)決擁護(hù)“兩個(gè)確立”
**年,緊緊圍繞黨工委、管委會(huì)的決策部署,全體人員團(tuán)結(jié)協(xié)作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開(kāi)拓進(jìn)取,認(rèn)真履職盡責(zé),圓滿完成各項(xiàng)工作任務(wù)。一、個(gè)人思想政治狀況檸檬文苑www bgzjy
按照縣委關(guān)于開(kāi)展抓基層黨建述職評(píng)議會(huì)議的有關(guān)要求,經(jīng)請(qǐng)示縣委組織部同意,今天,我們?cè)诖苏匍_(kāi)2022年度基層黨組織書記抓基層黨建述職評(píng)議會(huì)議。1 首先,請(qǐng)**黨委書記,**同志述職。**黨委能夠主動(dòng)研究