📄 flash.s43
字号:
;****************************************************************************
; 文件名称:
; flash.s43
; 文件说明:
; 程序向片内Flash 从 0x1080 起始的位置写数字,然后读出写入的数据并
; 存放在以 0x200 开始的位置
;****************************************************************************
#include "msp430x44x.h"
;*****************************************************************************
#define value R4
read_Buf equ 200h ;读缓冲
;用于存储从Flash读出的数据
;****************************************************************************
ORG 08000h ; 程序起始
;****************************************************** *********************
RESET mov.w #0600h,SP ; 初始化堆栈指针
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; 关看门狗
;
Init_Flash mov.w #FWKEY+FSSEL0+FN0,&FCTL2 ; 设置FCTL2
Mainloop
clr.b value ; 清零value
call #Erase_SegA ; 擦除SegA
call #Write_SegA ; 写数据到segment A
call #Read_SegA ; 读数据
jmp Mainloop ; 循环
;
;************************************************************************
Erase_SegA mov.w #01080h,R5 ;
mov.w #FWKEY,&FCTL3 ; Lock = 0
mov.w #FWKEY+ERASE,&FCTL1 ; Erase bit = 1
mov.w #0,&01080h ; 擦除
ret
;************************************************************************
Write_SegA
;*************************************************************************
Prog_SegA mov.w #FWKEY+WRT,&FCTL1 ; Write bit = 1
Prog_L1 mov.b value, 0(R5) ;
inc.b value ; value +=1
inc.w R5
cmp.b #0Ah,value ; 比较是否已经写了10个数
jne Prog_L1 ;
mov.w #FWKEY+LOCK,&FCTL3 ; Lock = 1
ret ;
;
Read_SegA clr.b value ; value = 0
mov.w #01080h, R5 ; 设置读地址
mov.w read_Buf,R6 ; 设置存储地址
readByte mov.b @R5+,0(R6) ; 读
inc.w R6 ; 地址+=2
inc.b value ; 计数器加1
cmp.b #0AH,value ; 是否已经读了10个数据
jne readByte ;
ret
;*****************************************************************************
; Reset 中断向量
;*****************************************************************************
ORG 0FFFEh ;Reset中断向量
DW RESET ;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -