📄 prac13_exdata flash.asm
字号:
#include "msp430x44x.h"
.iar
;*********************************************************************
;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中
;----------------------------------------------------------------------------
;//---------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
;-----------------------------------------------------------------------------
;//---------- 程序开始处--------------------------------------------------------
;-----------------------------------------------------------------------------
.pseg code, abs=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
;------------------------------------------------------------------------------------
;//读数据子程序
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -