📄 update.s43
字号:
;闪灯和TX使能不同单板是不同的。
;
;
#include "msp430x13x.h"
PUBLIC Update
org 0f000h
db 00h,00h,00h,00h,00h,00h,00h,01h,02h,03h,04h,05h,06h,07h,00h,10h,20h,30h
org 0f018h
db 00h,01h,02h,03h,04h,05h,06h,06h,06h,06h,06h,06h,06h,06h,07h,07h,07h,07h
org 0f030h
db 00h,0bbh,00h,0ddh,00h,0d6h,00h,0ddh,00h,0d0h,00h,0c2h,00h,0bfh,00h,0c6h,00h,0bbh,00h,0aah
;//const unsigned char P1OUTDATA[18] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x00,0x10,0x20,0x30};
;//const unsigned char P3OUTDATA[18]= {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07};
Update
Mainloop ;nop
;********* Read the ID ******************
mov.w 0f400h,210h ;和c程序对应
cmp.b #055h,0f402h
jz idok
mov.w #00h,210h
nop
idok
;************************************************************
TX1 nop
bit.b #TXEPT,&U0TCTL ; USART0 TX buffer ready?
jz TX1 ; Jump is TX buffer not ready
; bic.b #40,&P3OUT ;SET TX_EN LOW
mov.b #75h,&TXBUF0 ; TX -> RXed character
TX2 nop
bit.b #TXEPT,&U0TCTL ; USART0 TX buffer ready?
jz TX2 ; Jump is TX buffer not ready
mov.b 210h,&TXBUF0
TX3 nop
bit.b #TXEPT,&U0TCTL ; USART0 TX buffer ready?
jz TX3 ; Jump is TX buffer not ready
mov.b 211h,&TXBUF0
TX4 nop
bit.b #TXEPT,&U0TCTL ; USART0 TX buffer ready?
jz TX4 ; Jump is TX buffer not ready
mov.b #0dh,&TXBUF0
;**************************************************************
lop2 nop
mov.w #0f000h,R10 ;初始指针设置为0f000h
RxNextFrame
nop
xor.b #004h,&P5OUT ; 闪灯
mov.b #00h,r8 ;将R8清0
mov.b #0ffh,r9 ;
RX1 nop
bit.b #URXIFG0,&IFG1 ;USART0 RX buffer not set?
MOV #WDTPW+WDTCNTCL,&WDTCTL
jz RX1 ;wait
bic.b #URXIFG0,&IFG1 ;clear RX flag
mov.b &RXBUF0,200H(R8) ;将串口数据保存到200h开始的数据区
xor.b &RXBUF0,r9
inc.b r8 ;接收数据个数加一
cmp.b #14,r8 ;比较是否已经接收到14个数据
jnz RX1 ;若没有则继续接收
cmp.b #0aah,200h
jnz RxNextFrame
cmp.b 210h,201h ;id号
jnz RxNextFrame
cmp.b 211h,202h
jnz RxNextFrame
cmp.b #0dh,20ch
jnz RxNextFrame
cmp.b #00h,r9 ;CRC
jnz RxNextFrame
cmp.b #47h,203h ;判断是否是擦除指令
jz EraseFlash
cmp.b #59h,203h ;判断是否是数据
jz ProgramFlash
cmp.b #6Ah,203h ;判断是否是地址
jz MoveIndex
cmp.b #74h,203h ;判断是否是重启命令
jz Reset
jmp RxNextFrame ;否则,认定此帧无效,等待下一帧
EraseFlash nop
mov.w #0a502h,&FCTL1
mov.w #0a500h,&FCTL3
mov.w #0ffh,0(R10)
mov.w #0a500h,&FCTL1
mov.w #0a510h,&FCTL3
mov.b #47h,R11
jmp TX5
;*************--------------***************
ProgramFlash
nop
mov.w #0a540h,&FCTL1
mov.w #0a504h,&FCTL3
mov.w 204h,0(R10)
mov.w 206h,2(R10)
mov.w 208h,4(R10)
mov.w 20ah,6(R10)
mov.w #0a500h,&FCTL1
mov.w #0a510h,&FCTL3
add.w #08h,R10
mov.b #59h,R11
jmp TX5
;**************--------------*************
MoveIndex mov.w 204h,R10 ;将编程指针存入R10
mov.b #6Ah,R11 ;R11用于回复中的字节
jmp TX5 ;回复
;****************-------------*************
Reset MOV #0000,&WDTCTL
jmp RxNextFrame
;*******************************************
TX5 ;WDTCTL = WDTPW + WDTCNTCL; //clear wdt
MOV #WDTPW+WDTCNTCL,&WDTCTL
bis.b #40,&P3OUT ;SET TX_EN High Disable TX
TXLop nop
bit.b #TXEPT,&U0TCTL ; USART0 TX buffer ready?
jz TXLop ; Jump is TX buffer not ready
bic.b #40,&P3OUT ;SET TX_EN LOW
mov.b #0aah,&TXBUF0 ; TX -> RXed character
TX6 nop
bit.b #TXEPT,&U0TCTL ; USART0 TX buffer ready?
jz TX6 ; Jump is TX buffer not ready
mov.b 210h,&TXBUF0
TX7 nop
bit.b #TXEPT,&U0TCTL ; USART0 TX buffer ready?
jz TX7 ; Jump is TX buffer not ready
mov.b 211h,&TXBUF0
TX8 nop
bit.b #TXEPT,&U0TCTL ; USART0 TX buffer ready?
jz TX8 ; Jump is TX buffer not ready
mov.b R11,&TXBUF0
TX9 nop
bit.b #TXEPT,&U0TCTL ; USART0 TX buffer ready?
jz TX9 ; Jump is TX buffer not ready
mov.b #0dh,&TXBUF0
jmp RxNextFrame
;*************************************************
;TX10 nop
; nop
; bit.b #TXEPT,&U0TCTL ; USART0 TX buffer ready?
; jz TX10 ; Jump is TX buffer not ready
; ;
; mov.b 1ffh(R8),&TXBUF0
;
; dec.b r8
; cmp.b #00h,r8
; jnz TX5
;
;
; mov 0ffffh,r5
; nop
;Pulse nop
; nop
; dec.w r5 ; Decrement TOS
; nop
; jnz Pulse ; Delay done?
; nop
;
; bis.b #001h,&P3OUT ; Set P1.0
;
; mov 0ffffh,r5
; nop
;Pulse1 nop
; nop
; dec.w r5 ; Decrement TOS
; nop
; jnz Pulse1 ; Delay done?
; nop
;
; jmp lop2
;
; ret;
;org 0f200h ;自升级功能代码长度请勿超过一个段
; db 0ffh
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -