1樓:帝都小女子
org 0000h
jmp start
start:
mov sp,#60h
mov r2,#20h
mov r3,#34h
mov a,#99h
lcall bhd
lcall hbd
nopnop
;三位元組除以單位元組子程式
;入口條件:被除數在r3、r4、r5中,除數在r7中。
;出口資訊:ov=0 時,雙位元組商在r4、r5中,ov=1 時溢位。
;影響資源:psw、a、b、r2~r7 堆疊需求: 2位元組
dv31:
clr c
mov a,r3
subb a,r7
jc dv30
setb ov ;商溢位
retdv30:
mov r2,#10h;求r3r4r5/r7-→r4r5
dm23:
clr c
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov f0,c
clr c
subb a,r7
anl c,/f0
jc dm24
mov r3,a
inc r5
dm24:
djnz r2,dm23
mov a,r3 ;四捨五入
add a,r3
jc dm25
subb a,r7
jc dm26
dm25:
inc r5
mov a,r5
jnz dm26
inc r4
dm26:
clr ov
ret ;商在r4r5中
;兩位元組除以單位元組子程式
;入口條件:被除數在r4、r5中,除數在r7中。
;出口資訊:ov=0 時,單位元組商在r3中,ov=1 時溢位。
; 餘數在r4中
;影響資源:psw、a、r3~r7 堆疊需求: 2位元組
d457:
clr c
mov a,r4
subb a,r7
jc dv50
setb ov;商溢位
retdv50:
mov r6,#8 ;求平均值(r4r5/r7-→r3)
dv51:
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov f0,c
clr c
subb a,r7
anl c,/f0
jc dv52
mov r4,a
dv52:
cpl c
mov a,r3
rlc a
mov r3,a
djnz r6,dv51
mov a,r4 ;四捨五入
add a,r4
jc dv53
subb a,r7
jc dv54
dv53:
inc r3
dv54:
clr ov
ret;四位元組除以單位元組子程式
;入口條件:被除數在r2、r3、r4、r5中,除數在r7中。
;出口資訊:a
; 餘數在r2中
;影響資源:psw、a、r2~r7 堆疊需求:2位元組
;input dat1,dat2,dat3,r5 ;r0(h),:divisor dat2(h) dat3() r5(l):quotient
;dat1(h)dat2(l):residue
f_div:
clr c
mov a,r7
jz fd_over
fd_begin:
mov a,r2
subb a,r7
jc no_overflow
mov a,#0ffh
retno_overflow:
clr a
mov r6,#18h
fdiv0:
lcall rlc4
jc goushang
mov a,r2
subb a,r7
jc fdnext
inc r5
mov r2,a
fdnext:
djnz r6,fdiv0
jmp fdone
goushang:
mov a,r2
subb a,r7
inc a
inc r5
mov r2,a
jmp fdnext
fdone:
clr a
clr ov
retfd_over:
mov a,#0ffh
retrlc4:
clr c
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov a,r2
rlc a
mov r2,a
ret;divd功能:雙位元組二進位制無符號數除法
;入口條件:被除數在r2、r3、r4、r5中,除數在r6、r7中。
;出口資訊:ov=0 時,雙位元組商在r4、r5中,ov=1 時溢位。
; 餘數在r2 r3中
;影響資源:psw、a、b、r1~r7 堆疊需求: 2位元組
divd:
clr c ;比較被除數和除數
mov a,r3
subb a,r7
mov a,r2
subb a,r6
jc ***1
setb ov ;溢位
ret***1:
mov b,#10h ;計算雙位元組商
***2:
clr c ;部分商和餘數同時左移一位
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
xch a,r2
rlc a
xch a,r2
mov f0,c ;儲存溢位位
clr c
subb a,r7 ;計算(r2r3-r6r7)
mov r1,a
mov a,r2
subb a,r6
anl c,/f0 ;結果判斷
jc ***3
mov r2,a ;夠減,存放新的餘數
mov a,r1
mov r3,a
inc r5 ;商的低位置一
***3:
djnz b,***2;計算完十六位商(r4r5)
; mov a,r4 ;商移到r2r3中
; mov r2,a
; mov a,r5
; mov r3,a
clr ov ;設立成功標誌
ret;雙位元組乘以雙位元組乘法
;入口條件:被乘數在r2、r3中,乘數在r6、r7中。
;出口資訊:乘積在r2、r3、r4、r5中。
;影響資源:psw、a、b、r2~r7 堆疊需求: 2位元組
muld:
mov a,r3 ;計算r3乘r7
mov b,r7
mul ab
mov r4,b ;暫存部分積
mov r5,a
mov a,r3 ;計算r3乘r6
mov b,r6
mul ab
add a,r4 ;累加部分積
mov r4,a
clr a
addc a,b
mov r3,a
mov a,r2 ;計算r2乘r7
mov b,r7
mul ab
add a,r4 ;累加部分積
mov r4,a
mov a,r3
addc a,b
mov r3,a
clr a
rlc a
xch a,r2 ;計算r2乘r6
mov b,r6
mul ab
add a,r3 ;累加部分積
mov r3,a
mov a,r2
addc a,b
mov r2,a
ret;雙位元組乘以單位元組乘法
;入口條件:被乘數在r2、r3中,乘數在r7中。
;出口資訊:乘積在r2、r3、r4中。
;影響資源:psw、a、b、r2~r7 堆疊需求: 2位元組
mul21:
mov a,r3
mov b,r7
mul ab
mov r4,a
mov r5,b
mov a,r2
mov b,r7
mul ab
add a,r5
mov r3,a
mov a,b
addc a,#00h
mov r2,a
ret;功能:雙位元組十六進位制整數轉換成雙位元組bcd碼整數
;入口條件:待轉換的雙位元組十六進位制整數在r6、r7中。
;出口資訊:轉換後的三位元組bcd碼整數在r3、r4、r5中。
;影響資源:psw、a、r2~r7 堆疊需求: 2位元組
hb2:
clr a ;bcd碼初始化
mov r3,a
mov r4,a
mov r5,a
mov r2,#10h ;轉換雙位元組十六進位制整數
hb3:
mov a,r7 ;從高階移出待轉換數的一位到cy中
rlc a
mov r7,a
mov a,r6
rlc a
mov r6,a
mov a,r5 ;bcd碼帶進位自身相加,相當於乘2
addc a,r5
da a ;十進位制調整
mov r5,a
mov a,r4
addc a,r4
da a
mov r4,a
mov a,r3
addc a,r3
mov r3,a ;雙位元組十六進位制數的萬位數不超過6,不用調整
djnz r2,hb3 ;處理完16bit
ret;入口條件:待轉換的單位元組bcd碼整數在累加器a中。
;出口資訊:轉換後的單位元組十六進位制整數仍在累加器a中。
;影響資源:psw、a、b、r4 堆疊需求: 2位元組
bcdh:
mov b,#10h ;分離十位和個位
div ab
mov r4,b ;暫存個位
mov b,#10 ;將十位轉換成十六進位制
mul ab
add a,r4 ;按十六進位制加上個位
ret;雙位元組bcd碼整數轉換成雙位元組十六進位制整數
;入口條件:待轉換的雙位元組bcd碼整數在r2、r3中。
;出口資訊:轉換後的雙位元組十六進位制整數仍在r2、r3中。
;影響資源:psw、a、b、r2、r3、r4 堆疊需求:4位元組
bh2:
mov a,r3 ;將低位元組轉換成十六進位制
lcall bcdh
mov r3,a
mov a,r2 ;將高位元組轉換成十六進位制
lcall bcdh
mov b,#100 ;擴大一百倍
mul ab
add a,r3 ;和低位元組按十六進位制相加
mov r3,a
clr a
addc a,b
mov r2,a
ret;標號: bhd功能:單位元組bcd碼小數轉換成單位元組十六進位制小數
;入口條件:待轉換的單位元組bcd碼數在累加器a中。
;出口資訊:轉換後的單位元組十六進位制小數仍在累加器a中。
;影響資源:psw、a、r2、r3 堆疊需求: 2位元組
bhd:
mov r2,#8 ;準備計算一個位元組小數
bhd0: add a,acc ;按十進位制倍增
da a
xch a,r3
rlc a ;將進位標誌移入結果中
xch a,r3
djnz r2,bhd0 ;共計算8bit小數
add a,#0b0h ;剩餘部分達到0.50否?
jnc bhd1 ;四舍
inc r3 ;五入
bhd1:
mov a,r3 ;取結果
ret; 標號: hbd功能:單位元組十六進位制小數轉換成單位元組bcd碼小數
;入口條件:待轉換的單位元組十六進位制小數在累加器a中。
;出口資訊:cy=0時轉換後的bcd碼小數仍在a中。cy=1時原小數接近整數1。
;影響資源:psw、a、b 堆疊需求: 2位元組
hbd:
mov b,#100 ;原小數擴大一百倍
mul ab
rlc a ;餘數部分四捨五入
clr a
addc a,b
mov b,#10 ;分離出十分位和百分位
div ab
swap a
add a,b ;拼裝成單位元組bcd碼小數
da a ;調整後若有進位,原小數接近整數1
retjmp $end
微控制器除法運算,微控制器中C語言如何實現浮點除法運算
如果直接用c程式寫,那就沒必要考慮除法的細節了,比如unsigned int a,b,c a 0x3456 b 0x1040 c a b 如果你想用匯編搞定,那沒辦法,老老實實的寫或者網上 書上 找這樣的程式,肯定能找到的。不過我可以說一下演算法,那就是相減,被除數連續不斷的減去除數,直到差小於除數...
如何實現微控制器中多路AD轉換,什麼是微控制器ad轉換,微控制器ad轉換處理方法
有兩種辦法,一個就是用兩個ad轉換晶片,兩路模擬量分別接一個。用微控制器控制兩個ad晶片同時啟動轉換,這樣基本可以實現採集到同一時刻的兩路模擬量值。另一種辦法就是用兩個取樣保持器 lf398 來暫時儲存模擬量的瞬時值。兩個保持器後面接模擬多路轉換器,模擬多路轉換器後面接一個ad轉換器。過程是這樣的 ...
微控制器實現500KHZ時鐘訊號
500kz的時鐘週期是2us 在12m晶振的情況下,機器週期1us,不能用中斷,因為進中斷就要3個機器週期即3us就已經超出了時鐘週期 另外退中斷和高低電平切換也要花掉若干個機器週期 用程式的話 loop cpl p1.0 1us ajmp loop 2us 週期是6us,超出了!loop setb...