⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avr的开方子程序.txt

📁 c51经典子程序代码全集
💻 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 + -