MSP430F249 IIC write and Uart send

//******************************************************************************/
#include <msp430.h>


//注意:两次发送间隔必须要有延时,否则不能再次发送,串口发送格式:


unsigned char PTxData[250];                     // Pointer to TX data
unsigned char pHead;
unsigned char pTail;


unsigned char TXByteCtr;
const unsigned char TxData[] =              // Table of data to transmit
{
  0x01,
  0x02,
  0x03,
  0x04,
  0x05
};
void UartInit(void)
{
  if (CALBC1_1MHZ==0xFF) // If calibration constant erased
  {
    while(1);                               // do not load, trap CPU!!
  } 
  DCOCTL = 0;                               // Select lowest DCOx and MODx settings
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P3SEL |= 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 104;                            // 1MHz 9600; (104)decimal = 0x068h
  UCA0BR1 = 0;                              // 1MHz 9600
  UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
}
void UartSend( unsigned char Data )
{
      UCA0TXBUF = Data;                    // TX -> RXed character
      while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?,发送缓冲区空
 
}
void IICInit(void)
{
  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 = 0xA0>>1;                         // Slave Address is ,注意地址需要右移一位,24C02地址为0XA0,故要写入0X50
                                            // 7位地址模式,器件会发送一位读写位,正好8位。
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
  IE2 |= UCB0TXIE;                          // Enable TX interrupt


}
void IICSend( void )
{       
    int i;
    
    for(i=3000;i>0;i--);                   //两次发送间隔必须要有延时,否则不能再次发送


    while (UCB0CTL1 & UCTXSTP);             // Ensure stop condition got sent


    UCB0CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition
   
    __bis_SR_register(CPUOFF + GIE);        // Enter LPM0 w/ interrupts


}


int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3SEL |= 0x06;                            // Assign I2C pins to USCI_B0
  
  IICInit();
  
  UartInit();


  while (1)
  {
      UartSend('A');
      
      PTxData[0] = 0;
      PTxData[1] = 2;
      PTxData[2] = 3;
      PTxData[3] = 4;
      PTxData[4] = 5;
      pTail = 5;
      
      IICSend();
        
      PTxData[0] = 0X10;
      PTxData[1] = 2;
      PTxData[2] = 3;
      PTxData[3] = 4;
      PTxData[4] = 5;
      pTail = 5;


      IICSend();
      
      PTxData[0] = 0x20;
      PTxData[1] = 2;
      PTxData[2] = 3;
      PTxData[3] = 4;
      PTxData[4] = 5;
      pTail = 5;
      
      IICSend();
        
      PTxData[0] = 0X30;
      PTxData[1] = 2;
      PTxData[2] = 3;
      PTxData[3] = 4;
      PTxData[4] = 5;
      pTail = 5;


      IICSend();
      
      while(1);


  }
}


//------------------------------------------------------------------------------
// The USCIAB0TX_ISR is structured such that it can be used to transmit any
// number of bytes by pre-loading TXByteCtr with the byte count. Also, TXData
// points to the next byte to transmit.
//------------------------------------------------------------------------------
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
  if ( pHead < pTail )                            // Check TX byte counter
  {


      UCB0TXBUF = PTxData [pHead++ ];                 // Load TX buffer
        
  }
  else
  {
     pHead = 0; 
      
    UCB0CTL1 |= UCTXSTP;                    // I2C stop condition
    IFG2 &= ~UCB0TXIFG;                     // Clear USCI_B0 TX int flag
    __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
       
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MSP430f249单片机文档资料+软件DEMO程序50例程合集: MSP430f249 用户手册.pdf msp430x24x_1 msp430x24x_1_vlo msp430x24x_adc12_01 msp430x24x_adc12_02 msp430x24x_adc12_03 msp430x24x_clks msp430x24x_compA_01 msp430x24x_compA_02 msp430x24x_compA_04 msp430x24x_compA_05 msp430x24x_dco_flashcal msp430x24x_flashwrite_01 msp430x24x_flashwrite_02 msp430x24x_flashwrite_03 msp430x24x_fll_01 msp430x24x_fll_02 msp430x24x_hfxt2 msp430x24x_hfxt2_nmi msp430x24x_lpm3 msp430x24x_lpm3_vlo msp430x24x_MPY_01 msp430x24x_MPY_02 msp430x24x_nmi msp430x24x_OF_LFXT1 msp430x24x_OF_XT2 msp430x24x_P1_01 msp430x24x_P1_02 msp430x24x_P1_05 msp430x24x_rosc msp430x24x_svs_01 msp430x24x_ta_01 msp430x24x_ta_02 msp430x24x_tb_10 msp430x24x_uscia0_irda_01 msp430x24x_uscia0_irda_02 msp430x24x_uscia0_irda_03 msp430x24x_uscia0_spi_01 msp430x24x_uscia0_uart_01_115k msp430x24x_uscia0_uart_01_115k_lpm msp430x24x_uscia0_uart_01_19200 msp430x24x_uscia0_uart_01_9600 msp430x24x_uscia0_uart_04_9600 msp430x24x_uscia0_uart_05_9600 msp430x24x_uscia0_uart_06_9600 msp430x24x_uscia0_uart_07_9600 msp430x24x_uscia0_uart_08_9600 msp430x24x_uscia1_irda_01 msp430x24x_uscia1_spi_09 msp430x24x_uscia1_spi_10 msp430x24x_uscia1_uart_05_9600 msp430x24x_uscib0_i2c_01 msp430x24x_uscib0_i2c_02 msp430x24x_uscib0_i2c_04 msp430x24x_uscib0_i2c_05 msp430x24x_uscib0_i2c_06 msp430x24x_uscib0_i2c_07 msp430x24x_uscib0_i2c_08 msp430x24x_uscib0_i2c_09 msp430x24x_uscib0_i2c_10 msp430x24x_uscib0_i2c_11 msp430x24x_uscib0_i2c_15 msp430x24x_uscib0_spi_01 msp430x24x_uscib0_spi_02 msp430x24x_uscib0_spi_09 msp430x24x_uscib0_spi_10 msp430x24x_uscib1_i2c_06 msp430x24x_uscib1_i2c_07 msp430x24x_uscib1_spi_09 msp430x24x_uscib1_spi_10 msp430x24x_wdt_01 msp430x24x_wdt_02 msp430x24x_wdt_04 msp430x24x_wdt_05 msp430x24x_wdt_06 MSP430x2xx Family User's Guide.pdf
良心货,有学习MSP430程序的网友拿去,各种例题,源码,可以直接拿来用的例程。 程序目录: MSP430F149+1602数码显示和实时时钟 MSP430F149,IAR,ADC采样之后对太阳点光源进行跟踪 MSP430F149 AD7705程序 MSP430 BH1750测量光强(已测试) Launch Pad NOKIA5110 Clock 使用MSP430单片机控制超声波测距并使用5110显示 基于MSP430的MP3 源码+电路图+PCB+字库+SD卡 基于MSP430单片机控制坦克打靶C语言源程序代码 MSP430F149 GSM基本控制,初始化接收短息,解读短信 ADXL重力加速度传感器实现计步器程序(利用MSP430F135实现) 利用MSP430的PWM功能实现电机的调速(可实现精确调速) TI公司MSP430芯片评估板lantchpad的电容式触摸板的源码 基于MSP430F149单片机的1602程序代码 基于MSP430F149单片机的nRF24L01无线通信程序 基于MSP430F149单片机的串口0驱动程序 基于MSP430F149单片机的温湿度传感器SHT1X驱动程序 基于MSP430F149的12864的显示图片 基于MSP430F149的AD转换,在液晶1602上显示 基于MSP430F149的触摸手写程序 基于MSP430F149为主芯片下的红外线解码资料源程序 基于MSP430F249的GPS+GPRS车载GPS 基于MSP430单片机的电子式互感器采集器的程序 基于MSP430单片机的智能电表 基于MSP430的触摸屏校正程序 基于MSP430的温度传感器DS18B20对温度的检测和显示 基于单片机MSP430的DS1302的时钟芯片编程,实现时钟显示 利用MSP430实现的超低功耗触摸屏 使用MSP430低功耗微处理器制作的斜度计(开发平台是IAR) 通过MSP430(149)单片机控制DHT11温湿度传感器 MSP430F149单片机与RF2401硬件SPI无线通信 MSP430f149控制LCD12864显示汉字、字母 MSP430F149通过SPI接口控制ADS1216 MSP430F449实现频率测量,呼吸灯,自己写的,调试OK MSP430x13x, MSP430F14x, MSP430F15x, MSP430F16x Code Examples MSP430x14x读写FM25L256程序 MSP430x14x模糊逻辑马达控制-源程序,已通过测试 MSP430单片机短息收发程序 MSP430平台 AM2301测量光强(已测试) MSP430热电偶开发程序,高精度测量,带标定 MSP430热电阻开发,高精度测量,带标定,修正 MSP430小车解决方案含Protel和源代码 MSP430与指纹识别

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值