📄 ex2.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 + -