📄 routine.asm
字号:
;******************************
;I2C ROUTINS ***
;Published By Mehdi N.Rahni ***
;******************************
;I use this code for i2c devices such as LM75,DS1307,24C256
;For defining any i2c device you must only consider hardwired addressing and address inputs
;So you can extend this code with limited changes
;Example:
;MOV DPTR,#125H
;MOV DYTA,#79H
;LCALL EEPROM_WRITE ;IN ADDRESS 125H DATA IS 79H
;MOV DPTR,#125H
;LCALL EEPROM_READ
;MOV A,DYTA ;NOW ACC IS 79H
SDA EQU P2.6
SCL EQU P2.7
DYTA EQU 50H
ADRES EQU 51H
I2C_READ: ;reading 8 bits from i2c device
MOV R7,#8
GFD:
SETB SDA
SETB SCL
MOV C,SDA
RLC A
CLR SCL
DJNZ R7,GFD
MOV DYTA,A
RET
I2C_WRITE: ;writing 8 bits in to i2c device
MOV R7,#8
WRITING:
RLC A
MOV SDA,C
LCALL CLOCK
DJNZ R7,WRITING
RET
I2C_START: ;start of i2c routine
SETB SCL
SETB SDA
CLR SDA
CLR SCL
RET
I2C_STOP: ;end of i2c routine
SETB SCL
CLR SDA
SETB SDA
CLR SCL
RET
CLOCK: ;synchronizing clock
SETB SCL
CLR SCL
RET
ACK: ;acknowledge from transmitter or receiver
SETB SDA
SETB SCL
JB SDA,$
CLR SCL
RET
NO_ACK: ;no acknowledge from transmitter or receiver
SETB SDA
CLR SCL
JNB SDA,$
SETB SCL
RET
;*************************
;SERIAL EEPROM PACKAGE****
;*************************
EEPROM_WRITE: ;write in to eeprom
LCALL I2C_START
LCALL EEPROM_WRITE_ADDR
LCALL ACK
MOV A,DPH
LCALL I2C_WRITE
LCALL ACK
MOV A,DPL
LCALL I2C_WRITE
LCALL ACK
MOV A,DYTA
LCALL I2C_WRITE
LCALL ACK
LCALL I2C_STOP
LCALL DELAY_STOP
RET
EEPROM_READ: ;read from eeprom
LCALL I2C_START
LCALL EEPROM_WRITE_ADDR
LCALL ACK
MOV A,DPH
LCALL I2C_WRITE
LCALL ACK
MOV A,DPL
LCALL I2C_WRITE
LCALL ACK
LCALL I2C_START
LCALL EEPROM_READ_ADDR
LCALL ACK
LCALL I2C_READ
LCALL NO_ACK
LCALL I2C_STOP
RET
EEPROM_READ_ADDR: ;A2,A1,A0 are zero
MOV A,#10100001B
LCALL I2C_WRITE
RET
EEPROM_WRITE_ADDR: ;A2,A1,A0 are zero
MOV A,#10100000B
LCALL I2C_WRITE
RET
DELAY_STOP: ;terminating write process
MOV TMOD,#00000001B
MOV TH0,#0EEH
MOV TL0,#00H
SETB TR0
SAC:
JNB TF0,SAC
CLR TR0
CLR TF0
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -