📄 24c64.asm
字号:
LIST p=16f877
include<p16f877.inc>
w_temp equ 0x71
status_temp equ 0x72
DATA_W equ 0X75
DATA_R equ 0X76
DL1 equ 0X77
DL2 equ 0X78
trisc equ 87h
SCL EQU 3
SDA EQU 4
WP EQU 2
ADDRESS EQU 0X20
VALUE EQU 0X55
pclath equ 0ah
org 000h
nop
clrf pclath
call init_i2c
clrf DATA_R
movlw VALUE
movwf DATA_W
call WRITE
call delay10ms
call READ
goto $
;------------------------------------
WRITE
writestart
call i2c_idle
banksel SSPCON2
bsf SSPCON2,SEN
banksel PIR1
btfss PIR1,SSPIF
goto $-1
sendwrtcomm
movlw b'10100000'
banksel SSPBUF
movwf SSPBUF
call wrtacktest
sendaddress
banksel SSPSTAT
btfsc SSPSTAT,BF
goto $-1
movlw b'00000000'
banksel SSPBUF
movwf SSPBUF
call wrtacktest
banksel PIR1
bcf PIR1,SSPIF
movlw ADDRESS
banksel SSPBUF
movwf SSPBUF
call wrtacktest
; call delay10ms
senddata
banksel SSPSTAT
btfsc SSPSTAT,BF
goto $-1
movfw DATA_W
banksel SSPBUF
movwf SSPBUF
call wrtacktest
;call delay10ms
banksel PIR1
bcf PIR1,SSPIF
wrtstop
banksel SSPCON2
bsf SSPCON2,PEN
banksel PIR1
bcf PIR1,SSPIF
btfss PIR1,SSPIF
goto $-1
return
;----------------------------------------
READ
reakstart
call i2c_idle
banksel PIR1
bcf PIR1,SSPIF
banksel SSPCON2
bsf SSPCON2,RSEN
banksel PIR1
btfss PIR1,SSPIF
goto $-1
wrtwrite
movlw b'10100000'
banksel SSPBUF
movwf SSPBUF
call wrtacktest
;call delay10ms
wrtaddress
movlw B'00000000'
banksel SSPBUF
movwf SSPBUF
call wrtacktest
banksel PIR1
bcf PIR1,SSPIF
movlw ADDRESS
banksel SSPBUF
movwf SSPBUF
call wrtacktest
call delay10ms;
;call delay10ms
restart
call i2c_idle
banksel PIR1
bcf PIR1,SSPIF
banksel SSPCON2
bsf SSPCON2,RSEN
banksel PIR1
btfss PIR1,SSPIF
goto $-1
wrtread
movlw b'10100001'
banksel SSPBUF
movwf SSPBUF
call wrtacktest
; call delay10ms
banksel PIR1
bcf PIR1,SSPIF
startread
banksel SSPCON2
bsf SSPCON2,RCEN
readdata
banksel PIR1
bcf PIR1,SSPIF
btfss PIR1,SSPIF
goto $-1
banksel SSPBUF
movfw SSPBUF
movwf DATA_R
banksel PIR1
bcf PIR1,SSPIF
sendreadnack
banksel SSPCON2
bsf SSPCON2,ACKDT
bsf SSPCON2,ACKEN
banksel PIR1
btfss PIR1,SSPIF
goto $-1
readstop
banksel SSPCON2
bsf SSPCON2,PEN
banksel PIR1
btfss PIR1,SSPIF
goto $-1
bcf PIR1,SSPIF
return
;--------------------------------------
init_i2c
banksel trisc
bsf trisc,SDA
bsf trisc,SCL
banksel SSPADD
movlw 9
movwf SSPADD
bcf SSPSTAT,6
bsf SSPSTAT,7
banksel SSPCON
movlw b'00111000'
movwf SSPCON
return
;-----------------------------------------
wrtacktest
banksel PIR1
bcf PIR1,SSPIF
btfss PIR1,SSPIF
goto $-1
return
;-----------------------------------------
i2c_idle
banksel SSPSTAT
btfsc SSPSTAT,R_W
goto $-1
banksel SSPCON2
movfw SSPCON2
andlw 0x1f
btfss STATUS,Z
goto $-3
return
;------------------------------------------
delay10ms
movlw d'12'
movwf DL1
delay2
movlw 0xff
movwf DL2
delay1
decfsz DL2,F
goto delay1
decfsz DL1,F
goto delay2
return
;-----------------------------------------
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -