锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

最新的MSP430普通IO模拟IIC程序!

时间:2024-05-26 09:07:11

#include #include #include #include //------------------------------------------#define IicWpDirOut           P6DIR |=  BIT5#define IicWpLow              P6OUT &=~ BIT5           #define IicWpHig              P6OUT |=  BIT5#define IicSclDirOut          P6DIR |=  BIT6#define IicSclLow             P6OUT &=~ BIT6            #define IicSclHig             P6OUT |=  BIT6#define IicSdaDirOut          P6OUT &= ~BIT7#define IicSdaLow             P6DIR |=  BIT7            #define IicSdaHig             P6DIR &=~ BIT7#define IicSdaInSt            P6IN  &   BIT7bool AckErr;//------------------------------ *** - 时间延时 - *** ------------------------------//void Delay(unsigned int count){   unsigned int i;   _NOP();   _NOP();   for(i=count; i>0; i--);}void IIcDelay(void){   _NOP();}//-----***-IIC初始化-***-----//void IicInit(void){IicWpDirOut;IicSdaDirOut;IicSclDirOut;IicWpHig;IicSdaHig;IicSclHig;}//-----***-IIC启示-***-----//void IicStart(void)                 {      IicSdaHig;//IicSda=1;      IIcDelay();      IicSclHig;//IicScl=1;      IIcDelay();      IicSdaLow;//IicSda=0;      IIcDelay();      IicSclLow;//IicScl=0;      IIcDelay();}//-----***-IIC停止-***-----//void IicStop(void)                 {      IicSdaLow;//IicSda=0;      IIcDelay();      IicSclHig;//IicScl=1;      IIcDelay();      IicSdaHig;//IicSda=1;      IIcDelay();}//-----***-IIC应答-***-----//void SendAcknowledge(bool ack)               {      IicSdaDirOut;      if(ack)//IicSda=ack;      {              IicSdaHig;      }      else      {              IicSdaLow;      }      IIcDelay();      IicSclHig;//IicScl=1;      IIcDelay();      IicSclLow;//IicScl=0;      IIcDelay();}            //-----***-从slave端读取一个数据-***-----//unsigned char IicReceiveByte(void){      unsigned char i;      unsigned char bytedata=0;            IicSdaDirOut;      IicSdaHig;//IicSda=1;      for(i=0;i<8;i++)      {          IicSclHig;//IicScl=1;          IIcDelay();          bytedata<<=1;          if(IicSdaInSt)          {                  bytedata |=0x01;          }          else          {                  bytedata &=0xfe;          }          IicSclLow;//IicScl=0;          IIcDelay();      }      IicSdaDirOut;      return bytedata;}//-----***-传送一个 Byte 数据到 slave-***-----//void IicSentByte(unsigned char DataByte)               {    unsigned char i;    for(i=0;i<8;i++)    {        if(DataByte & 0x80)     {      IicSdaHig;//IicSda=1;     }     else     {      IicSdaLow;//IicSda=0;     }     DataByte <<=1;     IIcDelay();     IicSclHig;//IicScl=1;     IIcDelay();     IicSclLow;//IicScl=0;     IIcDelay();    }    IicSdaHig;//IicSda=1;-----Y------D---IicSdaDirIn    IIcDelay();    IicSclHig;//IicScl=1;    IIcDelay();    IicSclLow;//IicScl=0;    IIcDelay();}//-----***-无扇区读---多字节-***-----////读取指定器件无扇区指定地址多字节数据到指定地址//Device=器件地址---单字节//DataAdd=字节地址---单字节void IicMuchByteRead(unsigned char DataAdd,unsigned char *DataDptr,unsigned char DataLend){    unsigned char i;    _DINT();    WDT();    IicInit();    IicStart();    IicSentByte(0xa0);    IicSentByte(DataAdd);    IicStart();    IicSentByte(0xa1);    for(i=DataLend-1;i>0;i--)    {          *DataDptr=IicReceiveByte();          DataDptr++;       SendAcknowledge(0);    }    *DataDptr=IicReceiveByte();    SendAcknowledge(1);    IicStop();    WDT();    Delay(500);    _EINT();}//-----***-无扇区写---多字节-***-----////写入指定器件无扇区指定地址中的多字节数据//Device=器件地址---单字节//DataAdd=字节地址---双字节//DataByte=被存放数据的地址//DataLend=被存放数据的长度void IicMuchByteWrite(unsigned char DataAdd,unsigned char *DataDptr,unsigned char DataLend){    unsigned char i;    _DINT();    WDT();    IicInit();    IicWpLow;    IicStart();    IicSentByte(0xa0);    IicSentByte(DataAdd);    for(i=DataLend;i>0;i--)    {        IicSentByte(*DataDptr);        DataDptr++;       }    IicStop();    WDT();    Delay(3500);    IicWpHig;    _EINT();}//---特别说明//---利用430芯片来模拟IIC,是不能够把SDA设置为输出模式而是//---设置为输入,然后利用方向控制器来输出高或者低//---如下:#define IicSdaDirOut          P6OUT &= ~BIT7#define IicSdaLow             P6DIR |=  BIT7            #define IicSdaHig             P6DIR &=~ BIT7#define IicSdaInSt            P6IN  &   BIT7

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章