?? vfd_isr.asm
字號:
#define PO_VFD_SID PORTB,2
#define PO_VFD_CLKD PORTB,1
#define PO_VFD_BKG PORTE,6
#define PO_VFD_BKD PORTB,0
#define PO_VFD_LAT PORTE,5
#define PO_VFD_CLKG PORTE,7
#include <iom64.h>
library SendData2VFD
public VFD_isr
extern VFD_Counter,Display_Memory,Display_Buffer,VFD_Flag,Display_Point,MoveCounter
rseg CODE
VFD_isr:sbi PO_VFD_BKG
repti sav,r27,r26,r25,r24
st -Y, sav
endr
ldi r24, 0
out SPCR, r24
lds r24, VFD_Counter
andi r24, 63
ldi r25, 1
and r25, r24
breq DownBKD
sbi PO_VFD_BKD
rjmp EndSetBKD
DownBKD: cbi PO_VFD_BKD
EndSetBKD:
cpi r24, 2
brsh DownSID
sbi PO_VFD_SID
rjmp EndSetSID
DownSID: cbi PO_VFD_SID
EndSetSID: cpi r24, 0
brne GetVFDPiont
ldi r27, high Display_Memory
ldi r26, low Display_Memory
rjmp EndGetPoint
GetVFDPiont: lds r27, Display_Point+1
lds r26, Display_Point
EndGetPoint: sbi PO_VFD_LAT
cbi PO_VFD_CLKG
cbi PO_VFD_LAT
sbi PO_VFD_CLKG
inc r24
sts VFD_Counter,r24
ldi r24, 0x5c
out SPCR, r24
ldi r25,16
dec r25
brne $-2
cbi PO_VFD_BKG
ldi r24, 7
ld r25, X+
sbi SPSR, SPI2X
out SPDR, r25
SPILoop: ld r25, X+
WaitSPI: sbis SPSR, SPIF
rjmp WaitSPI
out SPDR, r25
dec r24
brne SPILoop
sts Display_Point+1,r27
sts Display_Point,r26
lds r25, MoveCounter
dec r25
cpi r25, 4
brlo MoveAble
andi r25, 63
sts MoveCounter,r25
rjmp EndVFDISR
MoveAble: lds r24, VFD_Flag
sbrc r24, 7
rjmp EndVFDISR
sts MoveCounter,r25
ldi r24, 3
sub r24, r25
st -Y, r30
st -Y, r31
ldi r25, 0
ror r24
ror r24
rol r25
ldi r27, high Display_Memory
ldi r26, low Display_Memory
ldi r31, high Display_Buffer
ldi r30, low Display_Buffer
add r26, r24
adc r27, r25
add r30, r24
adc r31, r25
MoveLoop: ld r25, Z+
st X+, r25
dec r24
brne MoveLoop
ld r31, Y+
ld r30, Y+
EndVFDISR: repti load,r24,r25,r26,r27
ld load, Y+
endr
ret
endmod
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -