微控制器乘法的實現

時間 2021-10-30 05:27:15

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

微控制器lcd實現滾屏

看lcd的介面情況,並口需要資料線8位 片選 讀使能 寫使能等。如果lcd為串列埠,資料線1,資料同步時鐘1,片選1。使用定時器,啟動定時滾屏動作 如果lcd支援滾屏,只要重新整理一行即可。否則,只能重畫了 16 16顯示一個漢字,向左移動 只能顯示8個漢字,受8位控制 資源分析 r0指向資料快取地...

微控制器引腳如何實現高阻輸入,微控制器IO口設定為高阻輸入時能讀埠值嗎

amd百夫長 一 通過加驅動器實現了。二 如果是傳統的51微控制器 例如at89s52 p0口可以實現高阻。p0口內部和p1 p3口的內部結構不同,它的內部上拉fet只有在它作為外部儲存器匯流排的時候才能開啟,如果做普通io口,那麼讓p0口輸出1,外部又沒有接上拉電阻的話,那麼p0口就是高阻 懸空 ...

微控制器問題,微控制器問題

船長 12mhz 12 1s 1ms 1000065536 10000 55536 d8f0mov tmod,01h t0工作方式1mov tl0,0f0h t0初值mov th0,0d8 h t0初值setb tr0 啟動t0 setb et0 允許t0中斷 setb ea 開總中斷 龍宇防盜監控...