📄 iicmwp.asm
字号:
;********************IICMWP********************
;本程序实现IIC主控方式连续发送数据。
;入口参数:从机地址在SADR中,待发送的数据首地址在DADR中,EEPROM字地址在SADRH中,
; 数据个数在CNT中。
;出口参数:无。
;占用资源:W,STATUS,FSR,020H~023H,028H,07FH,07EH,17FH,SSP模块,1重堆栈。
;说明: 1.使用该程序需在中断入口程序中填入如下两条指令
; BTFSC PIR1,SSPIF
; GOTO MWPINT
; 2.同步时钟频率为100K
; 3.本程序可以向EEPROM中写入一页数据:SADRH中为字地址,DADR为数据首地址,
; SADR中为EEPROM的控制字,CNT中为字节数(不能超过一页)。
IFNDEF IICMWP1
#DEFINE IICMWP1
SAVEW EQU 07FH ;现场保护中保存W的地址
SAVES EQU 07EH
INCLUDE "INITIICM.ASM"
IICMWP MOVF DADR,W
MOVWF FSR
GOTO INITIICM ;初始化
;*****************中断服务程序***************
MWPINT MOVWF SAVEW
SWAPF STATUS,W
CLRF STATUS
MOVWF SAVES ;保护现场
BCF PIR1,SSPIF
BSF STATUS,C
RLF TEMP1,F
BTFSS TEMP1,1
GOTO PROG001 ;第一次进入中断
BTFSS TEMP1,2
GOTO PROG002 ;第二次进入中断
MOVF CNT,F
BTFSC STATUS,Z
GOTO PROG004 ;数据发送完毕
GOTO PROG003 ;第三次进入中断
PROG001 MOVF SADR,W
ANDLW 0FEH ;R/W=0,发送模式
MOVWF SSPBUF ;发送地址
GOTO DONE19
PROG002 MOVF SADRH,W
MOVWF SSPBUF ;发送字地址
GOTO DONE19
PROG003 MOVF INDF,W
MOVWF SSPBUF ;发送数据
INCF FSR,F
DECF CNT,F
GOTO DONE19
PROG004 BSF STATUS,RP0
BSF SSPCON2,PEN ;发送停止位
BTFSC SSPCON2,PEN ;停止位结束?
GOTO $-1
BCF STATUS,RP0
BCF SSPCON,SSPEN ;释放总线
BSF STATUS,RP0
BCF PIE1,SSPIE ;SSP中断禁止
BCF STATUS,RP0
BCF PIR1,SSPIF
DONE19 SWAPF SAVES,W
MOVWF STATUS
SWAPF SAVEW,F
SWAPF SAVEW,W ;恢复现场
RETFIE
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -