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

📄 ex2.asm

📁 基于VC33的flash擦除、读写例程
💻 ASM
字号:
        .sect    "init"
        .global  init
        .text
        br       init
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        br      timer0
init:   ldp     0,dp
        ldi     @STCK,sp               ;INIT STACK
        ldi     1800H,st               ;INIT ST
        ldi     @MCTL,ar0              ;INIT MAIN BUS
        ldi     @MBUS,r0
        sti     r0,*ar0

init0:  call    initt0                 ;timer0 init
        ldi     100h,ie
        or      2000h,st

        ldi     0, r0
        ldi     @NUM,ar0
        sti     r0,*ar0
        ldi     2h,r0
        or      r0,iof

        call    echip

        ldi     @FLASH,ar5
        ldi     @FDAT,ar6
        ldi     ar6, ar0
        nop     *ar0++(8)
        ldi     *ar0++,r7
        ldi     *ar0++,r0
        lsh     8, r0
        addi    r0, r7
        ldi     *ar0++,r0
        lsh     16, r0
        addi    r0, r7
        ldi     *ar0++,r0
        lsh     24, r0
        addi    r0, r7
        ldi     r7, ar7
        lsh     2,ar7
        addi    20h,ar7          ;add flen,aviod data
        ldi     0, r0
        ldi     @FLEN,ar0
        sti     r0,*ar0

        call    write

        ldi     0, ie
        ldi     301h,r0
        ldi     8080h,ar0
        lsh     8, ar0
        ldi     ar0, ar1
        addi    20h,ar0
        sti     r0,*+ar0               ;CLOSE TIMER0

stop:   br      stop
;INTERRUPT SERVER;;;;;;;;;;;;;;;;;;;;;;sub1: timer0
timer0:         push    st
                push    r0
                push    ar0
                ldi     @NUM,ar0
                ldi     *ar0,r0
                addi    1, r0
                sti     r0,*ar0
                cmpi    1000h,r0
                blt     cont
                ldi     0,r0
                sti     r0,*ar0
                ldi     @LLAMP,ar0
                ldi     *ar0,r0
                cmpi    1, r0
                ldine   1, r0
                ldieq   0, r0
                sti     r0,*ar0
                lsh     2,r0
                xor     r0,iof
cont:           pop     ar0
                pop     r0
                pop     st
                reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subD: initt0
initt0: ldi     0, r0
        ldi     8080h,ar0
        lsh     8, ar0
        addi    20h,ar0
        sti     r0,*+ar0(4)            ;COUNTER CLEAR
        ldi     @FS,r0                 ;SET TIMER0 FS
        lsh     2,r0
        sti     r0,*+ar0(8)
        ldi     3c1h,r0                ;RUN TIMER0
        sti     r0,*ar0
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subD: initt0
echip:  ldi     @FLASH,ar0
        ldi     0AAH,r0
        ldi     ar0,ar2
        addi    5555h,ar2
        sti     r0,*ar2
        ldi     055H,r0
        ldi     ar0,ar2
        addi    2aaah,ar2
        sti     r0,*ar2
        ldi     080H,r0
        ldi     ar0,ar2
        addi    5555h,ar2
        sti     r0,*ar2
        ldi     0AAH,r0
        ldi     ar0,ar2
        addi    5555h,ar2
        sti     r0,*ar2
        ldi     055H,r0
        ldi     ar0,ar2
        addi    2aaah,ar2
        sti     r0,*ar2
        ldi     010H,r0
        ldi     ar0,ar2
        addi    5555h,ar2
        sti     r0,*ar2
eloop:  ldi     *ar2,r0
        and     080h,r0
        cmpi    080h,r0
        bne     eloop
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
write:
        ldi     @FLEN,ar0
        ldi     *ar0,r0
        addi    1,r0
        sti     r0,*ar0
        cmpi    ar7,r0
        bgt     w_end
        ldi     @FLASH,ar0             ;byte program!!!
        ldi     0AAH,r0
        ldi     ar0,ar1
        addi    5555h,ar1
        sti     r0,*ar1
        ldi     055H,r0
        ldi     ar0,ar1
        addi    2aaah,ar1
        sti     r0,*ar1
        ldi     0a0H,r0
        ldi     ar0,ar1
        addi    5555h,ar1
        sti     r0,*ar1
        ldi     *ar6++,r6
        sti     r6,*ar5
        and     80h,r6
wloop:  ldi     *ar5,r0
        and     080h,r0
        cmpi    r6,r0
        bne     wloop
        nop     *ar5++
        br      write
w_end:  rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        .data
NUM     .word   1F002h
FPOS    .word   1F003h
FLEN    .word   1F004h
LLAMP   .word   1F005h

MBUS    .word   10F8h
MCTL    .word   808064h
STCK    .word   809e00h
FLASH   .word   400000h
FS      .word   2FBh
FDAT    .word   FDATA
FDATA
       .word  008h,000h,000h,000h,0E8h,009h,000h,000h,031h,000h,000h,000h,000h,010h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
       .word  000h,000h,000h,000h,000h,000h,000h,000h
       .space 100
       .end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -