?? 161.asm
字號:
.include"8535def.inc"
rjmp RESET
tab:.dw 0,40,78,117,157,197,236,276,314,353,393,428,466,504,541,580,616,654
.dw 692,730,769,808,847,887,927,968,1009,1050,1092,1134,1177,1221,1266
RESET:mov r20,r16 ;A/D結(jié)果低5位送r20
andi r20,$1f
rol r16 ;取A/D結(jié)果高5位送r17
rol r17
rol r16
rol r17
rol r16
rol r17
add r17,r17 ;r17*2
ldi Zh,high(tab*2) ;取y1送r19:r18
ldi Zl,low(tab*2)
add Zl,r17
lpm
mov r18,r0
adiw Zl,1
lpm
mov r19,r0
adiw Zl,1 ;取y2送r17:r16
lpm
mov r16,r0
adiw Zl,1
lpm
mov r17,r0
sub r16,r18 ;求y2-y1
sbc r17,r19
mov r23,r18 ;保存y1送r24:r23
mov r24,r19
mov r18,r20 ;求(y2-y1)*(x-x1)/32
clr r19
rcall mpy16s
rol r18
rol r19
rol r20
rol r18
rol r19
rol r20
rol r18
rol r19
rol r20
add r23,r19 ;求y
adc r24,r20
mpy16s: ;16位*16位帶符號乘法
clr r21 ;清結(jié)果和進位位
sub r20,r20
ldi r22,16 ;初始化循環(huán)計數(shù)器
m16s_1:
brcc m16s_2 ;進位位為 0 ,跳至m16s-2
add r20,r16 ;進位位為 1
adc r21,r17 ;結(jié)果3字節(jié)2字節(jié)加被乘數(shù)
m16s_2:
sbrc r18,0 ;如果當前位置位
sub r20,r16 ;從結(jié)果字節(jié)2中減被乘數(shù)低字節(jié)
sbrc r18,0 ;如果當前位置位
sbc r21,r17 ;從結(jié)果字節(jié)2中減被乘數(shù)低字節(jié)
asr r21 ;算術(shù)右移結(jié)果和乘數(shù)
ror r20
ror r19
ror r18
dec r22 ;循環(huán)計數(shù)器減 1
brne m16s_1 ;如沒完成,再循環(huán)
ret
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -