久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 請教AD7150+MSP430G2553單片機i2C通訊問題該如何編碼? [打印本頁]

作者: Justin_Tsao    時間: 2015-3-16 14:13
標題: 請教AD7150+MSP430G2553單片機i2C通訊問題該如何編碼?
想做一個簡單的 微電容位移傳感器  采用AD7150 來獲得電容值
AD7150 是I2C傳送數據,因為想做的簡單,就用MSP430G2553單片機做主控,模擬I2C通信方式,來獲取輸入
程式語言部分該如何編碼?

底下是我參考open source
msp430g2xx3_uscib0_i2c_12.c
進行修改  
但不了解各個狀態要如何設定 (寄存器位址等)?
請各位大大協助


#include  
#include "msp430g2553.h"

#define NUM_BYTES_TX 1                         // How many bytes?
#define NUM_BYTES_RX 1

int RXByteCtr, RPT_Flag = 0;                // enables repeated start when 1
volatile unsigned char RxBuffer[128];       // Allocate 128 byte of RAM
unsigned char *PTxData;                     // Pointer to TX data
unsigned char *PRxData;                     // Pointer to RX data
unsigned char TXByteCtr, RX = 0;
unsigned char MSData = 0x55;
unsigned int RxWord;
unsigned int RxByteCtr;
unsigned char i;
float        pFdata;
float        chRange;


void Setup_TX(void);
void Setup_RX(void);
void Transmit(void);
void Receive(void);
float AD7150_Cap(void);


void main(void)
{
WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1SEL |= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0
  P1SEL2|= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0

  while(1){

  //Transmit process
  Setup_TX();
  RPT_Flag = 1;
  Transmit();
  while (UCB0CTL1 & UCTXSTP);             // Ensure stop condition got sent

  //Receive process
  Setup_RX();
  Receive();
  while (UCB0CTL1 & UCTXSTP);             // Ensure stop condition got sent
  }
}
//-------------------------------------------------------------------------------
// The USCI_B0 data ISR is used to move received data from the I2C slave
// to the MSP430 memory. It is structured such that it can be used to receive
// any 2+ number of bytes by pre-loading RXByteCtr with the byte count.
//-------------------------------------------------------------------------------
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
  if(RX == 1){                              // Master Recieve?
  RXByteCtr--;                              // Decrement RX byte counter
  if (RXByteCtr)
  {
    *PRxData++ = UCB0RXBUF;                 // Move RX data to address PRxData
  }
  else
  {
    if(RPT_Flag == 0)
        UCB0CTL1 |= UCTXSTP;                // No Repeated Start: stop condition
      if(RPT_Flag == 1){                    // if Repeated Start: do nothing
        RPT_Flag = 0;
      }
    *PRxData = UCB0RXBUF;                   // Move final RX data to PRxData


    __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
  }}

  else{                                     // Master Transmit
      if (TXByteCtr)                        // Check TX byte counter
  {
    UCB0TXBUF = MSData++;                   // Load TX buffer
    TXByteCtr--;                            // Decrement TX byte counter
  }
  else
  {
    if(RPT_Flag == 1){
    RPT_Flag = 0;
    PTxData = &MSData;                      // TX array start address
    TXByteCtr = NUM_BYTES_TX;                  // Load TX byte counter
    __bic_SR_register_on_exit(CPUOFF);
    }
    else{
    UCB0CTL1 |= UCTXSTP;                    // I2C stop condition
    IFG2 &= ~UCB0TXIFG;                     // Clear USCI_B0 TX int flag
    __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
    }
  }
}

}
void Setup_TX(void){
  _DINT();
  RX = 0;
  IE2 &= ~UCB0RXIE;
  while (UCB0CTL1 & UCTXSTP);               // Ensure stop condition got sent// Disable RX interrupt
  UCB0CTL1 |= UCSWRST;                      // Enable SW reset
  UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;     // I2C Master, synchronous mode
  UCB0CTL1 = UCSSEL_2 + UCSWRST;            // Use SMCLK, keep SW reset
  UCB0BR0 = 12;                             // fSCL = SMCLK/12 = ~100kHz
  UCB0BR1 = 0;
  UCB0I2CSA = 0x48;                         // Slave Address is 048h
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
  IE2 |= UCB0TXIE;                          // Enable TX interrupt
}
void Setup_RX(void){
  _DINT();
  RX = 1;
  IE2 &= ~UCB0TXIE;
  UCB0CTL1 |= UCSWRST;                      // Enable SW reset
  UCB0CTL0

作者: sunmj111    時間: 2022-4-24 15:24
您的問題解決了嗎?





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 看一级毛片视频 | 欧美日韩成人影院 | 午夜视频在线播放 | 97avcc| 中文字幕加勒比 | 久久国产精品久久国产精品 | 国产区一区 | 国产乱码久久久 | 一级毛片在线播放 | 亚洲视频三区 | 亚洲网在线 | 精品亚洲视频在线 | 国产精品久久久久久影视 | 久久久不卡网国产精品一区 | 国产精品亚洲综合 | 欧美日韩国产中文 | 久久综合九九 | 国色天香综合网 | 国产亚洲精品久久久久久牛牛 | 天天天操 | 成人在线一区二区 | 国产一区二区成人 | 国产良家自拍 | 九九热精品在线视频 | 婷婷久久五月 | www国产亚洲精品久久网站 | 97精品国产97久久久久久免费 | 欧美在线观看一区 | 午夜精品久久久久久久久久久久 | 精品1区 | 久久免费精品视频 | 国产精品视频网站 | 欧美在线一级 | 欧美日韩视频网站 | 国产最新网址 | 国产在线看片 | 夜夜草视频 | 欧美专区在线 | 免费久草 | 美女视频网站久久 | 精品精品视频 |