⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.s43

📁 参考设计:为USB430和斜度计两个实例的源程序和编译后的文件 “实验程序”子文件夹内容:为本光盘所配书的实验的源程序和编译后的文件。其中C源程序文件可以用记事本程序打开
💻 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 + -