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

📄 实验13_扩展data flash.s43

📁 MSP-TEST44X 学习板光盘资料及实验说明 本学习板是按照教育大纲
💻 S43
字号:
#include  "msp430x44x.h"

;*********************************************************************
;MSP-Test44x Demo    LCD DISPLAY 
;
;                  MSP430F449
;             -----------------
;         /|\|              XIN|-  
;          | |                 |
;          --|RST          XOUT|-   ________
;            |                 |   |        |
;            |             P6.0|-->|   A    |
;            |             P6.1| . |   T    |
;            |             P6.2| . |   4    |
;            |             P6.3| . |   5    |
;            |             P6.4| . |   D    |
;            |             P6.5| . |   B    |
;            |             P6.6|-->|   0    |
;            |                 |   |   4    |        
;            |                 |   |   1    |
;                                  |________|
;
;本实验是将TAB中的数据写入AT45DB041中
;在将数据从AT45DB041读出,
;并将数据放入250为首地址的RAM中
;  Yang Rui
;  Lierda, Inc
;  February 2004
;  Built with IAR Embedded Workbench Version: 1.26B
;----------------------------------------------------------------------------
;---------RAM初始化----------------------------------------------------------
;----------------------------------------------------------------------------
rxtx12c     equ     301h                                      ; 要发送的数据缓存
txrx12c     equ     302h                                      ;要接收的数据缓存
addrpa1     equ     304h                                      ;页被寻地址高地址字节
addrpa0     equ     303h                                      ;;页被寻址低地址字节(末位为位地址)
addrba1     equ     305h                                      ;;位被寻址低地址字节 
bit12c      equ     306h                                      ;数据位计数寄存器
code        equ     307h                                      ; 指令代码存储器
pout_data   equ     308h                                      ; 要发送的数据个数
pin_data    equ     309h                                      ; 要接收的数据个数
rx_point    equ     310h                                      ;接收数据存放地址寄存器   
tx_point    equ     312h                                      ;发送数据存放地址寄存器
  
;-----------------------------------------------------------------------------
;----------  端口定义----------------------------------------------------------
;-----------------------------------------------------------------------------
wp          equ     001h                                      ;P6.0 WP
rset        equ     002h                                      ;P6.1 RESET                               
rd_busy     equ     004h                                      ;P6.2 RD_BUSY
so          equ     008h                                      ;P6.3 SO
si          equ     010h                                      ;P6.4 SI
sck         equ     020h                                      ;P6.5 SCK
cs          equ     040h                                      ;P6.6 CS
;----------------------------------------------------------------------------- 
;----------  程序开始处--------------------------------------------------------
;-----------------------------------------------------------------------------
            ORG     01100h  
RESET       mov.w   #0a00h,SP                                 ; 指定堆栈开始处
Init_Sys    mov.w   #WDTPW+WDTHOLD,&WDTCTL                    ; 禁止看门狗
            bis.b   #SELM_A+FLL_DIV_8,&FLL_CTL1               ;时钟初始化
main              
            bic.b   #si+so+cs+wp+rset+sck+rd_busy,&P6DIR;     ;端口初始化
            bic.b   #si+so+cs+wp+rset+sck+rd_busy,&P6SEL
            bis.b   #rset+wp+cs+sck,&P6DIR                    ;WP,RESET ,cs ,sck置高
            bis.b   #rset+wp+cs+sck,&P6OUT
            clr.b   r14                                    
            
           
            mov.w   #250h,rx_point                            ;接收数据存放地址首地址为250h
            mov.b   #0fh,pin_data                             ;要接收数据个数为15个
            mov.b   #0fh,pout_data                            ;要发送数据个数为15个

;------------------------------------------------------------------------------
;----------写数据子程序 --------------------------------------------------------
;将TAB中的15个数据写DATA FLASH--------------------------------------------------
;------------------------------------------------------------------------------ 
           
write_data  mov.b   #84h,code                                 ;要执行的指令
            mov.b   #00h,addrpa1                              ;要写入页高地址
            mov.b   #00h,addrpa0                              ;要写入页低地址
            mov.b   #01ah,addrba1                             ;要写入位低地址  
            bis.b   #cs,P6DIR                                 ;选通cs
            mov.b   code,rxtx12c
            bic.b   #cs,P6OUT
            nop
            nop
            call    #DF_star                                  ;启动AT45DB041      
            mov.b   addrpa1,rxtx12c
            call    #DF_tx                                    ;写页高地址
            mov.b   addrpa0,rxtx12c
            call    #DF_tx                                    ;写页低地址
            mov.b   addrba1,rxtx12c                           ;写段地址(起始地址)
            call    #DF_tx
            mov     #tab,tx_point                             ;要发送数据表格的首地址
            mov     &tx_point,R14                             ;将首地址给R14
loop_tx1    
            mov.b   0(r14),&rxtx12c                           ;将发送数据送入发送缓存
loop_tx2    
            call    #DF_tx                                    ;发送数据 
            inc.w   r14
            dec.b   pout_data                                 
            jnz     loop_tx1                                  ;判断是否发送完了                                
            call    #DF_stop                                  ;完了,停止数据传输
;------------------------------------------------------------------------------------
;-----------延时子程序----------------------------------------------------------------
;------------------------------------------------------------------------------------            
            mov     #0ffffh,r15
delay       dec.b   r15
            jnz     delay    
                  
;------------------------------------------------------------------------------------
;读数据子程序?
;把刚写入的数据读出并放入250H为首地址的去RAM中
;------------------------------------------------------------------------------------
Read_DATA
            mov.b   #54h,code                                  ;要执行的指令
            mov.b   #00h,addrpa1                               ;要写入页高地址
            mov.b   #00h,addrpa0                               ;要写入页低地址
            mov.b   #01ah,addrba1                              ;要写入段地址                                                                    
            bis.b   #cs,P6DIR;选通cs
            mov     rx_point,r15                               ;将接收数据存放区首地址给R15
            mov.b   code,rxtx12c
            bic.b   #cs,P6OUT
            nop
            nop
            call    #DF_star            
            mov.b   addrpa1,rxtx12c
            call    #DF_tx
            mov.b   addrpa0,rxtx12c
            call    #DF_tx
            mov.b   addrba1,rxtx12c
            call    #DF_tx
            mov.b   #0ffh,rxtx12c                              ;些54H命令的附加脉冲
            call    #DF_tx
loop_rx     
            call    #DF_rx                                     ;开始接收数据
            mov.b   txrx12c,0(R15)                             ;将接收到数据送入接收数据存放区
            inc.w   R15
            dec.b   pin_data            
            jnz     loop_rx                                    ;判断是否接收完
            call    #DF_stop
            nop
            nop   
            jmp      $                                         ;暂停程序,如果要继续,再jmp  $前加;
            jmp      main                                      ;程序返回RESET
            ret
              

;--------------------------------------------------------------------------------------            
;--------  启动AT45DB041---------------------------------------------------------------
;--------------------------------------------------------------------------------------
DF_star     bic.b   #si+sck,&P6DIR
            bis.b   #si,&P6DIR
            bis.b   #sck,&P6DIR
            bis.b   #sck,&P6OUT
            nop
            nop
            call    #DF_tx
            ret
;--------------------------------------------------------------------------------------
;----------发送一字节子程序------------------------------------------------------------
;--------------------------------------------------------------------------------------
            
DF_tx       mov.b    #08,bit12c
DF_CLK      bic.b    #sck,&P6OUT
DF_send     rla.b    rxtx12c
            jc       DF_send1
DF_send0    bic.b    #si,&P6OUT
            jmp      DF_sx  
DF_send1    bis.b    #si,&P6OUT
DF_sx      
            bis.b    #sck,&P6OUT
            dec.b    bit12c
            jnz      DF_CLK
             
            ret
;-------------------------------------------------------------------------------------
;----------接收一字节子----------------------------------------------------------------                               
;-------------------------------------------------------------------------------------
DF_rx       bis.b      #sck,&P6DIR
            bic.b      #so,&P6DIR
            mov.b      #08h,bit12c
DF_sck      bic.b      #sck,&P6OUT
            bis.b      #sck,&P6OUT
            nop
            nop
            bit.b      #so, &P6IN
            jnz        bit1
bit0        bic.b      #01h,txrx12c
            jmp        bit_sx 
bit1        bis.b      #01h,txrx12c
bit_sx      bic.b      #sck,&P6OUT
            dec.b      bit12c 
            jnz        move_bite
            jmp        ret_1
move_bite   rla.b      txrx12c
            jmp        DF_sck
           
ret_1      
            ret

;-------------------------------------------------------------------------------------
;----------结束子程序 --------------------------------------------------------------
;-------------------------------------------------------------------------------------
DF_stop     bic.b   #si+so+cs+wp+rset+sck+rd_busy,&P6DIR                   
            bis.b   #rset+wp+cs+sck,&P6DIR;WP,RESET, CS+SCK 置高
            bis.b   #rset+wp+cs+sck,&P6OUT
            ret 

;------------------------------------------------------------------------------------
;----------定义TAB表-----------------------------------------------------------------
;------------------------------------------------------------------------------------          
            even
tab         db  01h,02h,03h,04h,05h,06h,07h,08h,09h,0ah,0bh,0ch,0dh,0eh,0fh;

;------------------------------------------------------------------------------------
;--------定义中断向量---------------------------------------------------------------
;-----------------------------------------------------------------------------------           
            ORG     0FFFEH
            DW      RESET 
               END       
                                                           

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -