基于MSP430单片机的虚拟I2C总线软件包VIICM10_第1页
基于MSP430单片机的虚拟I2C总线软件包VIICM10_第2页
基于MSP430单片机的虚拟I2C总线软件包VIICM10_第3页
基于MSP430单片机的虚拟I2C总线软件包VIICM10_第4页
基于MSP430单片机的虚拟I2C总线软件包VIICM10_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、VIIC_M1.0软件包的组成根据归一化设计的要求,主方式下虚拟I2CC总线由下列10个子程序组成:1、时序模拟子程序4个I2C_sta,I2C _stop,I2C _mack ,I2C _mnack 2、操作模拟子程序3个I2C_ackn,I2C _wr_byte,I2C _rd_byte3、数据读写子程序3个I2C_wr_nbyte,I2C _rd_nbyte,I2C_wr_addr二、应用对象1、MSP430单片机MSP430单片机为低功耗的16位单片机,有MSP430X11、MSP430X112、MSP430X1101、MSP430X13X、MSP430X14X、MSP430X31

2、X/32X/33X、MSP430X41X等型号,每种芯片都有丰富的I/O端口。本设计采用芯片为MSP430E325(1)虚拟I2C总线所使用的I/O端口数据线(SDA)使用的是通用端口P0中的P0.7,该端口为输入/输出双向口,有输入寄存器(P0IN)、输出寄存器(P0OUT)及方向寄存器(P0DIR)等寄存器,通过字节指令访问。时钟线(SCL)使用的是通用定时器/端口TP中的TP.1,该端口为输出口,有定时器/端口控制寄存器(TPCTL)、定时器/端口数据寄存器(TPD)及定时器/端口允许寄存器(TPE)等,通过字节指令访问。(2)运行时所使用的时钟频率MSP430E325运行时用两个时钟:

3、辅助时钟(ACLK)和主时钟(MCLK)。当采用32768KHz的晶体振荡器,并且系统时钟控制寄存器采用缺省值时,主时钟的频率为1.049MHz。若主时钟的频率不是1.049MHz,请适当调整程序中nop的个数。2、EEPROM器件(1)EEPROM器件本例使用的EEPROM器件为24LC65(MICROCHIP)。24LC65容量为8KB,其中的字节地址为13位,分两个字节:SUBADDR_H为高5位地址 SUBADDR_L为低8位地址;24LC65的封装引脚如图1所示:(2)24LC65的数据格式A、当前地址写:S,SLA+W,A,DATA1,A,DTA2,A.,DATAn,A,PB、当前

4、地址读:S,SLA+R,A,DATA1,A,DTA2,A.,DATAn,/A,PC、指定地址写:S,SLA+W,A,subaddr_H,A,subaddr_L,A,DATA1,A,DATA2,A,.,DATAn,A,PD、指定地址读:S,SLA+R,A,subaddr_H,A,subaddr_L,A,DATA1,A,DATA2,A,.,DATAn,/A,P其中:SLA+W,SLA+R,subaddr_H,subaddr_L为主控器件发出的数据S,A,/A,P为主控器件发出的信息DATA1,DATA2,.,DATAn为被控器件发给主控器件的数据A 为被控器件发给主控器件的信息(3)24LC65与

5、MSP430-325的连接如图2所示图一图二三、应用界面1、发送N字节数据从当前地址开始;发送的数据在MTD中;数列格式:S,SLA+W,subaddr_H,A,subaddr_L,A,DATA1,A,DATA2,A.,DATAn,A,P;MOV.b #CODE,SLA;I2C_R_R/W=0;A0=A1=A2=0MOV.b #N,Num_byt;发送字节数CALL I2C_WR_Nbyte;从当前地址开始写2、接收N字节数据从指定地址开始读;接收的数据在MRD中;数列格式:S,SLA+W,A,subaddr_H,A,subaddr_L,A,S,SLA+R,A,DATA1,A,DATA2,A,

6、.,DATAn,/A,PMOV.b #CODE+SLAR/W,SLA;SLAR/W=1,A0=A1=A2=0MOV.b #N,Num_byt ;接收字节数CALL #I2C_RD_Nbyte ;从当前地址开始读3、接收N字节从指定地址开始读;接收的数据存放在MRD中 ;数列格式:S,SLA+W,A,subaddr_H,A,subaddr_L,A,;S,SLA+R,A,DATA1,A,DATA2,A,.,DATAn,/A,P;MOV.b #CODE,SLA;SLAR/W=0:写,A0=A1=A2=0MOV.b #N,Num_byt ;接收字节数MOV #Subaddr,I2C_R_Addr ;字

7、节地址送入暂存单元CALL #I2C_R_Addr ;发送字节地址MOV.b #CODE+SLAR/W,SLA;SLAR/W=1:读,A0=A1=A2=0CALL #I2C_RD_Nbyte4、发送N字节从指定地址开始写;数列格式:S,SLA+W,A,Subaddr_H,A,subaddr_L,A,DATA1,A,DATA2,A,.,DATAn,A,P;MOV.b #CODE,SLA;SLAR/W=0:写,A0=A1=A2=0MOV #N,Num_byt ;发送字节数MOV #Subaddr,I2C_R_Addr ;字节地址送入暂存单元CALL #I2C_WR_Addr ;发送字节地址CALL

8、 #WR_Nbyte后记:1、如果使用MSP430中别的I/O端口,只需要在模拟时序子程序中改动相应的积存器即可。本例中时钟线使用TP口,是因为它为输出口,在程序中可以节省指令。对于24系列的其他芯片,由于容量不同,请特别注意其字节地址是1个字节还是2个字节。本例的24LC65字节地址就是2个字节的。2、MSP430系列的单片机本人是初学使用,程序虽经初步调试通过,轻易抛出,主意在为引玉之砖,作为学习的一点体会。缺点和错误在所难免,望各位不吝指教。 I2C总线软件包程序清单 下载通用MSP430I2C程序(清风徐徐)/=/通用MSP430I2C程序/收藏:清风徐徐/QQ:78779514/EM

9、AIL:XSL88888TOM.com/2004.2.4/=/#include MSP430x14x.h/P3.2SCL/P3.3SDA#define SDA_1P3OUT |=BIT3/SDA = 1#define SDA_0P3OUT &= BIT3/SDA = 0#define SCL_1P3OUT |=BIT2/SCL = 1#define SCL_0P3OUT &= BIT2/SCL = 0#define DIR_INP3DIR &= BIT3;SDA_1/I/O口为输入#define DIR_OUTP3DIR |=BIT3/I/0口为输出#define SDA_IN(P3IN 3)

10、 & 0x01)/Read SDAunsigned int a50;static void Delay(unsigned int n)unsigned int i;for (i=0; in; i+) ;void Init(void)SCL_1;Delay(5);SDA_1;Delay(5);void Start(void)SDA_1;Delay(5);SCL_1;Delay(5);SDA_0;Delay(5);SCL_0;Delay(5);void Stop(void)SDA_0;Delay(5);SCL_1;Delay(5);SDA_1;Delay(5);void WriteByte(uns

11、igned char WriteData)unsigned char i;for (i=0; i 7) & 0x01) = 0x01)SDA_1;elseSDA_0;Delay(5);SCL_1;WriteData = WriteData 1;Delay(5);SCL_0;SDA_1;Delay(5);Delay(5);unsigned char ReadByte(void)unsigned char i;unsigned char TempBit= 0;unsigned char TempData = 0;SCL_0;Delay(5);SDA_1;for (i=0; i8; i+)Delay

12、(5);SCL_1;Delay(5);DIR_IN;if (SDA_IN = 0x01 /*sda=1*/)TempBit = 1;elseTempBit = 0;DIR_OUT;TempData = (TempData 1) | TempBit;SCL_0;Delay(5);return(TempData);void ReceiveAck(void)unsigned char i = 0;SCL_1;Delay(5);DIR_IN;while (SDA_IN = 0x01 /*sda=1*/) & (i 255)/*调试方便,可以不要*/)i+;DIR_OUT;SCL_0;Delay(5);

13、void Acknowledge(void)SCL_0;Delay(5);DIR_OUT;SDA_0;SCL_1;Delay(5);SCL_0;unsigned int ReadWord(unsigned char unit/*address*/)unsigned char HighData = 0;unsigned char LowData= 0;unsigned intTempData = 0;Start();WriteByte(0xa0);ReceiveAck();WriteByte(unit);ReceiveAck();Start();WriteByte(0xa1);ReceiveAc

14、k();LowData= ReadByte();Acknowledge();HighData = ReadByte();Stop();TempData = (HighData 8) + LowData;Delay(1000);return(TempData);void ReadWords(unsigned char unit/*address*/)unsigned char i;unsigned char HighData = 0;unsigned char LowData= 0;unsigned intTempData = 0;Start();WriteByte(0xa0);ReceiveAck();WriteByte(unit);ReceiveAck();Start();WriteByte(0xa1);ReceiveAck();for (i=0; i49; i+)LowData= ReadByte();Acknowledge();HighData = ReadByte();Acknowledge();ai= (HighData 8) + LowData;Lo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论