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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4341|回復: 1
打印 上一主題 下一主題
收起左側

請教AD7150+MSP430G2553單片機i2C通訊問題該如何編碼?

[復制鏈接]
跳轉到指定樓層
樓主
ID:74730 發(fā)表于 2015-3-16 14:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
想做一個簡單的 微電容位移傳感器  采用AD7150 來獲得電容值
AD7150 是I2C傳送數(shù)據(jù),因為想做的簡單,就用MSP430G2553單片機做主控,模擬I2C通信方式,來獲取輸入
程式語言部分該如何編碼?

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


#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
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:1021156 發(fā)表于 2022-4-24 15:24 | 只看該作者
您的問題解決了嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 岛国av免费观看 | 九九九久久国产免费 | 欧美日韩中文字幕在线 | 国产欧美日韩精品一区 | 91精品国产乱码久久久久久久 | 电影91久久久 | 狠狠av| 在线色网址 | 国产9999精品| 国产精品美女久久久 | 午夜精品一区二区三区免费视频 | 国产精品久久久久久久久久 | 日韩欧美中文字幕在线观看 | 91在线播 | 欧美一级全黄 | 亚洲天堂一区二区 | 亚洲精品一区二区冲田杏梨 | 午夜欧美| 免费一级欧美在线观看视频 | 免费人成在线观看网站 | 蜜桃臀av一区二区三区 | 亚洲毛片一区二区 | 中文字幕视频在线观看 | 日韩视频国产 | 一区二区在线免费观看 | 亚洲精品一区二区在线观看 | 性一交一乱一透一a级 | 一区二区三区视频 | 久久国产成人 | 性色网站| 请别相信他免费喜剧电影在线观看 | 日韩资源 | 蜜桃视频在线观看www社区 | 欧美中文字幕 | 国产精品我不卡 | 亚洲aⅴ一区二区 | 日韩视频在线一区 | 精久久久 | 国产一区成人 | 亚洲 成人 av| 波多野结衣电影一区 |