📄 iics.asm
字号:
;********************IICS********************
;本程序实现IIC从动方式发送或接受2个字节数据。
;入口参数:本机地址在SADR中,待发送的数据在SOUH:SOU中。
;出口参数:接收到的数据在SOUH:SOU中。
;占用资源:W,STATUS,024H,025H,028H,029H,07FH,07EH,17FH,SSP模块,1重堆栈。
;说明: 1.使用该程序需在中断入口程序中填入如下两条指令
; BTFSC PIR1,SSPIF
; GOTO SSPINT2
IFNDEF IICS1
#DEFINE IICS1
SAVEW EQU 07FH ;现场保护中保存W的地址
SAVES EQU 07EH
IICS MOVLW 16H ;初始化SSPCON,
MOVWF SSPCON ;IIC从动模式,7位寻址
BCF PIR1,SSPIF
BSF STATUS,RP0
BSF TRISC,3 ;设置SCL为输入
BSF TRISC,4 ;设置SDA为输入
MOVLW 80H
MOVWF SSPSTAT ;初始化SSPSTAT寄存器,
BCF STATUS,RP0
MOVF SADR,W
BSF STATUS,RP0
MOVWF SSPADD ;设定本机地址
BSF SSPCON2,7 ;允许通用呼叫地址寻址
BSF PIE1,SSPIE ;SSP中断允许
BCF STATUS,RP0
CLRF TEMP1 ;TEMP1记录SSP中断的次数
BSF INTCON,GIE
BSF INTCON,PEIE ;开中断
BSF SSPCON,SSPEN ;SSP模块使能
RETURN
;*****************中断服务程序***************
SSPINT2 BCF SSPCON,CKP ;拉低SCL
MOVWF SAVEW
SWAPF STATUS,W
CLRF STATUS
MOVWF SAVES ;保护现场
BCF PIR1,SSPIF
BSF STATUS,C
RLF TEMP1,F
BTFSS TEMP1,1
GOTO PROG11 ;第一次进入中断
BTFSS TEMP1,2
GOTO PROG22 ;第二次进入中断
BTFSS TEMP1,3
GOTO PROG33 ;第三次进入中断
BTFSS TEMP1,4
GOTO PROG44 ;第四次进入中断
GOTO DONE16
PROG11 BSF STATUS,RP0
BCF STATUS,C
BTFSC SSPSTAT,R_W
BSF STATUS,C
BCF STATUS,RP0
RLF TEMP2,F ;TEMP2:0暂存R_W位
MOVF SSPBUF,W ;BF位清0
BTFSS TEMP2,0 ;接收或发送
GOTO DONE16 ;接收
BSF STATUS,RP0
BCF TRISC,4
BCF STATUS,RP0
MOVF SOUH,W ;发送第一个字节
MOVWF SSPBUF
GOTO DONE16
PROG22 BTFSS TEMP2,0
GOTO RECEIVE1
MOVF SOU,W
MOVWF SSPBUF ;发送第二个字节
GOTO DONE16
RECEIVE1 MOVF SSPBUF,W
MOVWF SOUH ;接收第一个字节
GOTO DONE16
PROG33 BTFSC TEMP2,0
GOTO DONE16
MOVF SSPBUF,W
MOVWF SOU ;接收第二个字节
DONE16 SWAPF SAVES,W
MOVWF STATUS
SWAPF SAVEW,F
SWAPF SAVEW,W ;恢复现场
BSF SSPCON,CKP ;恢复SCL
RETFIE
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -