📄 实验13_扩展data flash.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 + -