📄 boot.inc
字号:
.EQU PT_BELL=0X1
.EQU PT_LCDC=0X2
.EQU PT_MOTORL=6
.EQU PT_MOTORB=7
.EQU PT_EXDCLR=2
.EQU PT_EXDCNT=3
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
RESET: JMP CRESET
ARESET: JMP DRESET
BRESET: JMP IAP
PRESET: JMP PRGM00
FVER: .DB 0x00,0x01,0x00,0x00
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;* ;* 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 *
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOT_DELAY:
PUSH R16 ;2T
BOOT_DELAY1:
PUSH R16 ;2T
BOOT_DELAY2:
PUSH R16 ;2T
BOOT_DELAY3:
DEC R16 ;1T
BRNE BOOT_DELAY3 ;1T/2T
POP R16 ;2T
DEC R16 ;1T
BRNE BOOT_DELAY2 ;1T/2T
POP R16 ;2T
DEC R16 ;1T
BRNE BOOT_DELAY1 ;1T/2T
POP R16 ;2T
RET ;4T
;- - - - - - - - - - - - - - - - - - - - - - - - -
BOOT_GETC:
NOP
BOOT_GETC1:
IN R17,UCSR0A
SBRS R17,7
RJMP BOOT_GETC1
IN R16,UDR0
RET
;- - - - - - - - - - - - - - - - - - - - - - - - -
BOOT_PUTC:
NOP
BOOT_PUTC1:
IN R17,UCSR0A
SBRS R17,5
RJMP BOOT_PUTC1
OUT UDR0,R16
RET
;----------------------------------------
BOOT_U0INIT:
LDI R17,0
LDI R16,11
; SET BAUD RATE
STS UBRR0H, R17
OUT UBRR0L, R16
; ENABLE RECEIVER AND TRANSMITTER
LDI R16, (1<<RXEN0)|(1<<TXEN0)
OUT UCSR0B,R16
; SET FRAME FORMAT: 8DATA, 1STOP BIT
LDI R16, (3<<UCSZ00)
STS UCSR0C,R16
RET
;-----------------------------------------------------
BOOT_EEPROM_WRITE:
SBIC EECR,EEWE
RJMP BOOT_EEPROM_WRITE ; 等待上一次写操作结束
OUT EEARH,R18
OUT EEARL,R17 ; 设置地址寄存器(r18:r17)
OUT EEDR,R16 ; 将数据写入数据寄存器(R16)
SBI EECR,EEMWE ; 置位EEMWE
SBI EECR,EEWE ; 置位EEWE 以启动写操作
RET
;----------------------------------------
BOOT_EEPROM_READ:
SBIC EECR,EEWE
RJMP BOOT_EEPROM_READ ; 等待上一次写操作结束
OUT EEARH,R18 ; 设置地址寄存器(R18:R17)
OUT EEARL,R17
SBI EECR,EERE ; ?设置EERE 以启动读操作
IN R16,EEDR ; 自数据寄存器读取数据
RET
;----------------------------------------
BOOT_EEPROM_RD: LDI R18,0X0F
LDI R17,0XF4
RCALL BOOT_EEPROM_READ
RET
;----------------------------------
BOOT_EEPROM_WR: LDI R18,0X0F
LDI R17,0XF4
RCALL BOOT_EEPROM_WRITE
RET
;-------------------------------------
DISP_FVER: LDI ZH,HIGH(BOOT_TC_FVER*2)
LDI ZL,LOW(BOOT_TC_FVER*2)
LDI R21,3
LDI R22,2
LDI R23,5
RCALL BOOT_DISPCS
LDI R16,1
OUT RAMPZ,R16
LDI ZH,HIGH(FVER*2)
LDI ZL,LOW(FVER*2)
ELPM R16,Z+
STS DBUF1,R16
ELPM R16,Z+
STS DBUF2,R16
LDI R16,0X2E
STS DBUF3,R16
ELPM R16,Z+
STS DBUF4,R16
ELPM R16,Z+
STS DBUF5,R16
LDI R16,0
OUT RAMPZ,R16
LDS R16,DBUF1
CPI R16,0
BRNE DISP_FVER1
LDI R16,0X20
STS DBUF1,R16
DISP_FVER1: LDI ZH,HIGH(DBUF1)
LDI ZL,LOW(DBUF1)
LDI R21,3
LDI R22,11
LDI R23,5
RCALL BOOT_DISPRES
RET
;-------------------------------------
DISP_PVER: LDI ZH,HIGH(BOOT_TC_PVER*2)
LDI ZL,LOW(BOOT_TC_PVER*2)
LDI R21,5
LDI R22,2
LDI R23,5
RCALL BOOT_DISPCS
LDI ZH,HIGH(PVER*2)
LDI ZL,LOW(PVER*2)
ELPM R16,Z+
STS DBUF1,R16
ELPM R16,Z+
STS DBUF2,R16
LDI R16,0X2E
STS DBUF3,R16
ELPM R16,Z+
STS DBUF4,R16
ELPM R16,Z+
STS DBUF5,R16
LDS R16,DBUF1
CPI R16,0
BRNE DISP_PVER1
LDI R16,0X20
STS DBUF1,R16
DISP_PVER1: LDI ZH,HIGH(DBUF1)
LDI ZL,LOW(DBUF1)
LDI R21,5
LDI R22,11
LDI R23,5
RCALL BOOT_DISPRES
RET
;-------------------------------------
DISP_NEWPVER: LDI ZL,LOW(BOOT_TE_20*2)
LDI ZH,HIGH(BOOT_TE_20*2)
LDI R21,5
LDI R22,20
LDI R23,12
RCALL BOOT_DISPES
LDI ZL,LOW(BOOT_TE_2D*2)
LDI ZH,HIGH(BOOT_TE_2D*2)
LDI R21,5
LDI R22,17
LDI R23,2
RCALL BOOT_DISPES
LDI ZH,HIGH(PVER*2)
LDI ZL,LOW(PVER*2)
ELPM R16,Z+
STS DBUF1,R16
ELPM R16,Z+
STS DBUF2,R16
LDI R16,0X2E
STS DBUF3,R16
ELPM R16,Z+
STS DBUF4,R16
ELPM R16,Z+
STS DBUF5,R16
LDS R16,DBUF1
CPI R16,0
BRNE DISP_NEWPVER1
LDI R16,0X20
STS DBUF1,R16
DISP_NEWPVER1:LDI ZH,HIGH(DBUF1)
LDI ZL,LOW(DBUF1)
LDI R21,5
LDI R22,19
LDI R23,5
RCALL BOOT_DISPRES
RET
;********************************************
DISP_MODEL: LDI ZL,LOW(BOOT_TE_MODEL*2)
LDI ZH,HIGH(BOOT_TE_MODEL*2)
LDI R21,1
LDI R22,2
LDI R23,11
RCALL BOOT_DISPES
RET
;*************************************
BOOT_SHOW_CRLF: LDI R16,0X0D ;CR
RCALL BOOT_PUTC
LDI R16,0X0A ;LF
RCALL BOOT_PUTC
RET
;- - - - - - -- - -- - -- -- - -- - -- - - -
BOOT_SHOW_VID: LDI R16,0X53 ;S
RCALL BOOT_PUTC
LDI R16,0X48 ;H
RCALL BOOT_PUTC
LDI R16,0X47 ;G
RCALL BOOT_PUTC
LDI R16,0X55 ;U
RCALL BOOT_PUTC
LDI R16,0X41 ;A
RCALL BOOT_PUTC
LDI R16,0X4F ;0
RCALL BOOT_PUTC
RET
;- - - - - - -- - -- - -- -- - -- - -- - - -
BOOT_SHOW_DID: LDI R16,0X47 ;G
RCALL BOOT_PUTC
LDI R16,0X41 ;A
RCALL BOOT_PUTC
LDI R16,0X2D ;-
RCALL BOOT_PUTC
LDI R16,0X36 ;6
RCALL BOOT_PUTC
LDI R16,0X30 ;0
RCALL BOOT_PUTC
LDI R16,0X30 ;0
RCALL BOOT_PUTC
LDI R16,0X42 ;B
RCALL BOOT_PUTC
RET
;- - - - - - -- - -- - -- -- - -- - -- - - -
BOOT_SHOW_FVER: LDI R16,1
OUT RAMPZ,R16
LDI R16,0X46 ;'F'
RCALL BOOT_PUTC
LDI ZH,HIGH(FVER*2)
LDI ZL,LOW(FVER*2)
ELPM R16,Z+
LDI R17,0X30
ADD R16,R17
RCALL BOOT_PUTC
ELPM R16,Z+
LDI R17,0X30
ADD R16,R17
RCALL BOOT_PUTC
LDI R16,0X2E ;
RCALL BOOT_PUTC
ELPM R16,Z+
LDI R17,0X30
ADD R16,R17
RCALL BOOT_PUTC
ELPM R16,Z+
LDI R17,0X30
ADD R16,R17
RCALL BOOT_PUTC
LDI R16,0
OUT RAMPZ,R16
RET
;----------------------------------------------------
BOOT_SHOW_PVER:
LDI R16,0X50 ; 'P'
RCALL BOOT_PUTC
LDI ZH,HIGH(PVER*2)
LDI ZL,LOW(PVER*2)
LPM R16,Z+
LDI R17,0X30
ADD R16,R17
RCALL BOOT_PUTC
LPM R16,Z+
LDI R17,0X30
ADD R16,R17
RCALL BOOT_PUTC
LDI R16,0X2E ;
RCALL BOOT_PUTC
LPM R16,Z+
LDI R17,0X30
ADD R16,R17
RCALL BOOT_PUTC
LPM R16,Z+
LDI R17,0X30
ADD R16,R17
RCALL BOOT_PUTC
RET
;***************************************
BOOT_BELL: LDS R16,PORTG
CBR R16,PT_BELL
STS PORTG,R16
LDI R16,97
RCALL BOOT_DELAY
LDS R16,PORTG
SBR R16,PT_BELL
STS PORTG,R16
LDI R16,97
RCALL BOOT_DELAY
LDS R16,PORTG
CBR R16,PT_BELL
STS PORTG,R16
LDI R16,97
RCALL BOOT_DELAY
LDS R16,PORTG
SBR R16,PT_BELL
STS PORTG,R16
RET
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;165key
BOOT_KEYC:
CLR R20
STS KEYV,R20
BOOT_KEY00C:
CBI PORTD,HC165_CLK
CBI PORTD,HC165_PL
NOP
SBI PORTD,HC165_PL
LDS R16,PING
SBRS R16,HC165_DAT
SBR R20,0X1
BOOT_KEY01C:
SBI PORTD,HC165_CLK
LDS R16,PING
SBRS R16,HC165_DAT
SBR R20,0X2
BOOT_KEY02C:
CBI PORTD,HC165_CLK
SBI PORTD,HC165_CLK
LDS R16,PING
SBRS R16,HC165_DAT
SBR R20,0X4
BOOT_KEY03C:
CBI PORTD,HC165_CLK
SBI PORTD,HC165_CLK
LDS R16,PING
SBRS R16,HC165_DAT
SBR R20,0X8
BOOT_KEY04C:
CBI PORTD,HC165_CLK
SBI PORTD,HC165_CLK
LDS R16,PING
SBRS R16,HC165_DAT
SBR R20,0X10
BOOT_KEY05C:
CBI PORTD,HC165_CLK
SBI PORTD,HC165_CLK
LDS R16,PING
SBRS R16,HC165_DAT
SBR R20,0X20
BOOT_KEY06C:
CBI PORTD,HC165_CLK
SBI PORTD,HC165_CLK
LDS R16,PING
SBRS R16,HC165_DAT
SBR R20,0X40
BOOT_KEY07C:
CBI PORTD,HC165_CLK
SBI PORTD,HC165_CLK
LDS R16,PING
SBRS R16,HC165_DAT
SBR R20,0X80
BOOT_KEY08C:
CBI PORTD,HC165_CLK
STS KEYV,R20
RET
;--------------------------------------
;1=智能/确认 2=清零/退出
;4=</清分 8=计数/>
;16=预置/+10 32=累加/+1
;64=菜单 128=启动
BOOT_KEY:
CALL BOOT_KEYC
LDS R16,KEYV
CPI R16,13
BRNE BOOT_KEY09
LDI R16,100
CALL DELAY
LDI R18,0
CALL KEYC
BOOT_KEY09:
RET
;- - - - - - - - - - - - - - - - -
;LCD
;- - - - - - - - - - - - - - - - -
BOOT_LCDBL_OFF:
LDS R16,PORTG
SBR R16,PT_LCDC
STS PORTG,R16
RET
;- - - - - - - - - - - - - - - - -
BOOT_LCDBL_ON:
LDS R16,PORTG
CBR R16,PT_LCDC
STS PORTG,R16
RET
;- - - - - - - - - - - - - - - - -
BOOT_LCD_RST:
CBI PORTC,LCD_RES
RCALL BOOT_DLLCD
RCALL BOOT_DLLCD
SBI PORTC,LCD_RES
RET
;- - - - - - - - - - - - - - - - -
BOOT_OUTI:
SBI PORTC,LCD_CS1
SBI PORTC,LCD_CS2
SBI PORTC,LCD_CS3
SBI PORTC,LCD_CS4
SBI PORTC,LCD_E
CBI PORTC,LCD_RS
CBI PORTC,LCD_RW
OUT PORTA,R16
RCALL BOOT_DLLCD
CBI PORTC,LCD_E
RCALL BOOT_DLLCD
CBI PORTC,LCD_CS1
CBI PORTC,LCD_CS2
CBI PORTC,LCD_CS3
CBI PORTC,LCD_CS4
RCALL BOOT_DLLCD
RET
;- - - - - - - - - - - - - - - - -
BOOT_OUTI1:
SBI PORTC,LCD_CS1
SBI PORTC,LCD_E
CBI PORTC,LCD_RS
CBI PORTC,LCD_RW
RCALL BOOT_DLLCD
OUT PORTA,R16
RCALL BOOT_DLLCD
CBI PORTC,LCD_E
RCALL BOOT_DLLCD
CBI PORTC,LCD_CS1
RCALL BOOT_DLLCD
RET
;- - - - - - - - - - - - - - - - -
BOOT_OUTI2:
SBI PORTC,LCD_CS2
SBI PORTC,LCD_E
CBI PORTC,LCD_RS
CBI PORTC,LCD_RW
OUT PORTA,R16
RCALL BOOT_DLLCD
CBI PORTC,LCD_E
RCALL BOOT_DLLCD
CBI PORTC,LCD_CS2
RCALL BOOT_DLLCD
RET
;- - - - - - - - - - - - - - - - -
BOOT_OUTI3:
SBI PORTC,LCD_CS3
SBI PORTC,LCD_E
CBI PORTC,LCD_RS
CBI PORTC,LCD_RW
OUT PORTA,R16
RCALL BOOT_DLLCD
CBI PORTC,LCD_E
RCALL BOOT_DLLCD
CBI PORTC,LCD_CS3
RCALL BOOT_DLLCD
RET
;- - - - - - - - - - - - - - - - -
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -