📄 spieewr.asm
字号:
;********************SPIEEWR********************
;本程序实现向SPI类型EEPROM中写入多字节数据。
;入口参数:数据在EEPROM中的地址在SADRH:SADR中,目标RAM的首地址为DADR,字节数在W中。
;出口参数:相关数据已读取到指定RAM单元中。
;占用资源:W,STATUS,FSR,RB1,020H,021H,022H,023H,SSP模块,1重堆栈。
;说明: 1.同步时钟频率为FOSC/64。
; 2.字节数应不大于1页。
IFNDEF SPIEEWR1
#DEFINE SPIEEWR1
CS EQU 1 ;EEPROM的CS端连到单片机的RB1
SPIEEWR MOVWF CNT ;保存字节数
MOVF SADR,W
MOVWF FSR ;RAM首地址
BSF STATUS,RP0
MOVLW 11010111B
MOVWF TRISC ;SCK输出,SDO输出,SDI输入
MOVLW 0FDH
ANDWF TRISB,F ;RB1为输出
CLRF SSPSTAT ;清除SMP,CKE位
BCF PIE1,SSPIE ;SSP中断禁止
BCF STATUS,RP0
MOVLW 00110010B ;设置SSP控制方式:取FOSC/64,SPI主控,CKP=1
MOVWF SSPCON
BCF PIR1,SSPIF
BCF PORTB,CS
MOVLW 06H ;WREN指令,写允许
MOVWF SSPBUF
BTFSS PIR1,SSPIF ;WREN指令传送完毕?
GOTO $-1
BCF PIR1,SSPIF
BSF PORTB,CS ;CS置高,使WREN生效
NOP
NOP
BCF PORTB,CS
MOVLW 02H ;WRITE指令
MOVWF SSPBUF
BTFSS PIR1,SSPIF ;WRITE指令传送完毕?
GOTO $-1
BCF PIR1,SSPIF
MOVF SADRH,W ;目标EEPROM地址高位
MOVWF SSPBUF
BTFSS PIR1,SSPIF ;地址高位传送完毕?
GOTO $-1
BCF PIR1,SSPIF
MOVF DADR,W ;地址低位
MOVWF SSPBUF
BTFSS PIR1,SSPIF ;地址低位传送完毕?
GOTO $-1
BCF PIR1,SSPIF
NEXT66 MOVF INDF,W
MOVWF SSPBUF ;开始发送数据
BTFSS PIR1,SSPIF ;第一个数据发送完毕?
GOTO $-1
BCF PIR1,SSPIF
INCF FSR,F
DECFSZ CNT,F
GOTO NEXT66
BSF PORTB,CS ;开启内部写周期
RETURN
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -