📄 main.asm
字号:
;*******************************************************************
;* This stationery serves as the framework for a user application. *
;* For a more comprehensive program that demonstrates the more *
;* advanced functionality of this processor, please see the *
;* demonstration applications, located in the examples *
;* subdirectory of the "Freescale CodeWarrior for HC08" program *
;* directory. *
;*******************************************************************
; Include derivative-specific definitions
INCLUDE 'bootload.inc'
; export symbols
XDEF _Startup, main
XREF __SEG_END_SSTACK ; symbol defined by the linker for the end of the stack
; variable/data section
MY_ZEROPAGE: SECTION SHORT ; Insert here your data definition
;*******************************************************************************
;
TR_BUFF: EQU $0060 ;64字节
FILE_PTR: EQU $0068
BUS_SPD: EQU $0068 ;1字节
DATASIZE: EQU $0069 ;1字节
START_ADDR: EQU $006a ;1字节
DATAARRAY: EQU $006c ;1-32字节
RSTOHX: EQU $00A0 ;2字节
LENTH: EQU $00A2 ;1字节
DATA_ER: EQU $00A3 ;1字节
TEMP: EQU $00A4 ;1字节
COUNT: EQU $00A5 ;1字节
NUMBER_DATA0: EQU $00A6 ;1字节
NUMBER_DATA1: EQU $00A7 ;1字节
FLASHDB: EQU $00A8 ;1字节
;*******************************************************************************
;MYADDRESS 3字节+1字节和校验=#$FF
MYADDRESS1: EQU $00A9
MYADDRESS3: EQU $00AA
MYADDRESS2: EQU $00AB
MYADDRESSJY: EQU $00AC
;*******************************************************************************
;
CRCH: EQU $00AE
CRCL: EQU $00AF
CRCLENTH: EQU $00B0
CRCT: EQU $00B1
;*******************************************************************************
SENDSTRAT: EQU $00B2
ADDR: EQU $00B3
CHECKHE: EQU $00B4
UP_REUP: EQU $00B5
BLOCK_NUM: EQU $00B6
UPOVER: EQU $00B7
ERR_NUM: EQU $00B8
BLOCK_SIZE: EQU $00B9
FLAG: EQU $00BA
TIMET: EQU $00BB
RAM_ADR_H: EQU $00BC
RAM_ADR_L: EQU $00BD
RAM_DATA: EQU $00BE
CHK_SUM: EQU $00BF
END_ADR_H: EQU $00C0
END_ADR_L: EQU $00C1
temp: EQU $00C2
ZER_CN: EQU $00C3 ;'发送错误次数
MYADDR: EQU $00C4
BAUD_SET: EQU $00C5
VERIFY_BACK0: EQU $00C6 ;4字节5CH--5FH
VERIFY_BACK1: EQU $00C7 ;
VERIFY_BACK2: EQU $00C8 ;
VERIFY_BACK3: EQU $00C9 ;
TMPUSE: EQU $00CA ;
VERIFY_DATA0: EQU $00CB ;4字节5CH--5FH
VERIFY_DATA1: EQU $00CC ;
VERIFY_DATA2: EQU $00CD ;
VERIFY_DATA3: EQU $00CE ;
NUM_ERROR: EQU $00CF ;
ERASE: EQU $00D0 ;'擦写FLASH标志位
CANUPDATA: EQU $00D1 ;'?????
DBJ0: EQU $00D2
DBJ1: EQU $00D3
;UP_REUP: EQU $10
;'.1主从帧
;MS_UPORD: EQU $1D ;'升级命令帧
;MS_UPDATE: EQU $1E ;'升级数据帧
;MS_WSTA: EQU $1F ;'查询窗机状态帧
;'.2从主帧
SM_DARI: EQU $1B ;'接收数据正确
SM_DAER: EQU $1C ;'接收数据错误
SM_WSTA: EQU $1D ;'反馈窗机状态
UP_OVER: EQU $10
;BSZ
;定义标志位
;NODAT: EQU $48 ;'消费记录标志位
;UPING_STATUS: EQU $61 ;=1 -- 处于升级状态 =0 -- 处于用户程序状态
;UPOVER: EQU $62 ;'升级结束标志
;ZHEN_NU: EQU $65 ;'帧翻转序号
;DATA_ER: EQU $66 ;'数据正确标志位
;NOW: EQU $67 ;'等待发送位
;
;常数定义
LONGTH: EQU $07 ;'字节长度
CRCLONG: EQU $06 ;'CRC校验长度
NOTUPDA: EQU $AA ;'非升级状态标志
UPDATE: EQU $FF ;'升级状态标志
RIDATA: EQU $55 ;'数据正确标志
ERDATA: EQU $AA ;'数据错误标志
MYSTAT: EQU $BA ;'回应查询帧状态
MYTYPE: EQU $60 ;'本产品的类型
;*****************************************************
;TR_BUFF1: EQU $03
UP_UPDA: EQU $01 ;'处于升级状态
UP_USER: EQU $02 ;'处于用户程序区
;UP_OVER: EQU $03 ;'升级结束
UP_NOOV: EQU $04 ;'升级未结束
UP_ALLO: EQU $05 ;'可以升级
UP_NOT: EQU $06 ;'不可以升级
ERASEIN: EQU $07 ;'擦写程序存储器
ERASEOV: EQU $08 ;'擦除完毕
RSEND: EQU $09 ;'重发上一帧
NSEND: EQU $0A ;'不重发上一帧
;UP_REUP: EQU $0B ;'重新开始升级
SETBORD: EQU $0C ;'设置波特率成功
NOTBORD: EQU $0D ;'设置波特率失败
S_ERASE: EQU $0E ;'擦写FLASH存储器
;N_ERASE: EQU $0F ;'
L_REMOTE: EQU $0F ;
; code section
MyCode: SECTION
PRGRNGE: EQU $FC06
ERARNGE: EQU $FCBE
LDRNGE: EQU $FF30
MON_PRGRNGE: EQU $FC28
MON_ERARNGE: EQU $FF2C
MON_LDRNGE: EQU $FF24
EE_WRITE: EQU $FD3F
EE_READ: EQU $FDD0
MYID: EQU $EBC0
ORG $EC00
main:
_Startup:
LDHX #$EB80
LDA ,X
CMP #NOTUPDA
BNE START
JMP $EB70
START:
LDHX #$0200
TXS
LDHX #$015F
CLEARRAM:
CLR ,X
AIX #-1
TXA
CMP #$5F
BNE CLEARRAM
SEI ; Disable interrupts
;** ### MC68HC908JL16_32FA "Cpu" init code ... **
;** PE initialization code after reset **
; System clock initialization
; Common initialization of the write once registers
; CONFIG1: COPRS=1,LVID=1,SSREC=0,STOP=0,COPD=0
MOV #$90,CONFIG1
; CONFIG2: IRQPUD=0,LVIT1=0,LVIT0=0,IICSEL=0,STOP_ICLKDIS=0
CLR CONFIG2
; Common initialization of the CPU registers
; ### Init_SCI init code
; SCC1: LOOPS=0,ENSCI=0,TXINV=0,M=0,WAKE=0,ILTY=0,PEN=0,PTY=0
CLR SCC1 ; Disable the SCI module
LDA SCS1 ; Dummy read of the SCS1 registr to clear flags
LDA SCS2 ; Dummy read of the SCS2 registr to clear flags
LDA SCDR ; Dummy read of the SCDR registr to clear flags
; SCC3: R8=0,T8=0,ORIE=0,NEIE=0,FEIE=0,PEIE=0
CLR SCC3
; SCBR: SCP1=1,SCP0=0,SCR2=0,SCR1=1,SCR0=0
MOV #$20,SCBR;#$22,SCBR
; SCC1: LOOPS=0,ENSCI=1,TXINV=0,M=1,WAKE=1,ILTY=1,PEN=0,PTY=0
MOV #$5C,SCC1 ; #$40,SCC1
; SCC2: SCTIE=0,TCIE=1,SCRIE=1,ILIE=1,TE=1,RE=1,RWU=0,SBK=0
MOV #$2E,SCC2 ; #$24,SCC2
; ### Init_COP init code
LDA #$FF
STA COPCTL ; Clear WatchDog counter
; ### Init_TIM init code
; T1SC: TOF=0,TOIE=0,TSTOP=1,TRST=1,PS2=0,PS1=0,PS0=0
MOV #$30,T1SC ; Stop and reset counter
LDHX #$6000
STHX T1MOD ;/* Period value setting */
LDA T1SC ; Overflow int. flag clearing (first part)
; T1SC: TOF=0,TOIE=1,TSTOP=0,TRST=0,PS2=0,PS1=0,PS0=0
MOV #$40,T1SC ; Int. flag clearing (2nd part) and timer contr. register setting
CLI
BSET 4,DDRB
jsr CHECKADD
mainLoop: ;com PTB
; Insert your code here
feed_watchdog
;LDA ERASE
;BEQ MAINLOOP1
;JSR ERASERALL
MAINLOOP1:
LDA UPOVER
BEQ MAINLOOP2
JSR CHANGFLAG
MAINLOOP2:
LDA SENDSTRAT
BEQ MAINLOOP3
JSR STARTSEND
MAINLOOP3:
;LDA SET_BAUD
;BEQ MAINLOOP4
;JSR *
MAINLOOP4:
JSR CHECKADD
BRA mainLoop
;************************************************************************
;************* 检测本机地址 ***********
;'入口条件: (无)
;'出口条件: (无)
;************************************************************************
STARTSEND:
LDHX #TR_BUFF
LDA ,X
BRCLR 7,SCS1,STARTSEND1
STA SCDR
AIX #$01
STHX RSTOHX
MOV X+,LENTH
BSET SCC2_SCTIE,SCC2
DIR_Transmit
CLR SENDSTRAT
STARTSEND1:
RTS
;************************************************************************
;************* 检测本机地址 ***********
;'入口条件: (无)
;'出口条件: (无)
;************************************************************************
CHECKADD:
LDA MYADDRESS1
ADD MYADDRESS2
ADD MYADDRESS3
ADD MYADDRESSJY
COMA
BEQ CHECKADD0
LDHX #MYID
MOV X+,MYADDRESS1
MOV X+,MYADDRESS2
MOV X+,MYADDRESS3
MOV X+,MYADDRESSJY
CHECKADD0:
RTS
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件: BUS_SPD DS.B 1
; DATASIZE DS.B 1
; START_ADDR DS.W 1
; DATAARRAY DS.B 32
;'出口条件: (无)
;************************************************************************
;PROGRAM:
; PSHH
; PSHX
; LDHX #FILE_PTR
; JSR PRGRNGE
; PULX
; PULH
; RTS
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件: BUS_SPD DS.B 1
; DATASIZE DS.B 1
; START_ADDR DS.W 1
; DATAARRAY DS.B 32
;'出口条件: (无)
;************************************************************************
;ERASER:
; PSHH
; PSHX
; LDHX #FILE_PTR
; JSR ERARNGE
; PULX
; PULH
; RTS
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件: BUS_SPD DS.B 1
; DATASIZE DS.B 1
; START_ADDR DS.W 1
; DATAARRAY DS.B 32
;'出口条件: (无)
;************************************************************************
;VERIFY:
; PSHH
; PSHX
; LDHX #FILE_PTR
; PULX
; PULH
; RTS
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件: BUS_SPD DS.B 1
; DATASIZE DS.B 1
; START_ADDR DS.W 1
; DATAARRAY DS.B 32
;'出口条件: (无)
;************************************************************************
;INITIALISATION:
; MOV #20,BUS_SPD
; MOV #32,DATASIZE
; MOV #$ec,START_ADDR
; MOV #$00,START_ADDR+1
; RTS
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件:(无)
;'出口条件:ERR_NUM FF:写编程标记错
;************************************************************************
;ERASERALL:
;=======================================================================
;测试
; BCLR 5,SCC2
; MOV #$BC,START_ADDR
; MOV #$00,START_ADDR+1
; MOV #191,BLOCK_NUM
;ERASERALL12:
; MOV #20,BUS_SPD
; MOV #1,DATASIZE
; LDHX #FILE_PTR
; MOV #$AA,DATAARRAY
; JSR PRGRNGE
; LDHX START_ADDR
; AIX #64
; STHX START_ADDR
; DBNZ BLOCK_NUM,ERASERALL12
;=======================================================================
;关通讯中断
; SCC2: SCTIE=0,TCIE=1,SCRIE=1,ILIE=1,TE=1,RE=1,RWU=0,SBK=0
; BCLR 5,SCC2
; MOV #$BC,START_ADDR
; MOV #$00,START_ADDR+1
; MOV #3,ERR_NUM
; MOV #190,BLOCK_NUM
;ERASERALL1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -