您的位置 首页 5G

单片机与24C02的通讯

I2C的起源:I2C(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C的特点:

I2C的来源:

I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于衔接微操控器及其外围设备

I2C的特色:

I2C总线的长度可高达25英尺,而且可以以10Kbps的最大传输速率支撑40个组件;支撑多主控(multimastering),其间任何可以进行发送和接纳的设备都可以成为主总线。一个主控可以操控信号的传输和时钟频率。当然,在任何时刻点上只能有一个主控。

I2C总线作业原理:

I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接纳数据。在CPU与被控IC之间、ICIC之间进行双向传送,最高传送速率100kbps。各种被操控电路均并联在这条总线上,但就像电话机相同只要拨通各自的号码才干作业,所以每个电路和模块都有仅有的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接纳器),这取决于它所要完结的功用。CPU宣布的操控信号分为地址码和操控量两部分,地址码用来选址,即接通需求操控的电路,确认操控的品种;操控量决议该调整的类别(如对比度、亮度等)及需求调整的量。这样,各操控电路尽管挂在同一条总线上,却互相独立,互不相关。

I2C总线在传送数据过程中共有三品种型信号,它们分别是:开端信号、完毕信号和应对信号。
开端信号:SCL为高电平时,SDA由高电平向低电平跳变,开端传送数据。
完毕信号:SCL为高电平时,SDA由低电平向高电平跳变,完毕传送数据。
应对信号:接纳数据的IC在接纳到8bit数据后,向发送数据的IC宣布特定的低电平脉冲,表明已收到数据。CPU向受控单元宣布一个信号后,等候受控单元宣布一个应对信号,CPU接纳到应对信号后,依据实际情况作出是否持续传递信号的判别。若未收到应对信号,由判别为受控单元呈现毛病。

AT24C02的作业原理:

1.AT24C02的地址

2.AT24C02的开端和完毕信号

3.AT24C02的应对信号:不管主从,每接纳1个字节都要给出1个应对信号

4.AT24C02的容量:8个字节为一页,共32页,地址规模为00H~FFH,即00H~07H为第一页,08H~0FH为第二页,以此类推。在接连读写时,若读取地址超越单页的第八个地址,则又从该页的第一个地址循环开端。

5.AT24C02的读写:只要在SCL置低时,方可改动SDA的值,在SCL高电平期间,SDA需坚持不变

A.写入单个字节

B.接连写入字节,当写入到该页最终一个地址单元时,再从该页的开端单元写入,如此重复。

C.AT24C02当时指针地址读一个字节

D.指定AT24C02的内存地址读取一个字节

E.在当时AT24C02的地址指针方位开端,次序读取多个字节,读取到该页最终一个字节时,再从该页的第一个字节循环读取

单片机与AT24C02通讯典范:

SCL EQU P3.6 ;界说SCL引脚
SDA EQU P3.7 ;界说SDA引脚

ORG 0000H
AJMP MAIN
ORG 0030H

START: SETB SDA ;开端信号
SETB SCL
CLR SDA
CLR SCL
RET

STOP: CLR SDA ;完毕信号
SETB SCL
SETB SDA
RET

SEND: MOV R0,#08H ; 单片机向24C02写入单字节子程序,1个bit1个bit地写,接连写8个
SEND0: RLC A
MOV SDA,C
SETB SCL
CLR SCL
DJNZ R0,SEND0
RET

REV: MOV R0,#08H ; 单片机从24C02读取单字节子程序,1个bit接1个bit地读,接连8个
REV0: MOV C,SDA
RLC A
SETB SCL
CLR SCL
DJNZ R0,REV0
RET

DELAY:MOV R6,#40 ; 用于完毕信号的延时,在我的体系上少于1600us还不行,怪事
D1: MOV R7,#40
D2: DJNZ R7,D2
DJNZ R6,D1
RET

ACK : SETB SCL ; 24C02的应对信号
;CLR SDA ; 接纳1个字节后自动发生,无需给出
CLR SCL
RET

ACK0: CLR SDA ; 单片机的应对信号,需求单片机自动给出
SETB SCL
CLR SCL
SETB SDA ; 这一步不行省掉,请仔细看时序图
RET

MAIN: MOV DPTR,#TABLE

ACALL START ; 开端信号
MOV A,#0A0H ; 输入24C02地址及写入信号,由于I2C总线上只要24C02这个器材,所以A0,A1,A2接地
ACALL SEND ; 发送到24C02
ACALL ACK ; 等候24C02的应对

MOV A,#00H ; 输入24C02的地址指针,即写入24C02的32页地址段中的开端方位
ACALL SEND ; 发送到24C02
ACALL ACK ; 等候24C02的应对

MOV R4,#00H ;此程序段功用为接连写入8个字节
MOV R5,#08H
WRITE: MOV A,R4
MOVC A,@A+DPTR
ACALL SEND
ACALL ACK
INC R4
DJNZ R5,WRITE
ACALL STOP ;写完后宣布完毕信号
ACALL DELAY

ACALL START ; 送出开端信号,进入指定24C02地址中读取单个字节形式
MOV A,#0A0H ; 输入24C02地址及写入信号
ACALL SEND ; 发送到24C02
ACALL ACK ; 等候24C02应对

MOV A,#00H ; 输入要在24C02中读取的数据的指定地址
ACALL SEND ; 发送到24C02
ACALL ACK ; 等候24C02应对

ACALL START ; 再次送出开端信号,预备读取上面指定的24C02内存单元
MOV A,#0A1H ; 输入24C02地址及读取信号
ACALL SEND ; 发送到24C02
ACALL ACK ; 等候24C02应对

ACALL REV ; 调用读取单个字节子程序
;ACALL ACK ; NO ACK ,指定地址读取单个字节形式不需求ACK
ACALL STOP ; 完毕信号
ACALL DELAY
MOV 50H,A ; 将读取到数据存入单片机50H地址中

ACALL START ; 发送开端信号,进入接连读取数据形式
MOV A,#0A1H ; 输入24C02地址及读取信号
ACALL SEND ; 发送到24C02
ACALL ACK ; 等候24C02应对

MOV R2,#07 ; 紧接上面的地址后接连读取7个字节
MOV R1,#51H ; 放入单片机的51H~57H地址单元
READ: ACALL REV
ACALL ACK0
MOV @R1,A
INC R1
DJNZ R2,READ
ACALL STOP
ACALL DELAY

LIGHT: MOV R1,#50H ; 从单片机的50H~57H单元中提取方才存入的数据,显现在数码管上
MOV R2,#08H
MOV A,#0FEH
LOOP: MOV P1,A
MOV P0,@R1
INC R1
RL A
ACALL DEL
MOV P1,#0FFH
DJNZ R2,LOOP
AJMP LIGHT

DEL :MOV R4,#20 ;数码管显现的延时
D3: MOV R5,#20
D4: DJNZ R5,D4
DJNZ R4,D3
RET

TABLE: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H
END

;uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,;0,1,2,3,4,
;0x92,0x82,0xf8,0x80,0x90,;5,6,7,8,9,
;0x88,0x83,0xc6,0xa1,0x86,;A,B,C,D,E,
;0x8e,0x8c,0xc1,0xce,0x91,
;0x00,0xff}; //0-f,p,u,t,y,8.,灭共阳极数码管显现段码

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/261035.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部