(23)標號: bhd2 功能:雙位元組bcd碼小數轉換成雙位元組十六進製制小數
入口條件:待轉換的雙位元組bcd碼小數在r4、r5中。
出口資訊:轉換後的雙位元組十六進製制小數在r2、r3中。*
影響資源:psw、a、r2~r6 堆疊需求: 2位元組
bhd2: mov r6,#10h ;準備計算兩個位元組小數
bhd3: mov a,r5 ;按十進位制倍增
add a,r5
da a
mov r5,a
mov a,r4
addc a,r4
da a
mov r4,a
mov a,r3 ;將進製標誌移入結果中
rlc a
mov r3,a
mov a,r2
rlc a
mov r2,a
djnz r6,bhd3 ;共計算16bit小數
mov a,r4
add a,#0b0h ;剩餘部分達到0.50否?
jnc bhd4 ;四捨
inc r3 ;五入
mov a,r3
jnz bhd4
inc r2
bhd4: ret
(24) 標號: mm 功能:求單位元組十六進製制無符號資料塊的極值
入口條件:資料塊的首址在dptr中,資料個數在r7中。
出口資訊:最大值在r6中,位址在r2r3中;最小值在r7中,位址在r4r5中。
影響資源:psw、a、b、r1~r7 堆疊需求: 4位元組
mm: mov b,r7 ;儲存資料個數
movx a,@dptr ;讀取第乙個資料
mov r6,a ;作為最大值的初始值
mov r7,a ;也作為最小值的初始值
mov a,dpl ;取第乙個資料的位址
mov r3,a ;作為最大值存放位址的初始值
mov r5,a ;也作為最小值存放位址的初始值
mov a,dph
mov r2,a
mov r4,a
mov a,b ;取資料個數
dec a ;減一,得到需要比較的次數
jz mme ;只有乙個資料,不需要比較
mov r1,a ;儲存比較次數
push dpl ;保護資料塊的首址
push dph
mm1: inc dptr ;指向乙個新的資料
movx a,@dptr ;讀取這個資料
mov b,a ;儲存
setb c ;與最大值比較
subb a,r6
jc mm2 ;不超過當前最大值,保持當前最大值
mov r6,b ;超過當前最大值,更新最大值存放位址
mov r2,dph ;同時更新最大值存放位址
mov r3,dpl
sjmp mm3
mm2: mov a,b ;與最小值比較
clr c
subb a,r7
jnc mm3 ;大於或等於當前最小值,保持當前最小值
mov r7,b ;更新最小值
mov r4,dph ;更新最小值存放位址
mov r5,dpl
mm3: djnz r1,mm1 ;處理完全部資料
pop dph ;恢復資料首址
pop dpl
mme: ret
(25) 標號: mms 功能:求單位元組十六進製制有符號資料塊的極值
入口條件:資料塊的首址在dptr中,資料個數在r7中。
出口資訊:最大值在r6中, 位址在r2r3中;最小值在r7中,位址在r4r5中。
影響資源:psw、a、b、r1~r7 堆疊需求: 4位元組
mms: mov b,r7 ;儲存資料個數
movx a,@dptr ;讀取第乙個資料
mov r6,a ;作為最大值的初始值
mov r7,a ;也作為最小值的初始值
mov a,dpl ;取第乙個資料的位址
mov r3,a ;作為最大值存放位址的初始值
mov r5,a ;也作為最小值存放位址的初始值
mov a,dph
movr2,a
mov r4,a
mov a,b ;取資料個數
dec a ;減一,得到需要比較的次數
jz mmse ;只有乙個資料,不需要比較
mov r1,a ;儲存比較次數
push dpl ;保護資料塊的首址
push dph
mms1: inc dptr ;調整資料指標
movx a,@dptr ;讀取乙個資料
mov b,a ;儲存
setb c ;與最大值比較
subb a,r6
jz mms4 ;相同,不更新最大值
jnb ov,mms2 ;差未溢位,符號位有效
cpl acc.7 ;差溢位,符號位取反
mms2: jb acc.7,mms4;差為負,不更新最大值
mov r6,b ;更新最大值
mov r2,dph ;更新最大值存放位址
mov r3,dpl
sjmp mms7
mms4: mov a,b ;與最小值比較
clr c
subb a,r7
jnb ov,mms6 ;差未溢位,符號位有效
cpl acc.7 ;差溢位,符號位取反
mms6: jnb acc.7,mms7;差為正,不更新最小值
mov r7,b ;更新最小值
mov r4,dph ;更新最小值存放位址
mov r5,dpl
mms7: djnz r1,mms1 ;處理完全部資料
pop dph ;恢復資料首址
pop dpl
mmse: ret標號: fds1 功能:順序查詢(rom)單位元組**入口條件:待查詢的內容在a中,**首址在dptr中,**的位元組數在r7中。
出口資訊:ov=0時,順序號在累加器a中;ov=1時,未找到。
影響資源:psw、a、b、r2、r6 堆疊需求: 2位元組
fds1: mov b,a ;儲存待查詢的內容
mov r2,#0 ;順序號初始化(指向表首)
mov a,r7 ;儲存**的長度
mov r6,a
fd11: mov a,r2 ;按順序號讀取**內容
movc a,@a+dptr
cjne a,b,fd12;與待查詢的內容比較
clr ov ;相同,查詢成功
mov a,r2 ;取對應的順序號
retfd12: inc r2 ;指向**中的下乙個內容
djnz r6,fd11 ;查完全部**內容
setb ov ;未查找到,失敗
ret標號: fds2 功能:順序查詢(rom)雙位元組**入口條件:查詢內容在r4、r5中,**首址在dptr中,資料總個數在r7中。
出口資訊:ov=0時順序號在累加器a中,位址在dptr中;ov=1時未找到。
影響資源:psw、a、r2、r6、dptr 堆疊需求: 2位元組
fds2: mov a,r7 ;儲存**中資料的個數
mov r6,a
mov r2,#0 ;順序號初始化(指向表首)
fd21: clr a ;讀取**內容的高位元組
movc a,@a+dptr
xrl a,r4 ;與待查詢內容的高位元組比較
jnz fd22
mov a,#1 ;讀取**內容的低位元組
movc a,@a+dptr
xrl a,r5 ;與待查詢內容的低位元組比較
jnz fd22
clr ov ;相同,查詢成功
mov a,r2 ;取對應的順序號
retfd22: inc dptr ;指向下乙個資料
inc dptr
inc r2 ;順序號加一
djnz r6,fd21 ;查完全部資料
setb ov ;未查找到,失敗
ret標號:fdd1 功能:對分查詢(rom)單位元組無符號增序資料**入口條件:待查詢的內容在累加器a中,**首址在dptr中,位元組數在r7中。
出口資訊:ov=0 時,順序號在累加器a中
中;ov=1 時,未找到。
影響資源:psw、a、b、r2、r3、r4 堆疊需求: 2位元組
fdd1: mov b,a ;儲存待查詢的內容
mov r2,#0 ;區間低端指標初始化(指向第乙個資料)
mov a,r7
dec a
mov r3,a ;區間高階指標初始化(指向最後乙個資料)
fd61: clr c ;判斷區間大小
mov a,r3
subb a,r2
jc fd69 ;區間消失,查詢失敗
rrc a ;取區間大小的一半
add a,r2 ;加上區間的低端
mov r4,a ;得到區間的中心
movc a,@a+dptr;讀取該點的內容
cjne a,b,fd65;與待查詢的內容比較
clr ov ;相同,查詢成功
mov a,r4 ;取順序號
retfd65: jc fd68 ;該點的內容比待查詢的內容大否?
mov a,r4 ;偏大,取該點位置
dec a ;減一
mov r3,a ;作為新的區間高階
sjmp fd61 ;繼續查詢
fd68: mov a,r4 ;偏小,取該點位置
inc a ;加一
mov r2,a ;作為新的區間低端
sjmp fd61 ;繼續查詢
fd69: setb ov ;查詢失敗
ret標號:fdd2 功能:對分查詢(rom)雙位元組無符號增序資料**入口條件:查詢內容在r4、r5中,**首址在dptr中,資料個數在r7中。
出口資訊:ov=0 時順序號在累加器a中,址在dptr中;ov=1 時未找到。
影響資源:psw、a、b、r1~r7、dptr 堆疊需求: 2位元組
fdd2: mov r2,#0 ;區間低端指標初始化(指向第乙個資料)
mov a,r7
dec a
mov r3,a ;區間高階指標初始化,指向最後乙個資料
mov r6,dph ;儲存**首址
mov r7,dpl
fd81: clr c ;判斷區間大小
mov a,r3
subb a,r2
jc fd89 ;區間消失,查詢失敗
rrc a ;取區間大小的一半
add a,r2 ;加上區間的低端
mov r1,a ;得到區間的中心
mov dph,r6
clr c ;計算區間中心的位址
rlc a
jnc fd82
inc dph
fd82: add a,r7
mov dpl,a
jnc fd83
inc dph
fd83: clr a ;讀取該點的內容的高位元組
movc a,@a+dptr
mov b,r4 ;與待查詢內容的高位元組比較
cjne a,b,fd84;不相同
mov a,#1 ;讀取該點的內容的低位元組
movc a,@a+dptr
mov b,r5
cjne a,b,fd84;與待查詢內容的低位元組比較
mov a,r1 ;取順序號
clr ov ;查詢成功
retfd84: jc fd86 ;該點的內容比待查詢的內容大否?
mov a,r1 ;偏大,取該點位置
dec a ;減一
mov r3,a ;作為新的區間高階
sjmp fd81 ;繼續查詢
fd86: mov a,r1 ;偏小,取該點位置
inc a ;加一
mov r2,a ;作為新的區間低端
sjmp fd81 ;繼續查詢
fd89: mov dph,r6 ;相同,恢復首址
mov dpl,r7
setb ov ;查詢失敗
ret標號: ddm1 功能:求單位元組十六進製制無符號資料塊的平均值入口條件:資料塊的首址在dptr中,資料個數在r7中。
出口資訊:平均值在累加器a中。
影響資源:psw、a、r2~r6 堆疊需求: 4位元組
ddm1: mov a,r7 ;儲存資料個數
mov r2,a
push dph
push dpl
clr a ;初始化累加和
movr4,a
mov r5,a
dm11: movx a,@dptr ;讀取乙個資料
add a,r5 ;累加到累加和中
mov r5,a
jnc dm12
inc r4
dm12: inc dptr ;調整指標
djnz r2,dm11 ;累加完全部資料
lcall d457 ;求平均值(r4r5/r7-→r3)
mov a,r3 ;取平均值
pop dpl
pop dph
ret標號: ddm2 功能:求雙位元組十六進製制無符號資料塊的平均值入口條件:資料塊的首址在dptr中,雙位元組資料總個數在r7中。
出口資訊:平均值在r4、r5中。
影響資源:psw、a、r2~r6 堆疊需求: 4位元組
ddm2: mov a,r7 ;儲存資料個數
mov r2,a ;初始化資料指標
push dpl ;保持首址
push dph
clr a ;初始化累加和
mov r3,a
mov r4,a
mov r5,a
dm20: movx a,@dptr ;讀取乙個資料的高位元組
mov b,a
inc dptr
movx a,@dptr ;讀取乙個資料的低位元組
inc dptr
add a,r5 ;累加到累加和中
mov r5,a
mov a,b
addc a,r4
mov r4,a
jnc dm21
inc r3
dm21: djnz r2,dm20 ;累加完全部資料
pop dph ;恢復首址
pop dpl
ljmp dv31 ;求r3r4r5/r7-→r4r5,得到平均值標號: xr1 功能:求單位元組資料塊的(異或)校驗和入口條件:
資料塊的首址在dptr中,資料的個數在r6、r7中。
出口資訊:校驗和在累加器a中。
影響資源:psw、a、b、r4~r7 堆疊需求: 2位元組
xr1: mov r4,dph ;儲存資料塊的首址
mov r5,dpl
mov a,r7 ;雙位元組計數器調整
jz xr10
inc r6
xr10: mov b,#0 ;校驗和初始化
xr11: movx a,@dptr ;讀取乙個資料
xrl b,a ;異或運算
inc dptr ;指向下乙個資料
djnz r7,xr11 ;雙位元組計數器減一
djnz r6,xr11
mov dph,r4 ;恢復資料首址
mov dpl,r5
mov a,b ;取校驗和
ret標號: xr2 功能:求雙位元組資料塊的(異或)校驗和入口條件:資料塊的首址在dptr中,雙位元組資料總個數在r6、r7中。
出口資訊:校驗和在r2、r3中。
影響資源:psw、a、r2~r7 堆疊需求: 2位元組
xr2: mov r4,dph ;儲存資料塊的首址
mov r5,dpl
mov a,r7 ;雙位元組計數器調整
jz xr20
inc r6
xr20: clr a ;校驗和初始化
mov r2,a
mov r3,a
xr21: movx a,@dptr ;讀取乙個資料的高位元組
xrl a,r2 ;異或運算
mov r2,a
inc dptr
movx a,@dptr ;讀取乙個資料的低位元組
xrl a,r3 ;異或運算
mov r3,a
inc dptr ;指向下乙個資料
djnz r7,xr21 ;雙位元組計數器減一
djnz r6,xr21
mov dph,r4 ;恢復資料首址
mov dpl,r5
ret標號: sort 功能:單位元組無符號資料塊排序(增序)
入口條件:資料塊的首址在r0中,位元組數在r7中。
出口資訊:完成排序(增序)
影響資源:psw、a、r2~r6 堆疊需求: 2位元組
sort: mov a,r7
mov r5,a ;比較次數初始化
srt1: clr f0 ;交換標誌初始化
mov a,r5 ;取上遍比較次數
dec a ;本遍比上遍減少一次
mov r5,a
;儲存本遍次數
mov r2,a ;複製到計數器中
jz srt5 ;若為零,排序結束
mov a,r0 ;儲存資料指標
mov r6,a
srt2: mov a,@r0 ;讀取乙個資料
mov r3,a
inc r0 ;指向下乙個資料
mov a,@r0 ;再讀取乙個資料
mov r4,a
clr c
subb a,r3 ;比較兩個資料的大小
jnc srt4 ;順序正確(增序或相同),不必交換
setb f0 ;設立交換標誌
mov a,r3 ;將兩個資料交換位置
mov @r0,a
dec r0
mov a,r4
mov @r0,a
inc r0 ;指向下乙個資料
srt4: djnz r2,srt2 ;完成本遍的比較次數
mov a,r6 ;恢復資料首址
mov r0,a
jb f0,srt1 ;本遍若進行過交換,則需繼續排序
srt5: ret ;排序結束end
MCS51微控制器指令大全
以字母的順序排列 a z a 1 acall addr11 指令名稱 絕對呼叫指令 指令 指令功能 構造目的位址,進行子程式呼叫其方法是以指令提供的11位位址 al0 a0 取代pc的低11位,pc的高5位不變。操作內容 pc pc 2 sp sp 1 sp pc 7 0 sp sp 1 sp pc...
MCS 51微控制器指令全總結
1 運算元中有direct data bit的都是2位元組指令 2 在運算元中沒有以上三個變數卻有 標誌的都是1位元組指令 3 凡是3位元組指令的都是兩週期的指令 4 乘除是單位元組四週期的指令 5 位元組呼叫指令 位元組 位轉移指令 位元組 位邏輯指令 進 出棧指令 返回指令 inc dptr m...
MCS 51系列微控制器模擬SPI匯流排的方法
1.mcu序列輸入子程式spiin 從x25f008的spiso線上接收8位資料並放入暫存器r0中的應用子程式如下 spiin setb p1.1使p1.1 時鐘 輸出為1 clr p1.2選擇從機 mov r1,08h置迴圈次數 spiin1 clr p1.1使p1.1 時鐘 輸出為0 nop延時...