LPC900系列单片机I2C总线一主多从通信实例

-
LPC900系列单片机I2C总线一主多从通信实例.pdf
广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925htp/ww. zlgmcu. com 从机1通信 初始化 取反LED10 与标志置位 清零写标志 读标志置位 接收数据 正确 ↓取反LED 清零读标志 图3从机主程序流程图 通信初始化 向从机1发送写命令 发送10字节数据,取反 LEDO 向从机1发送读命令 接收10字节数据 接收正确 ↓取反LED1 对从机2进行操作 图4主机程序流程图 广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925htp/ww. zlgmcu. com 程序流程如图2、图3和图4所小。图2中给出了从机1的中断服务程序的流程图。图 3给出了从机1的主程序流程图。图4给出了主机的程序流程图。从机1和从机2的流程图 相同,在此仅给出从枳1的程序流程图。主机对从机1和丛机2的操作相类似,因而在流程 图中仅以“对从机2进行操作”表示。 3.2编程要点 P8啁LPC932是通过对寄存器的操作达到对C总线进行控制的目的。其中涉及的寄存器 有6个,分别为I2CON(rC控制寄存器)、2DAT(数据寄存器)、I2STAT(状态寄存器)、 I2ADR(地址寄存器)、I2SCIH(占空比寄存器高字节)、I2SCLL(SCL占空比寄存器低字 节)。这里给出I2CON寄存器的功能描述,如表1所示。 C通信的操作模式有4种 主发送器模式 主接收器模式 从接收器模式 从发送器模式 每次的通信都是由主机发起的。具体为主机发送起始条件,然后发送要操作的从机地址 和读写命令。在收到从机应答后,进行相应操作。如果是主发送器模式,则由主机发送数据 到从机,从机每收到一宇节数据就发送应答信号相应主机。如果是主接收器模式,则数据是 由从机发送到主机的,主机每收到一个字节就发送应答信号相应从机。在主机为主发送器模 式时,从机为从接收器模式。在主机为主接收器模式时,从机为从发送器模式。通信完毕 主机发送停止信号,结束操作。IC的通信格式归纳如图4所小。 表11G控制寄存器 7 6 0 I2EN STA STO SI AA CRSEL I2EN:C接口使能位 STA:起始标志位 ●STO:停止标志位 IC中断标志位 ●AA:声明应答标志位 CRSEL:SCL时钟选择标忐位 8「从址多A数A】数】A】P 传输的数据 n个字节+应答 A=应答(SDA为低) 主机到从机 A=非应答(SDA为高) 从机到主机 s=起始条件 P=停止条件 如果数据由主机发送,则应答由从机产生 如果数据由从机发送,则应答由主机产生 图5C通信格式 广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925htp:/www.zlgmcu.com 以下归纳出rC通信初始化和程序设计要点。 IC通信初始化的步骤为: a)初始化端口,SDA和SCL必须为井漏方式。 b)初始化寄存器I2SCLH和I2SCL,其设置不仅涉及到占空比,也涉及到总线的通信 速率,计算公式为fFLK/(2*(I2SCLH+I2SCLL)) c)初始化I2CON为0x44,即使能rC总线、允许应答、使能内部SCL发生器。主机可 以不设置应答位,但从机必须设置应答位 d)从杋程序中还要设置相应的从机地址,其方法是把从机地址写到I2ADR中。寄存 器的最低位是通用调用位。置位时,对通用地址进行识别。 e)如果PC以中断方式通信,则要置位E2C和EA。本实验中从机就是以中断方式进 行通信的。 IC通信程序设计要点 a)每次通信的起始条件和停止条件均由主机发起,从机只是负责喳听主机信号。起 始条件和停止条件是通过置位2CON中的STA和SIO位达到的 b)当主机获得总线,成功发送启动条件后,地址和数据的发送是通过写数据寄存器 I2DAT达到的。 c)每次发送地址和数据后应该查询状态寄存器I2STAT检查数据发送状态以进行下 一步动作。 d)每次通信完毕后主机和从机均应该释放总线。 4.源程序清单 程序清单4.1主机稈序(C51版) /*米米米冰米冰冰**×**冰冰米米冰冰x*来*冰米冰冰冰*来表*济米 *文件名:D2 MAster. c 版权: 周立功单片机研究所 *功能 LPC900rC总线演示程序(主机) 2004/12/28 米水水客水容水岩水客不容*容容水水米水客水》容容水容水水米凇米水水容水岩兴容农水容米米水米水容水 #include"reg932 #"hi2c c51.h' /包含C主方式软件包头文件 #define uchar unsigned char #define SLAVEl 0x60 ∥定义从机1地址 #define SLAVE2 0x50 ∥定义从机2地址 定义数据表,主从机均相同,发送方按数据表发送,接收方按表判断数据的正确性 uchar code matalab[10]={0x01,0x02,0x03,0X04,0x05,0x06,0x07,0x08,0x09,0x10} sbit LED-P0C2 LEDI-P0 3 Delay(int) void event loop( void); roid maino 广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925htp/ww. zlgmcu. com uchar buff[10] 定义数据接收缓冲区 uchar i,err PIMI-OX0C 定义SDA(P13)和SCL(P12)为开漏方式 P1M2=0x0C POMI=0x00 ∥定义LED驱动为推挽方式 POM2=OXUC. LED-1 /开机闪一下LED Delay(1000): LED=O while(l) event loop ∥开始事件循环 求米米水米求*求*半》**来*米水米客求*k*半***来求来米米求幸非*k*半求来求*米冰米非非 *函数名称 event oo 功能:事件循环 半*半幸*率*半***半*幸*半半来******军半半****来**米*******半*幸*幸*半来半半幸**率*半幸* void event loop(void) uchar 1.err Delay(loo0); ISendstrExt(SLAVEl, DataTab, 10) /向从机1发起与操作 LED=LED Delay(1000) it(IRcv StrExt(sLAVEI,buff, 10)) 向从机1发起读操作 errO for(i=0;i<10,i+) 判断接收到的数据是否符合数据表内容 if(buff]!=DataTab[i]) ferr=1; if(crr)LEDI= -LEDl; i ∥正确则取反LED表示 for(i-0;i<10,i+-) /清空数据接收区 buffet」=0; Dclay(1000) ISendStrExt(SLAVE2, Data Tah, 10); /向从机2发起写操作 LED= LED 广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925htp/ww. zlgmcu. com Dlay(1000); if(RcvStrExt(SLAVE2, buff, 10)) 向从机2发起读操作 err- for(i=0; i< 10; 1++) 判断接收到的缴据是否符合数据表内容 { if(buff[i]!-Data Tab[d err-1 if(lerr)LED]=-LEDI ∥正确则取反LED1表示 for(i=0;<10;i+) /清空数据接收区 buff[il-0; /本*本*本本本本春本本本本本*本*本本本春*本本幸本本本本本本春衣本本本*本本本春本春本本 函数名称: 功能 延时 菜入口参数: 延时值 半*半幸*率*半***半*幸*半半来******军半半****来**米*******半*幸*幸*半来半半幸**率*半幸* void Delay(int 1) while(io) forG=0j<=1000j计+); 程序清单4.2从机程序(C51版 /**菜米菜米冰家冰米*×冰冰米凉*米淋米冰冰冰*冰*冰*米米米冰家求浓冰*※*冰*菜*米冰 *文件名 I2CSlave.c 版权:周立功单片机研究所 *功能 LPC900P?C总线演示程序(从机) 日期: 2004/12/28 苯菜冰浓苯冰米冰×冰张米苯*米冰浓*米*苯家米米菜冰客浓**来※*米米米冰 #include reg932 h #" hi2csla cslh" /)含C软什包从方式头文什 #define uchar unsigned char #define SLAVE ADDR Ox50 从机地址,2个从机地址应该不同 LED=P0 2 广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925htp/ww. zlgmcu. com LEDI=P03 Dclay(uchar); 定义薮据表,主从机均相同,以判断数据接收正确性 uchar code matalab[10]={0x01,0x02.0x03.0X04,0x05,0x06,0x07,0x08,0x09,0x10}; bi ReadFlag=0 定义读标志 bit SendFlag=0 定义发送标志 uchar ∥定义数据缓冲区和索引 *米*半半*半*半***家***来幸米*半半*半*半幸米半****来幸*半***幸*半*米**幸幸来半半半半*半幸半*幸 函数名称 L2c Int 功能: rC中断服务 半**事*串率*率》半半常半*来***中半*率器**半***来*半*半率率半半串*和*串*半*串*串率半率半* void I2c Int( void)interrupt 6 I2C中断处理函数 switch(I2STAT) case rdsla /主机发起读操作 dex O while(l) 发送数据,响应主机 if(send3yte( Data Tablindex」)≥=0) break; index + if( index>=10)break; SendFlag=1 置发送标志,表示发送完毕 break. case Wisla 机发起写操作 index=0 while(1) 接收主机发送的数据 if( rev Byte(buff+index )-0 )break index++. if( index>=10) break CadlAg=I 置读标志,表示收到数据 break break. I2CON=0x44 释放总线 id main( 广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925htp/ww. zlgmcu. com uchar 1. crr PIMI=OXOC. 定义SDA(P13)和SCL(P12)为开漏方式 PlM2-0x0C: POMI=Ox00 定义LED驱动为推挽方式 POM2=OXOC E2C=I. 允许I2C中断 EA-1; SetBus(SLAVE ADDR); 设为从机 LED=1 /开机闪一下LED Dlay(255); LED-0 if( SendFlag /果已发送数据则取反LED1表示 LEDI=LEDI SendFlag=0 err=0 if(readF 如果接收到数据则执行 for(i-0;i<10,i+-) /判断接收到的数据是合符合数据表内容 if(buff[]!=Data- if(err)LED=lED: ∥正确则取反LED表示 for(i-0;i<10,i+) /清空数据接收区 buft」=0 CadlAg=0 来*半半*水架半**来岸半率半*率*半*半*串*半*半半宰*半**半*率**来**半*半事来非率 函数名称 dclay 功能 延时 入口参数: i延时值 米苯米苯苯※*x※来冰苯米苯冰苯冰苯冰*冰*×***苯凉米茶米米家米*冰*冰凉*菜*菜冰家冰*冰**x冰苯 void Delay(uchar i 广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925htp/ww. zlgmcu. com int for=0j<=669j++); 程序清单4.3主机程序(ASM版) 来*******来半*半*事半*中*串***兴*****来***率幸串半非率**来****半 ;文件名 L2CMastcr. asm 饭权:周立功单片机研究所 功能 LPC900Ⅰ2C总线演示程序(主机) 日期 2004/12/28 **半**半*串来半半*率*半*串*半*串率半兴*半*来*来=半*冰*串来*半兴来*****半* 义P89LPC932的L2C相关寄存器的定义 L2ADR DATA ODEH I2DAT DATA ODAH 22CON DATA OD8II I2STAT DATA OD9H I2SCLH DATA ODDH I2SCLL DATA ODCH STA BIT IcON, 5 SI BIT IcON. 3 定义P8LPC932的部分特殊寄存器 POM1 DATA 84H POM2 DATA 85H PIMI DATA IH PIM2 DATA 92H ;为软件包定义变量 ACK BIT 10H 应答标志位 DATA 50H 器件从地址 SUBA DATA 51H 器件子地址 NUMBYTE DATA 2H ;读/写的字节数 ;使用前定义常量: SDA P1.3 SCL EQU P1.2 MTD EQU 30H ;发送数据缓冲区首址(缓冲区30H-3FH MRD EQU OnI 接收数据缓冲区首址(缓冲区40-4F LED BIT P0.2

238KB
LPC1768的I2C通信实例代码
2012-11-03基于LPC1768的I2C通信实例代码,代码以LPC1768为主机,通过I2C总线通信,读取LM75的监控温度信息
73KB
lpc2103 I2C读写AT24C256
2012-05-14适用于lpc系列ARM通过I2C读写AT24C256。本人亲测通过
159KB
嵌入式系统/ARM技术中的P87LPC764单片机的I2C总线显示电路
2020-12-10摘要:I2C总线是Philips公司推出的芯片间串行传输总线。目前,已有不少大电气公司半导体厂商推出了不少带有I2C总线接口的单片机。本文介绍一种利用Philips公司生产的P87LPC764单片机作
3KB
P89LPC932硬件I2C软件包
2013-11-11P89LPC932硬件I2C软件包,此软件包由C语言编写,是以查询方式完成各种总线操作的,在使用前应对总线进行检查,并使用看门狗,以防等待总线而造成死机。
81KB
显示/光电技术中的在P87LPC764单片机I2C总线系统中扩展LCD显示器
2020-12-131 引言 I2C总线是Philips公司推出的芯片间串行传输总线。它仅用串行数据线(SDA)和串行时钟线(SCL)两根连线便实现了完善的全双工同步数据传送,并可很方便地构成多机系统和外围器件扩展系
5.71MB
NXP LPC系列单片机波特率计算工具
2015-08-06NXP LPC系列单片机波特率计算工具,NXP LPC系列单片机波特率计算工具
27.39MB
LPC17系列单片机官方固件库
2019-03-18LPC17系列固件库,NXP官方库,方便LPC17系列单片机开发。
599KB
LPC总线学习,主要对LPC协议的理解
2018-06-20LPC总线知识点介绍,主要对其协议的理解,数据与控制引脚的说明,硬件学习参考
299KB
单片机选型表lpc系列单片机
2010-01-05lpc单片机选型表 有很多型号及其参数列表。
1.55MB
周立功 lpc1100系列单片机例程
2013-07-22周立功lpc1100系列单片机例程,这些例程是基于周立功的corteM3——1300开发版的,里面有关于lpc1100系列单片机的大量例程-ZLG MCU routine lpc1100
1.24MB
lpc1768的串口通信实例代码
2012-11-03该示例代码包含了lpc1768四个串口的通信代码,有查询方式,中断方式,和DMA方式,对初学者有很大帮助
496KB
英特尔® 芯片组低引脚数接口规范 LPC总线
2020-10-28用于传统 I/O 的低引脚数 (LPC) 接口规范促进了行业向无 ISA 系统的过渡。1.1 修订版 LPC 接口规范的关键增强是包括了固件存储周期和增加了多字节读取功能。 LPC 接口允许通常集成在
216KB
LPC2000系列微控制器应对嵌入式需求
2020-07-14突出特点 由于采用了ARM7TDMI-S内核,LPC2000系列MCU工作频率达60MHz,与其他8-bit产品相比具有更强的功能延展性。同时它借助片上存储器加 模块实现了“零等待访问”高速闪存功能,
75.33MB
NXP_LPC1700(LPC17xx)系列MCU用户手册及各模块PPT讲解
2013-07-16个人收藏的LPC17xx资料,从中受益匪浅。 包含以下内容: _lpc17xx.user.manual.pdf-------Rev00.07, 31 July 2009 _zlg翻译的LPC1700用
4KB
LPC2478通过I2C对AT24C04(EEPROM)进行读写文件
2014-07-08LPC2478通过I2C对AT24C04(EEPROM)进行读写文件,,已通过调试,,可用。
160KB
单片机与DSP中的基于I2C总线的单主多从单片机之间的通信
2020-11-071 引言 随着单片机控制系统的不断扩大以及控制功能不断增多,有限的单个单片机通用I/O口已不能满足同一系统中控制多个受控对象需要,随着FC总线研究的深入,用I2C总线扩展单片机I/O口的方法在全自
358KB
LPC芯片I2C控制逻辑
2015-03-05LPC芯片arm的外设I2C控制逻辑。讲解翔实,有助于更好的写驱动程序。
961KB
LPC2000系列单片机代码烧写方法
2016-10-09LPC2000系列单片机代码烧写方法
194KB
嵌入式系统/ARM技术中的在P87LPC764 I2C总线系统中扩展LCD显示器
2020-12-131 引言 I2C总线是Philips公司推出的芯片间串行传输总线。它仅用串行数据线(SDA)和串行时钟线(SCL)两根连线便实现了完善的全双工同步数据传送,并可很方便地构成多机系统和外围器件扩展系
132KB
LPC的IO口配置详解
2010-04-15LPC900单片机是一个基于80C51内核的高速、低功耗的Flash单片机,具有可编程I/O口输出模式, 除了有标准80C51的准双向口模式外,另外还有开漏输出、推挽输出和仅为输入3 种模式。 过去使
380KB
LPC1768读取AT24C02存储器
2014-10-06通过LPC1768读取存储器AT24C02。采用I2C总线,我自己写的时序,没有使用1768的I2C功能。通过LPC1768将数据写入24c02,并回读数据显示在液晶上。硬件测试成功。读取其他的存储器
1.58MB
LPC1768程序实例
2013-10-08基于LPC1768的程序实例,其中包括CAN,ADC,DAC,UART,USB,PWM,I2C,外部中断等一系列常用代码。
595KB
LPC总线介绍.docx
2019-10-25LPC总线的介绍资料,中文介绍,例如IO读写、内存读写、DMA读写、Firmware memory读写等。对于初涉及的软硬件学习 是良好的资料笔记。
24.16MB
LPC177x_8x系列单片机官方固件库
2019-03-18LPC17系列固件库,NXP官方库,方便LPC17系列单片机开发。
81KB
NXP官方LPC系列选型表
2018-12-04NXP官方LPC系列选型表
2.44MB
LPC802.pdf
2020-09-14LPC802是基于ARM Cortex-M0 +的低成本32位MCU系列处理器以最高15 MHz的CPU频率运行。 LPC802支持16 KB闪存内存和2 KB的SRAM。 LPC802的外围设备包括
22.8MB
基于LPC1768单片机开发例程.rar
2020-05-14【实验1】GPIO,【实验2】EXTI,【实验3】UART,【实验4】I2C,【实验5】I2S,【实验6】PWM,【实验7】ADC,【实验8】CAN,【实验9】Joystick,【实验10】RTC,【
33KB
lpc2000系列单片机CAN总线的应用中需要注意的几个问题
2020-08-04本文介绍了使用IPC2000单片机CAN总线时应注意的问题
2.66MB
LPC系列选型手册
2017-07-11LPC系列选型
161KB
cortex m3 lpc1768-RS485实例代码
2011-09-20cortex m3 lpc1768-RS485实例代码
-
学院
计算机网络基础
计算机网络基础
-
学院
量化高频交易系统tick数据采集
量化高频交易系统tick数据采集
-
下载
电设20190807074129420.rar
电设20190807074129420.rar
-
博客
【比赛】Codeforces Round #696 (Div. 2)
【比赛】Codeforces Round #696 (Div. 2)
-
下载
SetupFactorC#打包安装包软件.rar
SetupFactorC#打包安装包软件.rar
-
学院
【数据分析-随到随学】Spark理论及实战
【数据分析-随到随学】Spark理论及实战
-
下载
基于javaweb的在线购物系统的设计与实现.zip
基于javaweb的在线购物系统的设计与实现.zip
-
学院
python数据分析基础
python数据分析基础
-
博客
如何解决bootstrap导航条不跳转的问题
如何解决bootstrap导航条不跳转的问题
-
学院
第3章 入门程序、常量、变量
第3章 入门程序、常量、变量
-
博客
信息学奥赛一本通 1115:直方图 | OpenJudge NOI 1.9 09
信息学奥赛一本通 1115:直方图 | OpenJudge NOI 1.9 09
-
下载
dt-blob.bin
dt-blob.bin
-
下载
日本卡通足球网页模板
日本卡通足球网页模板
-
博客
2021.1.20寒假打卡Day16
2021.1.20寒假打卡Day16
-
博客
jquery ui和easyui的区别是什么?
jquery ui和easyui的区别是什么?
-
下载
单片机与PC机串口多机通信.zip
单片机与PC机串口多机通信.zip
-
下载
mac_navicat_mongodb.zip
mac_navicat_mongodb.zip
-
下载
在线讲座视频网页模板
在线讲座视频网页模板
-
下载
网上鲜花网店网页模板
网上鲜花网店网页模板
-
博客
soul源码学习(七)-zookeeper数据同步
soul源码学习(七)-zookeeper数据同步
-
博客
用php的定界符EOT需要留个心眼
用php的定界符EOT需要留个心眼
-
学院
android笔试面试和实战课程
android笔试面试和实战课程
-
下载
韩国某官方教育网站模板
韩国某官方教育网站模板
-
学院
【数据分析-随到随学】数据分析建模和预测
【数据分析-随到随学】数据分析建模和预测
-
学院
JavaEE框架(Maven+SSM)全程实战开发教程(源码+讲义)
JavaEE框架(Maven+SSM)全程实战开发教程(源码+讲义)
-
学院
RabbitMQ消息中间件实战(附讲义和源码)
RabbitMQ消息中间件实战(附讲义和源码)
-
博客
2021.1.21寒假打卡Day17
2021.1.21寒假打卡Day17
-
下载
UNIX 分时系统.pdf
UNIX 分时系统.pdf
-
博客
MySql的初学习 -- 第六章 -- 了解事务
MySql的初学习 -- 第六章 -- 了解事务
-
博客
尚硅谷Spark学习(1)P1-P7
尚硅谷Spark学习(1)P1-P7