You are on page 1of 10

Tài liệu kỹ thuật

BKpro – http://www.bkpro.info

GIAO TIẾP I2C VỚI 8051

Ví dụ sử dụng IC AT24C01.

Sơ đồ kết nối :

Dạng dữ liệu :

Tài liệu kỹ thuật từ Bkpro


Trang - 1 -
Tài liệu kỹ thuật
BKpro – http://www.bkpro.info

Tài liệu kỹ thuật từ Bkpro


Trang - 2 -
Tài liệu kỹ thuật
BKpro – http://www.bkpro.info

Chương trình :

;BKPRO www.bkpro.info

$mod51fx

SDA BIT P1.1 ; BIT DATA

SCL BIT P1.0 ; XUNG CLOCK

BYTE_READ DATA 2FH ; DU LIEU DOC TU ROM

BYTE_ADDRESS DATA 31H ; DIA CHI BYTE

BYTE_WRITE DATA 32H ; DU LIEU GHI VAO ROM

ORG 0000H

Tài liệu kỹ thuật từ Bkpro


Trang - 3 -
Tài liệu kỹ thuật
BKpro – http://www.bkpro.info
LCALL DELAY1000MS ; CHO ROM ON DINH

;-------------

MAIN:

WRITE_DATA_IN: ; GHI DU LIEU NHAP VAO TU P1

MOV BYTE_ADDRESS,#00H

MOV BYTE_WRITE,P1

LCALL WRITE ; BYTE WRITE

LCALL DELAY100MS

READ_DATA_IN: ;DOC DU LIEU TU ROM VA XUAT RA P2

MOV BYTE_ADDRESS,#00H

LCALL READ ;BYTE READ

MOV P2,BYTE_READ

JMP WRITE_DATA_IN

;================== SUBROUNTINE ==================

;-------- BYTE WRITE

WRITE:

LCALL START_BIT

MOV A,#0101B ; 4 BITS START

MOV R7,#4H ; 4 BITS

LCALL ROTATE

MOV A,#000B ; DEVICE ADDRESS

MOV R7,#3H

LCALL ROTATE

Tài liệu kỹ thuật từ Bkpro


Trang - 4 -
Tài liệu kỹ thuật
BKpro – http://www.bkpro.info
MOV A,#00H ; ANABLE W/R : W = 0

MOV R7,#1H ; WRITE

LCALL ROTATE

LCALL SLAVE_ACK ; SLAVE ACKNOWLEDGE

MOV A,BYTE_ADDRESS ; BYTE ADDRESS

MOV R7,#8H

LCALL ROTATE

LCALL SLAVE_ACK ; SLAVE ACKNOWLEDGE

MOV A,BYTE_WRITE ; BYTE DATA

MOV R7,#8H

LCALL ROTATE

LCALL SLAVE_ACK ; SLAVE ACKNOWLEDGE

LCALL STOP_BIT ; STOP BIT

RET

;-------- BYTE READ

READ:

LCALL START_BIT

MOV A,#0101B ; 4 BITS START

MOV R7,#4H ; 4 BITS

LCALL ROTATE

Tài liệu kỹ thuật từ Bkpro


Trang - 5 -
Tài liệu kỹ thuật
BKpro – http://www.bkpro.info

MOV A,#000B ; DEVICE ADDRESS

MOV R7,#3H

LCALL ROTATE

MOV A,#00H ; ANABLE W/R : W = 0

MOV R7,#1H ; WRITE

LCALL ROTATE

LCALL SLAVE_ACK ; SLAVE ACKNOWLEDGE

MOV A,BYTE_ADDRESS ; BYTE ADDRESS

MOV R7,#8H

LCALL ROTATE

LCALL SLAVE_ACK ; SLAVE ACKNOWLEDGE

LCALL START_BIT ; NEW SRART BIT

MOV A,#0101B ; 4 BITS START

MOV R7,#4H ; 4 BITS

LCALL ROTATE

MOV A,#000B ; DEVICE ADDRESS

MOV R7,#3H

LCALL ROTATE

Tài liệu kỹ thuật từ Bkpro


Trang - 6 -
Tài liệu kỹ thuật
BKpro – http://www.bkpro.info
MOV A,#1H ; ANABLE W/R : W = 0

MOV R7,#1H ; READ

LCALL ROTATE

LCALL SLAVE_ACK ; SLAVE ACKNOWLEDGE

MOV R7,#8H

READ_DATA:

SETB SCL

NOP

MOV C,SDA

CLR SCL

MOV A,BYTE_READ

RLC A ; ROTATE NEXT BIT

MOV BYTE_READ,A ; SAVE ROTATED DATA

DJNZ R7,READ_DATA

LCALL NO_ACK ; NO ACKNOWLEDGE

LCALL STOP_BIT

LCALL DAO_BIT

RET

;-------- START BIT

START_BIT:

SETB SCL

SETB SDA

Tài liệu kỹ thuật từ Bkpro


Trang - 7 -
Tài liệu kỹ thuật
BKpro – http://www.bkpro.info
CLR SDA

CLR SCL

RET

;-------- STOP BIT

STOP_BIT:

CLR SDA

SETB SCL

SETB SDA

RET

;-------- ROTATE

ROTATE:

CLR SCL

RRC A

MOV SDA,C

SETB SCL

DJNZ R7,ROTATE

RET

;-------- SLAVE ACKNOWLEDGE

SLAVE_ACK:

CLR SCL

SETB SDA

SETB SCL

MOV C,SDA ; READ STATE OF SDA

CLR SCL

RET

Tài liệu kỹ thuật từ Bkpro


Trang - 8 -
Tài liệu kỹ thuật
BKpro – http://www.bkpro.info
;-------- NO ACK

NO_ACK:

SETB SDA

SETB SCL

CLR SCL

RET

;---------DAO BIT

DAO_BIT:

MOV A,BYTE_READ

MOV C,ACC.7

MOV BYTE_READ.0,C

MOV C,ACC.6

MOV BYTE_READ.1,C

MOV C,ACC.5

MOV BYTE_READ.2,C

MOV C,ACC.4

MOV BYTE_READ.3,C

MOV C,ACC.3

MOV BYTE_READ.4,C

MOV C,ACC.2

MOV BYTE_READ.5,C

MOV C,ACC.1

MOV BYTE_READ.6,C

MOV C,ACC.0

MOV BYTE_READ.7,C

Tài liệu kỹ thuật từ Bkpro


Trang - 9 -
Tài liệu kỹ thuật
BKpro – http://www.bkpro.info
RET

;----------------------

DELAY100MS:

MOV R2,#1

LOOPDELAY100_1:

MOV R0,#200

LOOPDELAY100:

MOV R1,#250

DJNZ R1,$

DJNZ R0,LOOPDELAY100

DJNZ R2,LOOPDELAY100_1

RET

;--------

DELAY1000MS:

MOV R2,#10

LOOPDELAY1000_1:

MOV R0,#200

LOOPDELAY1000:

MOV R1,#250

DJNZ R1,$

DJNZ R0,LOOPDELAY1000

DJNZ R2,LOOPDELAY1000_1

RET

;--------

END

Tài liệu kỹ thuật từ Bkpro


Trang - 10 -

You might also like