📄 iap.inc
字号:
Rdloop:
elpm r0, Z+
ld r1, x+
cpse r0, r1
rjmp Error
sbiw r25:r24, 1 ;use subi for PAGESIZEB<=256
brne Rdloop
rjmp Return ; return to RWW section
Error: ; verify that RWW section
ldi r16,3
sts ERR_IAP,r16
rjmp Return
Return:
;lds r16, SPMCSR
in r16, SPMCSR
sbrs r16, RWWSB ; If RWWSB is set, the RWW section is not ready yet
ret
; re-enable the RWW section
ldi r20, (1<<RWWSRE) | (1<<SPMEN)
rcall Do_spm
rjmp Return
;- - - - - - - - - - -- - - - - - - - - -
Do_spm: ; check for previous SPM complete
Wait_spm:
;lds r16, SPMCSR
in r16, SPMCSR
sbrc r16, SPMEN
rjmp Wait_spm
; input: spmcsrval determines SPM action
; disable interrupts if enabled, store status
in r17, SREG
cli
; check that no EEPROM write access is present
Wait_ee:
sbic EECR, EEPE
rjmp Wait_ee
; SPM timed sequence
;sts SPMCSR, r20
out SPMCSR, r20
spm
; restore SREG (to enable interrupts if originally enabled)
out SREG, r17
ret
;-----------------------------------------------------
bbell:
ret
;********************************************************************
;* ;* if fos=8mhz time (3.5us------1s) *
;* r16 time *
;* 22 1ms *
;* 29 2ms *
;* 40 5ms *
;* 51 10ms *
;* 65 20ms *
;* 90 50ms *
;* 114 100ms *
;* 144 200ms *
;* 197 500ms *
;* 249 1s *
;********************************************************************
;bdelay: push r16 ;2t
bdelay1: push r16 ;2t
bdelay2: push r16 ;2t
bdelay3: dec r16 ;1t
brne bdelay3 ;1t/2t
pop r16 ;2t
dec r16 ;1t
brne bdelay2 ;1t/2t
pop r16 ;2t
dec r16 ;1t
brne bdelay1 ;1t/2t
pop r16 ;2t
bdelay:
ret ;4t
;- - - - - - -- - -- - -- -- - -- - -- - - -
show_vid:
ldi r16,0x53 ; 'S'
rcall putc_IAP
ldi r16,0x48 ; 'H'
rcall putc_IAP
ldi r16,0x47 ; 'G'
rcall putc_IAP
ldi r16,0x55 ; 'U '
rcall putc_IAP
ldi r16,0x41 ; 'A'
rcall putc_IAP
ldi r16,0x4f ; 'O '
rcall putc_IAP
ret
;- - - - - - -- - -- - -- -- - -- - -- - - -
show_did:
ldi r16,0x47 ; 'G'
rcall putc_IAP
ldi r16,0x41 ; 'A'
rcall putc_IAP
ldi r16,'2' ; '6'
rcall putc_IAP
ldi r16,'0' ; '0'
rcall putc_IAP
ldi r16,'0' ; '8'
rcall putc_IAP
ret
;- - - - - - -- - -- - -- -- - -- - -- - - -
show_fver:
ldi r16,0x46 ;'F'
rcall putc_IAP
ldi r16,1
out rampz,r16
ldi zh,high(fver*2)
ldi zl,low(fver*2)
elpm r16,z+
ldi r17,0x30
add r16,r17
rcall putc_IAP
elpm r16,z+
ldi r17,0x30
add r16,r17
rcall putc_IAP
ldi r16,0x2E ;
rcall putc_IAP
elpm r16,z+
ldi r17,0x30
add r16,r17
rcall putc_IAP
elpm r16,z+
ldi r17,0x30
add r16,r17
rcall putc_IAP
clr r16
out rampz,r16
ret
;- - - - - - -- - -- - -- -- - -- - -- - - -
show_pver:
ldi r16,0x50 ; 'P'
rcall putc_IAP
ldi zh,high(pver*2)
ldi zl,low(pver*2)
lpm r16,z+
ldi r17,0x30
add r16,r17
rcall putc_IAP
lpm r16,z+
ldi r17,0x30
add r16,r17
rcall putc_IAP
ldi r16,0x2E ;
rcall putc_IAP
lpm r16,z+
ldi r17,0x30
add r16,r17
rcall putc_IAP
lpm r16,z+
ldi r17,0x30
add r16,r17
rcall putc_IAP
ret
;- - - - - - -- - -- - -- -- - -- - -- - - -
show_ok:
ldi r16,0x4f ; 'O'
rcall putc_IAP
ldi r16,0x4b ; 'K'
rcall putc_IAP
ret
;- - - - - - -- - -- - -- -- - -- - -- - - -
show_crlf:
ldi r16,0x0d ; cr
rcall putc_IAP
ldi r16,0x0a ; lf
rcall putc_IAP
ret
;- - - - - - - - - - - - - - - - - - - - - - - - -
getc_IAP:
nop
getc_IAP1:
lds r17 ,ucsr1a
sbrs r17 ,7
rjmp getc_IAP1
lds r16,udr1;;暂存收到的数据
ret
;- - - - - - - - - - - - - - - - - -
; ldi r16,0x47 ;g
; rcall putc_IAP
;- - - - - - - - - - - - - - - - - -
putc_IAP:;;发送一个字符
nop
putc_IAP1:
lds r17,ucsr1a
sbrs r17,5
rjmp putc_IAP1
sts udr1,r16
ret
UART1_INIT_IAP:
ldi r17,0
ldi r16,11
; Set baud rate
sts UBRR1H, r17
sts UBRR1L, r16
; Enable receiver and transmitter 接受中断
ldi r16, (1<<RXEN1)|(1<<TXEN1)|(0<<UCSZ12);|(1<<RXCIE1);
sts UCSR1B,r16
; 异步 无奇偶/ 1stop bit 8位长度
ldi r16, (0<<UMSEL11)|(0<<UMSEL10)|(0<<UPM11)|(0<<UPM10)|(0<<USBS1)|(1<<UCSZ11)|(1<<UCSZ10)|(0<<UCPOL1);
sts UCSR1C,r16
ret
;- - - - - - - - - - - - - - - - - - - - - - - -
keyc_IAP:
clr r20
sts keyf,r20
key_IAP00c:
cbi porta,hc165_clk
nop
nop
cbi porta,hc165_pl
nop
nop
sbi porta,hc165_pl
nop
nop
in r16,ping
sbrs r16,hc165_dat
sbr r20,0x1
key_IAP01c:
sbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
in r16,ping
sbrs r16,hc165_dat
sbr r20,0x2
key_IAP02c:
cbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
sbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
in r16,ping
sbrs r16,hc165_dat
sbr r20,0x4
key_IAP03c:
cbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
sbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
in r16,ping
sbrs r16,hc165_dat
sbr r20,0x8
key_IAP04c:
cbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
sbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
in r16,ping
sbrs r16,hc165_dat
sbr r20,0x10
key_IAP05c:
cbi porta,hc165_clk
nop
nop
sbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
in r16,ping
sbrs r16,hc165_dat
sbr r20,0x20
key_IAP06c:
cbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
sbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
in r16,ping
sbrs r16,hc165_dat
sbr r20,0x40
key_IAP07c:
cbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
sbi porta,hc165_clk
nop
nop
nop
nop
nop
nop
in r16,ping
sbrs r16,hc165_dat
sbr r20,0x80
key_IAP08c:
cbi porta,hc165_clk
nop
nop
nop
nop
sts keyf,r20
ret
;z
;r21 d_x
;r22 d_y
;r23 cnt
dispes_IAP:
sts d_x,r21
sts d_y,r22
ldi r16,8
sts d_b ,r16
dispes_IAP1:
lds r16,d_x
sts d_dx,r16
lds r16,d_y
andi r16,0b00000111
sts d_dy,r16
lds r16,d_y
lsr r16
lsr r16
lsr r16
inc r16
sts d_dz,r16
Elpm r16,z+
push zl
push zh
push r23
clr r17
clc
rol r16
rol r17
clc
rol r16
rol r17
clc
rol r16
rol r17
clc
rol r16
rol r17
ldi zl,low(tabec_IAP*2)
ldi zh,high(tabec_IAP*2)
add zl,r16
adc zh,r17
ldi r16,1
out rampz,r16
rcall dispcc_IAP
pop r23
pop zh
pop zl
lds r16,d_y
inc r16
sts d_y,r16
dec r23
brne dispes_IAP1
ret
;- - - - - - - - - - - - - - - - - - - - - - - - -
dispcc_IAP:
lds r16,d_dx
ori r16,0b10111000
sts d_dx,r16
lds r16,d_dy
lsl r16
lsl r16
lsl r16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -