iic.h

来自「基于msp430的一个系统运用系统函数kernel」· C头文件 代码 · 共 75 行

H
75
字号
#include"kind.h"
#define IIC_add1 0x48 //the first iic device address
#define IIC_add2 0x49  //the second iic device address
uchar bytectr=0;
uchar flag=0;
uchar dev1;
long wendu;
unsigned long shishu,shishu_inner,shishu_outer;
int IIC_test(uchar dev); 
/*
dev: 0:the outer sense
     1:the inner sense
return wendu
*/
int IIC_test(uchar dev)
{
  dev1=dev;
  shishu=0;
  uchar IIC_add;
  if(dev==0)
  {
    IIC_add=IIC_add1;
  }
  else
  {
    IIC_add=IIC_add2;
  }
  P3SEL|=0X06;
  //ta=IIC_add1<<1+1;
  UCB0CTL1|=UCSWRST; //INIT ALL REGESIT AND PORT 
  UCB0CTL0=UCMODE1+UCMODE0+UCSYNC+UCMST;//USCI MODE SELECT,IIC MODE
 // UCB0CTL0&=~
  UCB0CTL0&=~UCSLA10;//SLAVE ADDRESS WITH 7BIT 
  UCB0CTL1=UCSSEL_2+UCSWRST;
  UCB0BR0=11;
  UCB0BR1=0;
  UCB0I2CSA=IIC_add;     
  UCB0CTL1 &=~UCSWRST; //SOFTWARE RESET,RELEASE
  UCB0I2CIE|=UCNACKIE;
  IE2|=UCB0RXIE;
  _EINT(); //open all interrupt
  UCB0CTL1&=~UCTR;
  UCB0CTL1|=UCTXSTT;//START
  return shishu;
}
/*
the function of the interrupt
*/
#pragma vector=USCIAB0TX_VECTOR
__interrupt void USCIAB0RX_ISR()
{
    //while((IFG2&UCB0RXIFG));
    if(bytectr==1)
    {
      UCB0CTL1|=UCTXSTP;
      wendu|=UCB0RXBUF>>4;
      UCB0CTL1|=UCTXSTP;
     // if(dev1==0)
     shishu_outer=wendu*100/1600;
     // else
      //  shishu_inner=wendu*100/1600;
    }
    else
    {
      wendu=UCB0RXBUF<<4;
      bytectr++;
    }
  
}

void iic_run()
{
  IIC_test(1);
  IIC_test(0);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?