📄 fet430uif_eeprom.s43
字号:
//MSP-fet430uif 写EEPROM程序 2007.8.1
#include "msp430x16x.h";
;PORT2
KEYH0 equ 01h ;输入 0
SDA equ 02h ;1
KEYH2 equ 04h ;输入 0
SCL equ 08h ;1
KEYV3 equ 10h ;输入 0
KEYV2 equ 20h ;输入 0
KEYV1 equ 40h ;输入 0
KEYV0 equ 80h ;输入 0
; PSTAT 状态标志
TM equ 01h ; IBUTTON
URWAKE equ 02h ;
D2 equ 04h ;
D3 equ 08h ;
COMOK equ 10h ;
BAD_C equ 20h ;
ERR equ 40h ;
NEGA equ 80h ;
;--------Word definitions used-------------------------------------------
WDT_stop equ 05A80h ;Watchdog hold+key
WDT_1s equ 05A1Ch ;Watchdog = timer, cleared,
;source = ACLK, interval= 1000ms
;--------RAM bytes used for variables------------------------------------
SYSTEM1 equ 0200h
SYSTEM2 equ 0201h ;
SYSTAT equ 0202h ;
PSTAT equ 0203h ;
INTSTAT equ 0204h ;
MSTAT equ 0205h ;
ADDR0 equ 0206h ;数据
ADDR1 equ 0207h ;
ADDR2 equ 0208h ;
ADDR3 equ 0209h ;
ICADDR0 equ 020Ah ;
ICADDR1 equ 020Bh ;
TRANS1 equ 020Ch ;UERR
TRANS equ 020Dh;
RXBUF equ 020Eh
ICDATA equ 020Fh ;总抄表数
WRTM equ 0210h ;写几个数据
RDTM equ 0212h ;读几个数据
EEDATA equ 0214h ;
BITCON equ 0215h ;传送数据位数
LINEH equ 0217h ;线地址
LINEL equ 0216h
PAGE1 equ 0218h ;页地址
PAGEN equ 0219h ;
BPAGE equ 021Ah ;
PAGEGA equ 021Bh
NUMB0 equ 021Ch ;
NUMB1 equ 021Dh ;
NUMB2 equ 021Eh ;
NUMB3 equ 021Fh ;
R25 equ 0220h ;
R21 equ 0222h ;
DATABUFFx equ 0250h ;
;******************************************************************************
;ORG 0C000H
RSEG CODE ; 程序开始处
RESET
nop
mov.w #600h,SP ; 初始化堆栈指
call #Setup ;configure MSP430 for application
;---------------------------------------------
Mainloop
nop
nop
mov.w #0,ICADDR0
mov.w #512,RDTM
call #ICreadn
mov.w #0,R5
mov.w #0,ICADDR0
mov.w #32,R8
writenext
mov.w #16,WRTM
call #ICwriten
add.w #16,ICADDR0 ;写16×32字节
dec.w R8
jnz writenext
mov.w #0,ICADDR0
mov.w #512,RDTM
call #ICreadn ;读出512字节
Mainloop1
bis #LPM3,SR ;Set SR bits for LPM3 五
nop
tst.b INTSTAT
jnz Mainloop
jmp Mainloop1
br #RESET
;-----------------------------------------------------------------
;Configure modules and control registers portx
;-----------------------------------------------------------------
Setup
StopWDT mov #WDT_stop,&WDTCTL ; Stop WDT
mov.b #0a0h,&DCOCTL
;bic.b #SELM_2,&BCSCTL2
mov.b #087h,&BCSCTL1 ; LFXT1 = LF XTAL
;bic.b #SELS,BCSCTL2
;mov.b #007h,&BCSCTL1
SetupOsc bic.b #OFIFG,&IFG1 ; Clear OSC fault flag
mov.w #0FFh,R25 ; R25 = Delay
SetupOsc1 dec.w R25 ; Additional delay to ensure start
jnz SetupOsc1 ;
bit.b #OFIFG,&IFG1 ; OSC fault flag set?
jnz SetupOsc ; OSC Fault, clear flag again
;bis.b #SELS+SELM_2,BCSCTL2 ; MCLK = SMCLK = XT2 (safe)
SetupP3 MOV.B #000H,&P3SEL ;
MOV.B #00AH,&P3DIR ;P1.1 P1.3
mov.b #0FFh,&P3OUT
RAMclr clr R4
clr R13 ;
RCL clr.b 200h(R13) ;
inc R13 ;
cmp #03F0h,R13 ;
jlo RCL ;
clr.b &P1IFG ;clear port 1 flags
clr.b &P2IFG ;clear port 2 flags
clr.b &IFG1 ;clear flag register 1
mov #0A5F0h,&0200h ;setup ok
ret
;-----------------------------------------------------------------
;-----------------------------------------------------------------
Bytewr dint
mov.b #08,BITCON ;写一个字节的数据
bis.b #SDA,&P3DIR ;输出
ICWR
bic.b #SCL,&P3OUT
call #Tdelay
rlc.b TRANS
jc ICtr1
bic.b #SDA,&P3OUT
jmp ICtrx
ICtr1 bis.b #SDA,&P3OUT
ICtrx nop
call #Tdelay
bis.b #SCL,&P3OUT
call #Tdelay
dec.b BITCON
jnz ICWR
nop
bic.b #SCL,&P3OUT
bic.b #SDA,&P3DIR ; 应答信号 输入
call #Tdelay
bis.b #SCL,&P3OUT
call #Tdelay
bit.b #SDA,&P3IN
jz ICtr2
bis.b #ERR,PSTAT
ICtr2 bic.b #SCL,&P3OUT
bis.b #SDA,&P3DIR ;输出
call #Tdelay
;eint
ret
;----------------------------------------------------------------
Byterd dint
mov.b #08,BITCON ;读一个字节数据
bic.b #SCL,&P3OUT
bic.b #SDA,&P3DIR ;输入
call #Tdelay
ICRD bis.b #SCL,&P3OUT
call #Tdelay
bit.b #SDA,&P3IN
rlc.b TRANS
bic.b #SCL,&P3OUT
nop
call #Tdelay
dec.b BITCON
jnz ICRD
bis.b #SDA,&P3DIR ;输出
call #Tdelay
bis.b #SDA,&P3OUT ;应答信号 给一个低电平
call #Tdelay
bis.b #SCL,&P3OUT
call #Tdelay
bic.b #SCL,&P3OUT
call #Tdelay
bis.b #SDA,&P3OUT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -