您的当前位置:首页正文

第十章 新型串行总线接口芯片

2024-07-15 来源:步旅网
微机原理

与接口技术

第十章

新型串行总线接口芯片

10.1 I2 C接口芯片

P2

10.1.1 I2 C总线简介

I2CBUS(InterIntegratedCircuitBus)简称InterICBus,是Philips推出的芯片间串行传输总线。它以两根线即数据线SDA和时钟线SCL实现了完善的全双工同步数据传送。可以很方便地组成多机系统和外围扩展系统。

I2C总线上的器件采用硬件编址和纯软件寻址的方法,使系统扩展简单灵活。按I2C总线规范,总线在传输信息过程中出现的各种工作状态,均能自动生成相应的状态码,系统主机能根据这些状态码自动进行总线管理。用户只要在程序中装入这些状态码的标准处理模块,以及根据操作要求完成I2C总线的初始化,启动I2C总线,就能自动完成规定的数据传送操作。

使用I2C总线的系统,不仅要求单片机有I2C总线接口,而且耍求所用的外围器件也必须带有I2C接口。

P3

2C总线外围扩展示意图

VDDLED显示器LED驱动控制器键I/O盘打印机I/OSDA SCLSDASCL

80C51VSDA / SDAVSCL / SCLRpSDA SCLSDA SCLSDA SCLSDA SCLEEPROMSDA SCLADC / DACSRAMP41. 有关I2C总线的一些名词术语:•节点——•••

在I2C总线上的所有器件都称为节点。节点分为主节点和外围节点:主节点——含有CPU的节点称为主节点。主节点可以实现对I2C总线的控制。外围节点——不含CPU的节点称为外围节点。外围节点不能控制I2C总线。主机(主控器)——任何一个主节点均可以实现对总线的控制,但在任何时刻只能有1个主节点占有总线控制权,占有总线控制权的主节点称为主机(主控器)。主机完成一次传输过程的初始化、发送启动信、时钟信号及传输终止信号。P5•从机(被控器)•

——被主机寻址的器件称为从机(被控器)。主节点可以作为主机也可作为从机(在多主系统中),而外围节点只能作从机。多主系统——含有多个主节点的系统称为多主系统。在多主系统中,存在一个总线竟争问题,总线仲裁通过各器件数据线的“线与”逻辑来实现的。(各器件时钟线也是线与的关系)。VccRpSDASDA器件1#SDA器件2#SDA器件3#SDA器件4#器件数据线SDA的逻辑与关系P6上图为4个主节点数据线SDA的“线与”关系。在总线竞争中,均向数据线发送数据(数据按先高位后低位的顺序逐位传送),由于各器件间数据线的逻辑与关系,令先输出数位0(低电平)的器件占领总线,而先输出数位1(高电平)的器件退出总线。因为总线上的数据和先输出数位0的器件相同。•单主系统——只包含一个主节点的系统称为单主系统。在实际应用中,大多为单主系统,单主系统不存在总线竞争问题,数据传送方式只有主发送和主接收两种方式。P72. I2C 总线上信号的定义(1)总线上数据传输的有效性I2C总线上数据传输时,在时钟线高电平期间数据线上必须保持有稳定的逻辑电平状态,高电平表示传输的数据位为1,低电平表示传输的数据位为0。只有在时钟线为低电平期间,数据线上的电平状态才可以变化。SDASCL数据稳定数据变化数据稳定(2)数据传输的起始位和停止位•起始位:在时钟保持高电平期间,数据线上出现由高电平向低电平变化的下降沿时,启动I2C总线的数据传输。•停止位:在时钟保持高电平期间,数据线上出现由低电平向高电平变化的上升沿时,停止I2C总线的数据传输。I2C总线上数据传输的启动信号和停止信号均由主控器发出。SDAP8SCLSTART起始信号STOP停止信号3.I2C总线上的数据传送格式(1)I2C总线上的数据传送P9I2C总线上传送数据以字节(8位)为单位,但每启动一次I2C总线,其后的数据传送字节数不受限制。每传送一个字节后都必须跟随一个应答位,并且每个字节的高位先发送,在所有的数据传送完毕后主控器发送停止信号。接收器发回的应答信号SDASCLS起始信号12数据789ACK123~89ACKP停止信号处理中断服务时时钟线保持低电平P10(2) 数据传送时总线的控制从上图可看到,没有时钟信号时,数据停止传送。由于总线上所有节点时钟线的“线与”关系,任何一个节点的SCL端输出低电平时,将使时钟线钳制在低电平而不产生时钟信号,从而使总线停止数据传送。I2C的这种特性可用于当按收器接收到一个字节数据后要进行一些其它工作而无法立即接收下一个数据时,使时钟线变为低电平,迫使总线进入等待状态,直到接收器准备好接收新的数据时,接收器才释放时钟线,使数据传送能继续正常进行。(3)应答信号I2C总线上传送数据时,每传送一个字节数据后必须有接收器发回的应答信号,和应答信号相对应的时钟信号由主控器产生。这时,发送器必须在这一时钟位上释放P11数据线,使其处于高电平,以便接收器能在这一位上送出应答信号。应答信号在第9个时钟位上出现,接收器输出低电平为应答信号(A),高电平为非应答信号(A)。当主控器接收数据时,接收到最后一个字节后,必须给被控器发送一个非应答信号A,使被控发送器释放数据线,以便主控器发送停止信号,从而终止数据传送。发送器送出数据接收器应答非应答应答主控器送出时钟S1289应答时钟起始信号(4) 数据传送格式I2C总线数据传输时必须遵循规定的数据传送格式。按照总线规约,起始信号表明一次数据传送的开始,其后为寻址字节(寻址字节表明被控器地址和数据传送方向),在寻址字节后是要进行读/写操作的数据字节与应答位。总线上的数据传输有多种读、写组合方式,主要有以下三类数据传送格式。1)主控器的写操作主控器向被控器发送n个数据字节,整个传输过程中数据传送方向不变。其数据传送格式如下:SSLAWAdata1Adata2AP12· · ·Datan-1AdatanA/AP:主控器发送,被控器接收:主控器接收,被控器发送A:应答信号,A:非应答信号,S:起始信号,P:停止信号,SLAW:寻址字节(写)2) 主控器的读操作主控器从被控显读出n个字节数据的操作。数据传送格式如下:SSLARAdata1Adata2AP13· · ·datan-1AdatanAPSLAR:寻址字节(读),主控器发送停止信号前应发送非应答位,向被控器表明操作结束。3)主控器的续写操作在一次数据传输过程中需要改变传送方向的操作。数据传送格式如下:SSLAW/RADATA1data1Adata2A· · ·A/AdatanPA/ ARSSLAR/WAADATA2A· · ·DATAnRS:重复起始信号P144. I2C总线的寻址约定(1)寻址字节的位定义在I2C总线标准规约中,寻址字节由被控器的7个地址位(D7~D1)和1个方向位(D0)组成。方向位为0表示主控器将数据写到被控器,为1则表示主控器从被控器续取数据。主控器发送起始信号后,立即发送寻址字节,这时,总线上的所有器件都将寻址字节中的7位地址与自己的器件地址相比较,若两者相同,则该器件认为被主控器寻址,并根据读/写位确定使用发送器还是使用接收器。寻址字节格式:D7D6D5D4D3D2A1引脚地址D1D0R/W传送方向A2器件编号地址A0P15(2)寻址字节中的特殊地址I2C总线地址统一由I2C总线委员会实行分配。其中两组编号地址0000 和1111 已被保留作特殊用途,其它器件的编号地址不能使用这些地址。1) 通用呼叫地址(0000 0000)用于寻访连接到I2C总线上的所有器件。2)起始字节(00000001)提供给无I2C总线接口的单片机查询I2C总线时使用的特殊字节。3)CBUS地址(0000001×)设置CBUS地址使现有的CBUS接收器也可以接入I2C总线。4)10位被控器地址使用10位地址以便I2C总线上能够连接更多的设备。P165.时钟的同步和总线仲裁I2C总线系统中多主竞争与时钟同步完全由硬件控制完成,无须同户介入。(1)时钟的同步在多主系统中,各主器件都向总线发送自巳的时钟,由于接口的“线与”功能而强使这些时钟同步。SCL1SCL2SCLP17(2) I2C总线数据传输中的竞争仲裁在多主系统中,由于总线的“线与”功能使得参与竞争的时钟取得同步即获得统一的时钟。同理各主器件输送到数据线上的数据,在数据线的“线与”功能作用下获得仲裁。发送器1被裁决失去总线DATA1DATA2DATA1 ≠ SDASDASCLSP18

AT24C××芯片与单片机接口

AT24C×系列是一种带有I2C接口的串行EEPROM。主要产品有24C01/02/04/08/16/32/64,其容量分别为128B/256B/512B/1KB/2KB/4KB/8KB。其主要特性如下:(1)具有页写功能,页写寄存器容量:AT24C01为4字节、AT24C02为8字节、AT24C04/08/16为16字节。

(2)擦写循环次数:10万次。(3)数据保存可长达100年。(4)+5V工作电源。1.引脚功能

AT24C01为8引脚封装、AT2402/04/08/16为8脚或14引脚封装、AT24C32/64为14引脚封装。

P19

××引脚图

5674SDAVCCA0SCLTESTA1A2VSS812319104678NCNCSDAVCCSCLWPNCNCVSSA0NCA1NCA214131211235A0、A1、A2:引脚地址输入端。VSS;电源地端。VCC:电源正端。SDA:I2C总线数据线。SCL:I2C总线时钟线。TEST:测试端。WP:写保护输入端。(P196 表10-1)

AT24C×结均示意图写入SRAM自动写入控制EEPROM阵列读出页写寄存器芯片操作

(1)芯片的寻址字节

单片机通过寻址字节来访问总线上的器件。寻址字节由器件编号地址、引脚地址和传送方位组成。AT24C系列芯片的器件编号地址为1010。该系列芯片寻址字节列表如下:

型号存储容量器件寻址字节P20

AT24C01AT24C02AT24C04128×8512×81 0 1 0 A2 A1 A0 R/W1 0 1 0 A2 A1 P0 R/W256×8 1 0 1 0 A2 A1 A0 R/WAT24C08 1024×8AT24C16 2048×8AT24C324096×8AT24C64 8192×81 0 1 0 A2 P1 P0 R/W1 0 1 0 P2 P1 P0 R/W1 0 1 0 A2 A1 A0 R/W1 0 1 0 A2 A1 A0 R/W2)AT24C系列E2PROM的写操作

AT24C系列E2PROM的写操作有字节写和页写两种方式。1)字节写

字节写是指向E2PROM片内指定单元写入一个字节数据的操作。数据操作格式如下:

SSLAWAWORDADRAdataAP被传送的字节数据:主控器发送:被控器回送

P21

寻址字节(写)存储单元地址(子地址)对于存储容量4kB以上的E2PROM,其存储单元地址12位以上,需要两字节子地址。数据操作格式如下:

SSLAWAWORDADRHWORDADRLAdataAP22

页写

页写是指向E2PROM片内指定首地址连续写入不多于n个字节页写数据的操作。n为芯片页写寄存器的个数。其数据操作格式如下:(m≤n)

SSLAWAWORDADRAdata1Adata2A· · · · · ·

datam-1AdatamAP对于存储容量4kB以上的E2PROM,其存储单元地址12

位以上,其起始地址需要两字节。数据操作格式如下:

SSLAWAWORDADRHWORDADRLAdata1Adata2A· · · · · ·

datam-1AdatamAP系列E2PROM的读操作

AT24C系列E2PROM的读操作可分为当前地址读、指定地址读和序列读三种。1)当前地址读

当前地址读是指不给定字地址的读操作。读出的是当前地址的数据。当前地址是指片内地址寄存器当前的内容,每完成一个字节操作,地址自动加1,故当前地址是上次操作完成后的下一个地址。当前地址读操作格式如下:

SSLARAdataiAPP23

2)指定地址读

指定地址读是按指定的字地址读出一个字节数据的操作。这种读要进行两种操作,先进行地址写操作,然后进行数据读操作。其数据操作格式如下:

SSLAWAWORDADRASSLARAdataiAP序列读

序列读是指连续读入m个字节数据的操作。序列读入字节数据的首地址可以是当前的地址或指定的地址,其操作可以连在当前地址读或指定地址读的SLAR发送之后。

P24

当前地址序列读的数据格式如下:

SSLARAdata1Adata2A· · ·datam-1AdatamAP指定地址序列读数的据传送格式如下:

SSLAWAWORDADRASSLARAdata1Adata2A· · ·

datam-1AdatamAPP25

×系列与MCS-51单片机的连接及编程

AT24C×系列E2PROM通过I2C总线与单片机相连接非常简单,可节省硬件资源。由于MCS-51单片机没有I2C总接口,要实现与AT24C×系列连接,必须采用普通的I/O口模拟I2C总线的数据传送。下图是AT24C16与8×51的连接图。

8×515.1kΩ5.1kΩ5.1kΩVcc8Vcc7WP6SCL5SDAP1.2P1.1P1.01A0A12A23Vss 4AT24C16

P26

I2C总线数据传送,只能在单主系统中进行。而

单主系统只有两种数据传送方式即主发送和主接收两种方式。主发送即单片机向外围器件发送数据的写操作,主接收即单片机接收外围器数据的读操作。编写程序时,必须按照I2C总线主发送和主接收的数据传送格式进行编程。

本例要求编写指定地址序列写和序列读程序:

①将片内RAM地址从BUF开始的16个单元的数据写到AT24C16地址从P-ADR开始的16个单元中。(主发送)②将AT24C16地址从P-ADR开始的16个单元的数据读到片内RAM地址从BUF开始的16个单元中。(主接收)下面说明该程序的编写方法。

2C模拟子程序( P202 )

P27

(1)发送起始信号和寻址字节子程序[教材P202(4)]FBZM:SETB SDA D0D71010A2A1A0WSETB SCL ;总线处于待命状态

MOV A,DPH ;取单元地址高字节CLR CSSLAWRLC A ;使字节的D0位为0ANL A,#0FH ;取字节的低4位

ORL A, #0AH ;形成寻址字节(写),即1010 P2P1P00BMOV R3,A

INC R3 ;寻址字节(写)改为寻址字节(读)暂存于R3

FSMW:CLR SDA ;使数据线SDA由高电平变为低电平产生起始信号FSMW1:MOV R1,#08H ;以下程序段发送寻址字节(写)FSMW2:CLR SCL

RLC A

MOV SDA,CSETB SCL

DJNZ R1,FSMW2

CLR SCL ;寻址字节发送完毕,锁是时钟线准备下一步操作。RET

P28

检查被控器应答子程序[教材P202(5)]

CSXY:SETB SDA ;置口线输入方式同时也释放数据线

SETB SCL ;产生时钟脉冲CLR XYBZ ;清应答程序标志

JNB SDA, CSXY1 ;若SDA为低电平即有应答信号则返回。SETB XYBZ ;无应答信号,置位应答程序标志。

CSXY1:CLR SCL ;锁定时钟线,准备下一步操作。

RET

(3)主控器发应答信号子程序[教材P202(6)]

FYD:CLR SDA ;使数据线为低电平

SETB SCL ;发送应答信号

NOP ;使应答位时钟脉冲有足够宽度CLR SCL ;准备接收下一个字节数据SETB SDA ;释放数据线SDARET

SCL

P29

发送停止信号子程序[教材P202(7)]

FJSM:CLR SDA ;将数据线置为低电平,准备发停止信号

SETB SCL ;使时钟线为高电平NOP

SETB SDA ;使数据线由低电平变为高电平,发停止信号RET

(5)发送一字节数据子程序[教材P202(8)]

FDPL:MOV A,DPL ;发送24C16单元首地址低8位FACC:ACALL FSMW1 ;调发送累加器A内容子程序

ACALL CSXY ;调检查应答子程序RET

(6)发送非应答信号[补充子程序]FFYD:SETB SDA

SETB SCLNOPNOP

CLR SCLCLR SDA RET

P30

初始化定义[教材P200 (1)]

SDA EQU P1.0 ;定义串行口数据线SCL EQU P1.1 ;定义串行口时钟线XYBZ EQU F0 ;定义响应标志位BUF EQU 30H ;定义缓冲区首址;

P-ADR EQU 0000H ;定义E2PROM 页面单元首址

(7)发送16个字节子程序[教材P200 (2)]

发送程序按照主发送数据传送格式来编写的。主发送数据传送格式:

SSLAWAWORDADRAdata1Adata2A· · · · · ·

datam-1AdatamAP[教材P200]

WR24C:MOV DPTR , #P-ADR ;取24C16待写页面及单元首地址WR24C1:CLR EA ;关中断

ACALL FBZM ;发送起始信号和寻址字节(写) P27ACALL CSXY ;检查应答信号P28JB XYBZ , WR24C1 ;没回答重新发送

ACALL FDPL ;发送24C16接收单元首址低字节P29JB XYBZ , WR24C1;没回答重新发送

MOV R0 , #BUF ;设置发送缓冲区地址指针MOV R2 , #00H ;设置发送字节数计数器

WR24C2:MOV A , @R0 ;取发送数据

ACALL FACC ;发送1字节数据P29JB XYBZ , WR24C2 ;没回答重新发送INC R0 ;修改指针INC R2 ;计数器加1

CJNE R2 , #10H ,WR24C2 ;查16个字节数据发送完否ACALL FJSM ;发送停止信号P29ACALL DE10ms ;延时10msSETB EA ;开中断

RET ;发送程序返回

P31

接收16个字节子程序[教材P201 (3)}接收程序是按主接收数据传送格式来编写的。主接收数据传送格式:

SSLAWAWORDADRASAdatamAPSLARAdata1Adata2A· · ·

P32

datam-1程序清单:

RD24C:MOV DPTR , #P-ADR ;取24C待读页面及单元首址RD24C1:CLR EA ;关中断

ACALL FBZM ;发送起始信号及寻址字节(写) P27ACALL CSXY ;查应答信号P28

JB XYBZ , RD24C1 ;24C无应答重新发送

ACALL FDPL ;发待读字节首址低8位P29JB XYBZ , RD24C1;24C无应答重新发送MOV A,R3 ;寻址字节(读)送A

ACALL FSMW ;发送重新起动信号和寻址字节(写)。P27

P33

;调应答检查子程序

JB XYBZ,RD24C1 ;无应答重新发送

P28

MOV R0,#BUF ;设置接收缓冲区地址指针MOV R2,#00H ;传送字节计数器清0

RD24C2:MOV R1,#08H ;设置位传送计数器RD24C3:SETB SCL ;发送时钟脉冲

SETB SDA ;SDA模拟口线置输入方式

MOV C,SDA ;从SDA口线读入1位数RLC A ;将读入的数位移入累加器ACLR SCL ;准备接收下一位DJNZ R1,RD24C3 ;若未读够8位,则继续读MOV @R0,A ;将读入的数据存入接收缓冲区INC R0 ;修改缓冲区地址指针INC R1 ;字节计数器加1

P34

;判是否数据接收完?

ACALL FFYD ;数据接收完毕,发非应答信号P29ACALL FJSM ;发停止信号P29SETB EA ;开中断RET

WW:ACALL FYD ;数据末接收完,发应答信号P29

AJMP RD24C2 ;转RD24C2继续接收下一字节数据。

模拟I2C总线通用发送/接收程序

1. I2C总线通用模拟程序组成•RD-data 接收N个字节子程序•WR-data 发送N个字节子程序•RD-byte 接收一个字节子程序•WR-byte 发送一个字节子程序•START 总线启动子程序•STOP 总线停止子程序

P35

2. 程序模块清单

(1)启动子程序( fosc=12MHz)START:SETB SDA

NOP

SETB SCLNOPNOPNOPNOP

SDA

>4.7μsSCL

>4.0μs启动信号时序

P36

NOP

CLR SDANOPNOPNOPNOPNOP

CLR SCLRET

SDA

>4.7μsSCL

>4.0μs启动信号时序

(2)停止子程序

STOP:CLR SDA

NOP

SETB SCLNOP NOPNOP

SDA

>4.7μsSCL

>4.0μs停止信号时序

P37

NOP

SETB SDANOPNOPNOPNOPRET

SDA

>4.7μsSCL

>4.0μs停止信号时序

发送一个字节子程序

子程序入口条件:待发送数据在A。出口状态:正常ACK=0,否则ACK=1WR-byte:MOV B-count, #08H WR-bit:RLC A

JC WR-1;转发送数据位1CLR SDA

SJMP WR-0;转发送数据位0

WR-1:SETB SDA

NOP

WR-0:NOP

SETB SCL ;产生发送数据时钟NOPNOP NOP NOPNOP

CLR SCL ;准备下一操作DJNZ B-count,WR-bit

P38

WR-byte:MOV B-count, #08HWR-bit:RLC A

MOV SDA, CSETB SCLNOPNOP NOP NOPNOP

CLR SCL DJNZ B-count,WR-bit

P39

NOP

SETB SDA ;释放SDA,准备接收应答信号NOPNOP

SETB SCL ;产生应答时钟信号NOPNOP

CLR ACK ;预清除出错标志

JNB SDA, $+5 ;判是否应答(低电平),有则返回SETB ACK ;无应答,置位出错标志NOP

CLR SCL ;发送结速置SCL低电平,以便下一操作。RET

接收一字节数据子程序

子程序入口条件:非应答标志N-ack己设定

出口状态:接收到的数据在累加器A中。

RD-byte:SETB SDA ;口线置输入方式

MOV B-count, #08H;数位计数器

RD-bit:NOP

CLR SCL ;准备接收数据NOPNOPNOPNOPNOP

SETB SCL ;使数据放入数据线NOPNOP

CLR C ;Cy预置0

JNB SDA, RD-0 ;读入数位为0转SETB C ;读入数位为1,置位Cy

P40

RD-byte:MOV R0,#08H

SETB SDASETB SCLNOPNOP

MOV C,SDARLC ACLR SCL

DJNZ R0,RD-byte · · · ·

P41

-0:RLC A ;将读入的数据位移入累加器A

NOPNOP

DJNZ B-count,RD-bit ;数据位没接收完,继续接收CLR SCL ;准备发送应答信号NOPNOPNOP

CLR SDA ;数据线预置0

JNB N-ack, WR-Nack ;接收的数据不是最后一字节,转SETB SDA ;是最后一个字节,发非应答信号

WR-Nack:NOP

NOP

SETB SCL ;使应答信号有效。NOP

NOP

P42

NOPNOP

CLR SCLCLR N-ackRET

(5)延时子程序

Delay:MOV R7,#30H ;延时

MOV R6,#34HDJNZ R6,$-2DJNZ R7,$-4RET

发送N个字节子程序

子程序入口条件:Device:外围器件地址;W-start:存单元地址;

P43

W-count:存发送字节数;T-start:发送缓冲区首址

子程序出口状态:返回标志ACK=0发送正常,否则为不正常。

WR-data:ACALL START ;启动I2C总线

MOV A, # Device ;取外围器件寻址字节ACAL WR-byte ;发送寻址字节

JB ACK,WRRET ;外围器件无应答信号,返回MOV A, W-staet ;取单元地址(子地址)ACALL WR-byte ;发送单元地址JB ACK, WRRET ;无应答,返回MOV R0, #T-start ;取发送缓冲区首址

WRNEXT:MOV A, @R0 ;取发送数据

ACALL WR-byte ;发送1字节数据JB ACK, WRRET ;无应答返回INC R0 ;指向下一个数据

DJNZ W-count,WRNEXT ;若未发送完,继续发送

P44

;发送停止信号

ACALL Delay ;调延时程序,等待写周期结束

WRRET:RET

(7) 接收N个字节数据子程序

子程序入口条件:W-count:存放接收字节数;Device:外围器件地址

W-start:单元地址;R-start:接收缓冲区首地址

子程序出口状态:传送正常ACK=0,否则ACK=1

RD-data:ACALL START ;发起始信号

MOV A, #Device ;取寻址字节(写)ACALL WR-byte ;发送寻址字节(写)JB ACK, RDRET ;无应答,返回MOV A, W-start ;取单元首地址ACALL WR-byte ;发送单元首地址JB ACK, RDRET ;无应答,返回ACALL START ;重新启动总线MOV A, #Device

SETB ACC.0 ;将寻址字节(写) 改为寻字节(读) ACALL WR-byte ;发送寻址字节(读)

P45

;无应答,返回

CLR N-ack ;清非应答标志

MOV R0, #R-start ;设置接收缓冲区地比址指针DJNZ W-count,RDNEXT ;设接收完继续接收下一个SJMP RDLAST ;接收最后一个数据

RDNEXT:ACALL RD-byte ;接收1字节数据

MOV @R0, A ;存数据

INC R0 ;指向下一缓冲单元DJNZ W-count,RDNEXT ;未接收完,继续接收

RDLAST:SETB N-ack ;置非应答标志

ACALL RD-byte ;接收最后一个字节数据MOV @R0, A ;存数据

ACALL STOP ;发停止信号

RDRET:RET

通用程序使用方法

(1)根据应用系统要求给下列符号标记赋值

B-count EQU ?;数据位计数器W-count EQU ?;数据字节计器Device EQU ?;被访问器件地址W-start EQU ?;被访问器件单元首地址R-start EQU ?;接收缓冲区首地址T-start EQU ?;发送缓冲区首地址SDA EQU ?;数据线SCL EQU ?;时钟线ACK EQU ?;发送数据应答标志N-ack EQU ?;接收数据非应答标志

(2)初始化操作

MOV W-count ,#?;待传送字节数MOV W-start ,#?;待访问外围器件单元首地址

P46

P47

调用发送或接收N个字节子程序

ACALL WR-data ;调用发送N个字节子程序ACALL RD-data ;调用接收N个字节子程序注意:所涉及的子程序也必须在内存中。4.程序应用举列

(1)将单片机片内RAM以50H单开始的6个字节数据传送到AT24C16以20H开始的6个单元中程序清单:

Device EQU 1010 0000B ;寻址字节(写)W-start EQU 20HT-start EQU 50HW-count EQU 30H

ORG 0000H

MOV W-count ,#06HACALL WR-dataEND

注意:运行程序时,所涉及到的子程序都必须在内存中。

P48

将AT24C16以40H开始的8个字节数据传送到单片机片内RAM以40H开始的单元中。程序清单:

Device EQU 1010 0000B ;寻址字节(写),在子程序中改为(读)W-start EQU 40HR-start EQU 40HW-count EQU 30H

ORG 0000H

MOV W-count ,#08HACALL RD-dataEND

注意:运行程序时,所涉及到的子程序都必须在内存中。

因篇幅问题不能全部显示,请点此查看更多更全内容