⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 routine.asm

📁 Library for the 8051 microcontroller. such as math routine, hexBCD, LCD, Keyboard, I2C, Remote, Ke
💻 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 + -