📄 main.asm
字号:
; MOV #20,BUS_SPD
; MOV #32,DATASIZE
; LDHX #FILE_PTR
; JSR ERARNGE
; LDHX START_ADDR
; MOV #64,BLOCK_SIZE
;ERASERALL2:
; LDA ,X
; CMP #$FF
; BNE ERASERALL3
; AIX #$01
; DBNZ BLOCK_SIZE,ERASERALL2
; MOV #3,ERR_NUM
; STHX START_ADDR
; DBNZ BLOCK_NUM,ERASERALL1
; CLR ERASE
; MOV #$01,CANUPDATA
; ;开通讯中断
; ; SCC2: SCTIE=0,TCIE=1,SCRIE=1,ILIE=1,TE=1,RE=1,RWU=0,SBK=0
; BSET 5,SCC2
; RTS
;ERASERALL3:
; DBNZ ERR_NUM,ERASERALL1
; CLR ERASE
; ; SCC2: SCTIE=0,TCIE=1,SCRIE=1,ILIE=1,TE=1,RE=1,RWU=0,SBK=0
; BSET 5,SCC2
; RTS
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件:(无)
;'出口条件:ERR_NUM FF:写编程标记错
;************************************************************************
CHANGFLAG:
SEI
CLR UPOVER
MOV #$03,ERR_NUM
CHANGFLAG1:
feed_watchdog
MOV #20,BUS_SPD
MOV #1,DATASIZE
MOV #$EB,START_ADDR
MOV #$80,START_ADDR+1
LDHX #FILE_PTR
JSR ERARNGE
feed_watchdog
MOV #20,BUS_SPD
MOV #1,DATASIZE
MOV #$EB,START_ADDR
MOV #$80,START_ADDR+1
MOV #$AA,DATAARRAY
LDHX #FILE_PTR
JSR PRGRNGE
LDHX START_ADDR
LDA ,X
CMP #NOTUPDA
BEQ CHANGFLAG2
DBNZ ERR_NUM,CHANGFLAG1
CLR UPOVER
CLI
RTS
CHANGFLAG2:
NOP
NOP
NOP
JMP CHANGFLAG2 ;如果看门狗开的话程序运行到此会复位
;** ===================================================================
;** Interrupt handler : isrINT_SCITransmit
;**
;** Description :
;** User interrupt service routine.
;** Parameters : None
;** Returns : Nothing
;** ===================================================================
isrINT_SCITransmit:
; Write your interrupt code here ...
SEI
;BCLR SCC3_T8,SCC3
PSHH
LDHX #$EB80
LDA ,X
CMP #NOTUPDA
BNE T0_00
PULH
JMP $EB46
T0_00:
LDA LENTH
BEQ T0_03
LDHX RSTOHX
LDA ,X
BRCLR SCS1_SCTE,SCS1,T0_02
STA SCDR
DEC LENTH
AIX #$01
STHX RSTOHX
T0_02:
PULH
CLI
RTI
T0_03:
BCLR SCC2_SCTIE,SCC2
DIR_Receive
BRA T0_02
; end of isrINT_SCITransmit
;** ===================================================================
;** Interrupt handler : isrINT_SCIReceive
;**
;** Description :
;** User interrupt service routine.
;** Parameters : None
;** Returns : Nothing
;** ===================================================================
;XDEF isrINT_SCIReceive
isrINT_SCIReceive:
; Write your interrupt code here ...
;RTI
SEI
PSHH
LDHX #$EB80
LDA ,X
CMP #NOTUPDA
BNE R0_01
PULH
JMP $EB49
R0_01:
BRCLR SCC3_R8,SCC3,R0_02
BRCLR 5,SCS1,IS_ME2
LDA SCDR
STA ADDR
AND #MYTYPE
CMP #MYTYPE
BNE IS_ME1
LDHX #TR_BUFF
MOV ADDR,X+
STHX RSTOHX
CLR LENTH
MOV #$05,COUNT
JMP SRET
IS_ME1:
BSET SCC2_RWU,SCC2
IS_ME2:
JMP SRET
R0_02: ;'SM2=0,为数据
;'是不是长度字节
LDA LENTH
CMP #$00
BNE R0_04
BRCLR 5,SCS1,IS_ME2
LDA SCDR
STA LENTH
CMP #$07
BCS IS_ME1
LDA LENTH
CMP #$3C
BHI IS_ME1
LDHX RSTOHX
MOV LENTH,X+
STHX RSTOHX
DEC COUNT
DEC LENTH
JMP SRET
R0_04: ;'为数据
BRCLR 5,SCS1,IS_ME2
LDA SCDR
LDHX RSTOHX
STA ,X
AIX #$01
STHX RSTOHX
DBNZ COUNT,R0_041
LDA MYADDRESS1
CMP #$FF
BEQ R0_041
CMP TR_BUFF+3
BNE IS_ME1
LDA MYADDRESS2
CMP TR_BUFF+4
BNE IS_ME1
LDA MYADDRESS3
CMP TR_BUFF+5
BNE IS_ME1
;MOV #$05,COUNT
R0_041:
DBNZ LENTH,R0_05
JMP R0_10
R0_05: JMP SRET
;R0_06: JMP DA_ER
R0_10: ;'数据处理
BSET SCC2_RWU,SCC2
LDHX #TR_BUFF+1
MOV X+,CRCLENTH
DEC CRCLENTH
LDHX #TR_BUFF
JSR MAKECRC
;BRA R0_18
LDA ,X
CMP CRCH
BNE R0_181
AIX #$01
LDA ,X
CMP CRCL
BNE R0_181
R0_18:
LDHX #TR_BUFF+2
LDA ,X
CMP #$61
BLO S_UP_ERR;等同于BCC
CMP #$64
BHI S_UP_ERR
SUB #$61
STA TEMP
ADD TEMP
ADD TEMP
CLRH
TAX
JMP R0_22,X
R0_22: JMP S_UPOR
JMP S_UPDA
JMP S_OVER
JMP S_QUERY
R0_181:
MOV #$01,DATA_ER
JMP SRET
S_UP_ERR:
PULH
CLI
RTI
S_UPOR:
LDA CANUPDATA
BNE S_UPOR4
LDHX #TR_BUFF+6
MOV X+,NUMBER_DATA0
MOV X+,NUMBER_DATA1
MOV #$BC,START_ADDR
MOV #$00,START_ADDR+1
MOV #3,ERR_NUM
MOV #190,BLOCK_NUM
S_UPOR1:
feed_watchdog
MOV #20,BUS_SPD
MOV #32,DATASIZE
LDHX #FILE_PTR
JSR ERARNGE
LDHX START_ADDR
MOV #64,BLOCK_SIZE
S_UPOR2:
feed_watchdog
LDA ,X
CMP #$FF
BNE S_UPOR3
AIX #$01
DBNZ BLOCK_SIZE,S_UPOR2
MOV #3,ERR_NUM
STHX START_ADDR
DBNZ BLOCK_NUM,S_UPOR1
MOV #$01,CANUPDATA
JMP DA_RI1
S_UPOR3:
DBNZ ERR_NUM,S_UPOR1
JMP SRET
S_UPOR4:
JMP DA_RI1
S_UPDA: CLR CANUPDATA
LDHX #TR_BUFF+6
LDA ,X
AIX #$01
CMP DBJ0
BNE S_UPDA1_1
LDA ,X
AIX #$01
CMP DBJ1
BEQ S_UPOR4
S_UPDA1_1:
LDHX #TR_BUFF+6
LDA ,X
AIX #$01
EOR NUMBER_DATA0
BEQ S_UPDA0
JMP SRET
S_UPDA0:
LDA ,X
AIX #$01
EOR NUMBER_DATA1
BEQ S_UPDA1
JMP SRET
S_UPDA1:
LDHX #TR_BUFF+9
LDA ,X
ADD #$01
STA LENTH
;CLRA
MOV #$00,CHECKHE
R2_00: ;'和校验
LDA ,X
ADD CHECKHE
STA CHECKHE
AIX #$01
DBNZ LENTH,R2_00
;'和校验不为0则为数据错误
COM CHECKHE
BNE R2_003
LDHX START_ADDR
CPHX #$EBBF
BHI R2_002
LDA DATASIZE
SUB #$03
STA LENTH
MOV #$20,BUS_SPD
MOV LENTH,DATASIZE
LDHX #FILE_PTR
JSR PRGRNGE
LDHX #TR_BUFF+12
R2_001:
MOV X+,FLASHDB
PSHH
PSHX
LDHX START_ADDR
LDA ,X
AIX #$01
STHX START_ADDR
PULX
PULH
CMP FLASHDB
BNE R2_003
DBNZ LENTH,R2_001
MOV NUMBER_DATA1,DBJ1
MOV NUMBER_DATA0,DBJ0
LDA NUMBER_DATA0
SUB #$01
STA NUMBER_DATA0
LDA NUMBER_DATA1
SBC #0
STA NUMBER_DATA1
R2_002
JMP DA_RI1
R2_003:
JMP SRET
S_OVER:
MOV #$01,UPOVER
PULH
;CLI
RTI
DA_RI1:
LDHX #TR_BUFF
LDA #MYTYPE
STA ,X
AIX #$01
LDA #LONGTH
STA ,X
AIX #$01
LDA #RIDATA
STA ,X
AIX #$01
LDA MYADDRESS1
STA ,X
AIX #$01
LDA MYADDRESS2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -