📄 avr的开方子程序.txt
字号:
用【 小 | 中 | 大 】字体浏览
AVR单片机:xiaoqi老师!?!?! [大天] [43次] 01-11-8 下午 07:15:56
老师?@?
那里有AVR的开方子程序?@
被开方数要是一个字.??@@
给我留言好吗!??
http://www.avr-forum.com/avrsource.html [晓奇.] [10次] 01-11-8 下午 07:17:02
谢谢1!! [大天] [0次] 01-11-8 下午 07:19:09
老师》!·??那一个呀!!我看不懂!!down哪个例子?!??! [大天] [3次] 01-11-8 下午 07:21:15
http://www.avr-forum.com/avrsqrt16.txt 打开后有点乱码,自己整理一下 [晓奇.] [15次] 01-11-8 下午 07:27:18
贴上吧 [晓奇.] [29次] 01-11-8 下午 07:41:39
看来他是用C编译得来的,要修改一下:
; ************************************************
; *
; * AVR SQRT16 *****
; *
; * r22 - SQUARE LOW BYTE
; * r23 - SQUARE HIGH BYTE
; * r18 - SQRT
; * SQRT16 (0x0064) = 0x0a
; *
; ************************************************
.include "io8515.h"
.NAME XXXX
.RSEG CODE
.ORG 0x0000
; ************************************************
; * Interrupt Vectors
; ************************************************
rjmp XX0000 ; Reset Handle
.DB 'V 1.00 Copyright (C) 1999, Salov.'
.ORG 0x1000
XX0000: ldi r16,0xe0 ; Load Immediate
out SPL,r16 ; Out Port
ldi r16,0x00 ; Load Immediate
out SPH,r16 ; Out Port
XX0002: ldi r22,LOW (0x0064) ; Load Immediate
ldi r23,HIGH (0x0064) ; Load Immediate
rcall SQRT1600
rjmp XX0002
SQRT1600:
ldi r16,0x00 ; Load Immediate
ldi r17,0x00 ; Load Immediate
ldi r18,0x01 ; Load Immediate
ldi r19,0x00 ; Load Immediate
ldi r20,0x08 ; Load Immediate
SQRT1602:
lsl r22 ; Logical Shift Left
rol r23 ; Rotate Left Through Carry
rol r16 ; Rotate Left Through Carry
rol r17 ; Rotate Left Through Carry
lsl r22 ; Logical Shift Left
rol r23 ; Rotate Left Through Carry
rol r16 ; Rotate Left Through Carry
rol r17 ; Rotate Left Through Carry
cpi r17,0x00 ; Compare with Immediate
brge SQRT1604 ; Branch if Greater or Equal
add r16,r18 ; Add without Carry
adc r17,r19 ; Add with Carry
rjmp SQRT1606
SQRT1604:
sub r16,r18 ; Subtract without Carry
sbc r17,r19 ; Subtract with Carry
SQRT1606:
andi r18,11111100b ; Logical AND with Immediate
lsl r18 ; Logical Shift Left
rol r19 ; Rotate Left Through Carry
subi r18,0xfb ; Subtract Immediate
sbci r19,0xff ; Subtract Immediate with Carry
cpi r17,0x00 ; Compare with Immediate
brge SQRT1608 ; Branch if Greater or Equal
subi r18,0x02 ; Subtract Immediate
SQRT1608:
dec r20 ; Decrement
brne SQRT1602 ; Branch if Not Equal
lsr r19 ; Logical Shift Right
ror r18 ; Rotate Right Through Carry
lsr r19 ; Logical Shift Right
ror r18 ; Rotate Right Through Carry
ret
; **** End of File ****
这里有一个非常短小精干的开方程序,我还不明白他的原理,但调试通过,计算正确。 [晓奇.] [57次] 01-11-8 下午 08:27:52
输入:r16,r17
返回:r18
.include "8515def.inc"
.def numlo = r16
.def numhi = r17
.def sqrt = r18
.def suber = r24
.def suberh= r25
; enter with the 16 bit Number in r16,r17
.org 0x00
rjmp reset
.org 0x20
reset:
; **** Stack Pointer Setup Code ****
ldi r16,$02 ; Stack Pointer Setup
out SPH,r16 ; Stack Pointer High Byte
ldi r16,$5F ; Stack Pointer Setup
out SPL,r16 ; Stack Pointer Low Byte
loopm:
ldi r16,0x64
ldi r17,0x01
rcall sqrt
nop
rjmp loopm
Sqrt:
clr sqrt
ldi suber,1 ; initialize the seed to be subtracted
clr suberh ; for each iteration
loop: sub numlo,suber
sbc numhi,suberh
brlo exit
inc sqrt
adiw suber,2 ; keep the number to subtract ODD.
rjmp loop
exit:
ret ; the sqrt(num) on exit is stored in r18
;
我下载了!正在调试谢谢!!老师?@? [大天] [0次] 01-11-8 下午 11:46:08
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2002
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -