1754|1

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

msp430g2533之iic(gpio模拟iic) [复制链接]

#include
#include
#define SCL       BIT6;
#define SDA       BIT7;
#define uchar unsigned char
#define uint unsigned int


volatile int j;
void UART0_send_byte(unsigned char data)
{
for( j=10000;j>0;j--);
UCA0TXBUF=data;
}


void UART0_send_str(char *s)
{
    while(*s != '\0')
    {
        UART0_send_byte(*s++);
    }
}
void UART0()
{
DCOCTL = 0;                               // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
DCOCTL = CALDCO_1MHZ;
P1SEL |= BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
P1SEL2 |= BIT1 + BIT2 ;                    // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2;                     // SMCLK
UCA0BR0 = 104;                            // 1MHz 9600
UCA0BR1 = 0;                              // 1MHz 9600
UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**


}
uchar R_word;
uchar ACK_Flag;
uchar read_buffer_iic[16] = {0};
uchar write_buffer_iic[16] = {0};


void delay(uint v)
    {
        while(v!=0)
     v--;
    }
void Start(void)
    {
      P1OUT &= ~SCL ;
      P1OUT &= ~SDA ;
      P1DIR &= ~SDA ;
      P1DIR &= ~SCL ; delay(6);
      P1DIR |= SDA ; delay(6);
      P1DIR |= SCL ;
    }


void Stop(void)
    {
      P1DIR |= SDA;
      P1DIR &= ~SCL;
      delay(6);
      P1DIR &= ~SDA;
           P1DIR |= SDA;
P1DIR |= SCL;
    }


void Send_Byte(uchar Byte)
    {
      uint i;
      for (i=0;i<8;i++)
      {
        if(Byte & 0x80)
              {P1DIR &= ~SDA;}
        else
              {P1DIR |= SDA; }
        P1DIR &= ~SCL ;  delay(3) ;
        Byte = Byte << 1;
        P1DIR |= SCL ;   delay(3) ;
      }
    }


void ACK(void)
    {
      P1DIR &= ~SDA;
      P1DIR &= ~SCL;
      ACK_Flag = 0;
      delay(6);
      if ((P1IN & BIT7))
           ACK_Flag = 1;
P1DIR |= SCL;
      delay(3);
    }






void ACK_0(void)
    {
      P1DIR |= SCL;
      P1DIR |= SDA;
      delay(6);
      P1DIR &= ~SCL;
      P1DIR |= SCL;
      delay(6);
    }


void NOACK(void)
    {
      P1DIR &= ~SDA;      delay(6);
      P1DIR &= ~SCL;      delay(6);
      P1DIR |= SCL;       delay(6);
      P1DIR |= SDA;
    }


void Receive_Byte(void)
    {
      uint j;
      R_word = 0x00;
      P1DIR &= ~SDA;
      for(j=0;j<8;j++)
      {
        R_word = R_word << 1;
P1DIR &= ~SCL;  delay(3);
        if((P1IN & BIT7 ) ==  BIT7 )
       R_word ++ ;
P1DIR |= SCL; delay(1);
       }


    }


void  I2C_101_write(uchar W_addr,uchar dat)
    {
        Start();
        delay(20);
        Send_Byte(0x48);          //write a byte :slave device
        ACK();
        Send_Byte(W_addr);    // write a byte :e2prom address
        ACK();
        Send_Byte(dat);
        ACK();
        Stop();
        delay(800);
    }




void I2C_101_Read(uint R_addr,uchar n)
    {
       uchar i=0;
        Start();
        Send_Byte(0x90);
        ACK();
        Send_Byte(R_addr);
        ACK();
        Start();
        Send_Byte(0x91);
        ACK();
        for(i=0;i
              {
              Receive_Byte();
             ACK_0();


              read_buffer_iic = R_word ;
              }
        Receive_Byte();
        ACK_0(); //NOACK();
        read_buffer_iic = R_word ;
        Stop();
    }




uint t;
void main(void)
{float t;
float tem;
char buf[10];
   WDTCTL = WDTPW + WDTHOLD;


   I2C_101_write(0x01,0x00) ;
   UART0();
   while(1)
   {
       I2C_101_Read(0,2) ;
       t= read_buffer_iic[0]*100 + (uint)(read_buffer_iic[1]*0.0625*0.0625*100);
       tem =  t/100;
       sprintf(buf," %8.4f\n",tem);
       UART0_send_str(buf);


   }
}

最新回复

贴一段代码是什么意思? 什么问题,什么现象,你自己思考了哪些东西? 从昨天到今天,浏览的人应该不少,为什么没人回复,值得你思考思考  详情 回复 发表于 2016-9-1 17:06
 
点赞 关注(2)

回复
举报

977

帖子

4

TA的资源

纯净的硅(中级)

沙发
 

贴一段代码是什么意思?
什么问题,什么现象,你自己思考了哪些东西?
从昨天到今天,浏览的人应该不少,为什么没人回复,值得你思考思考
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表