MSP430F249IIC

发布者:快乐旅行最新更新时间:2017-11-25 来源: eefocus关键字:MSP430F249  IIC 手机看文章 扫描二维码
随时随地手机看文章

/******************************************************************
**                                                       
**  File: IIC.c     | IIC Communication |                                    
**  Version: 1.0     
**  Description : 430 WRITE AND READ 24C02  VIA IIC BUS                                                                     
**  Author: LightWu                              
**  Date: 2013-4-11                                                       
**                                                   
*******************************************************************/

#include


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


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


unsigned char pHeadR;
unsigned char pTailR;


unsigned char TXByteCtr;
const unsigned char TxData[] =              // Table of data to transmit
{
  0x01,
  0x02,
  0x03,
  0x04,
  0x05
};
unsigned char RxData[] ;


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
  IE2 |= UCB0RXIE; 


}
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


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


   while (UCB0CTL1 & UCTXSTP);             // Ensure stop condition got sent 
 
    UCB0CTL1 &= ~UCTR;
    UCB0CTL1 |= UCTXSTT; 
   
    __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] = 1;
      PTxData[1] = 'M';
      PTxData[2] = 3;
      PTxData[3] = 4;
      PTxData[4] = 5;
      pTail = 2;
      
      IICSend();
        
      UartSend('B');
      
      //////////////////////
      
      pHeadR = 0; 
      pTailR = 3;
      IICRecv();
      
      UartSend(RxData[0]);
      UartSend(RxData[1]);
      UartSend(RxData[2]);
      
      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,if write finish
    IFG2 &= ~UCB0TXIFG;                     // Clear USCI_B0 TX int flag
    __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
  
  }
}


#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCIAB0RX_ISR(void)
{
    
  if ( pHeadR < pTailR )                            // Check TX byte counter
  {


      RxData[ pHeadR++ ] = UCB0RXBUF;                   // Move RX data to address PRxData
  
  }
  else
  {  
      pHeadR = 0; 
      
      UCB0CTL1 |= UCTXSTP;                    // I2C stop condition
      IFG2 &= ~UCB0RXIFG;                     // Clear USCI_B0 RX int flag
      __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
      
  }


}


关键字:MSP430F249  IIC 引用地址:MSP430F249IIC

上一篇:MSP430F249 IIC write and Uart send
下一篇:MSP430F249UART

推荐阅读最新更新时间:2024-03-16 15:46

MSP430F249外部中断P1.3口
/****************************************************************** ** ** File : DExternInterrupt.c | Interrupt | ** Version : 1.0 ** Description : Extern Interrupt ** Author : LightWu ** Date : 2013-4-16
[单片机]
基于stm32f103zet6的IIC学习
一、先简单了解下所为的IIC协议: IIC(Inter -Integrated Circuit) 总线是一种由PHILIPS 公司开发的两线式串行总线,用于连接 微控制器及其外围设备。它是由数据线 SDA 和时钟SCL 构成的串行总线,可发送和接收数据。 在CPU与被控IC之间、IC 与IC之间进行双向传送,高速IIC 总线一般可达400kbps 以上。 I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。 开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。 结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC 在接收到
[单片机]
基于stm32f103zet6的<font color='red'>IIC</font>学习
中广移动IIC上展示CMMB最新进展
中广移动卫星广播公司携主流芯片厂商南下深圳,在IIC上刮起一阵CMMB热潮,也为年后有些稍冷的CMMB市场注入一股强大的暖流。他们来得可谓正是时候。 “2009年12月全国337个地市级以上城市做到基本覆盖;目前已完成158个城市的覆盖。”中广移动副总经理刘廷军在其主题演讲中表示,“目前已在全国119个城市开通了CMMB信号,覆盖了约1亿人口。”他接着表示,2010年12月,这337城市将能做到良好覆盖;2011年12月,337个地市级以上城市和百强县能做到优质覆盖,“到时将覆盖5亿以上城市常住人口。” 刘廷军为在座的中国厂商画了一个大大的饼,虽然目前仍有一些画饼充饥的感觉。但保守估计2009年1000万台的
[手机便携]
SPI IIC USART 区别
第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上: SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现 多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
[单片机]
实验5 IIC通讯与AD/接DA接口
1.利用单片机控制PCF8591的AD转换,控制AD0和AD1电位器,在数码光上显示DA转换的值。 2.利用单片机控制PCF8591的DA转换,让发光二极管D1由暗到亮变化,整个过程时间差不多2s左右,再由亮到暗变化,循环变化。 以下代码将1、2实验合并成一个实验。 Lab6.1 #include reg51.h #include I2C.H #define PCF8591 0x90 //PCF8591 地址 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //=========全局变量区===
[单片机]
实验5 <font color='red'>IIC</font>通讯与AD/接DA接口
stm32专题三十:12864 IIC驱动
1 IIC发送数据 / 命令时序 2 12864 图形显示(显存) RAM的大小是128×64位,RAM分为8页,从PAGE0到PAGE7,用于单色128x64点阵显示。 3 行列设置 1 设置起始行坐标(设置页) 命令 0XB0 ~ 0XB7 用于设置分页,所以我们显示的分页要 + 偏移(0XB0) 2 设置起始列坐标 4 制作字模 1 字模软件设置方式: 2 生成的字模的批处理: 生成的字模如图所示,我们要转成 0X00 这种格式: 使用 sublime 这个软件,可以进行批处理(先全选,然后再 快捷键 Ctrl + Shift + L): 字模生成完毕。 驱动程序如下所示
[单片机]
stm32专题三十:12864 <font color='red'>IIC</font>驱动
51单片机利用IIC总线对LM75A温度进行读取
#include INTRINS.H #include ..\config\c8051f350.h #include ..\config\const.h #include ..\driver\system.h #include ..\driver\other.h #define IIC_WRITE 0 #define IIC_READ 1 #define VREF 24380 static unsigned long sysclk=24500000; sbit SDA=P0^0; sbit SCL=P0^1; sbit led=P1^2; void Delay_us(unsigned int times){ unsigned i
[单片机]
51单片机之IIC&EEPROM的驱动程序
#include #include ./delay/delay.h sbit SCL = P2^0; sbit SDA = P2^1; bit ack = 0; unsigned char flag = 1; #define LCDPORT P0 #define LCD_WRITE_DATA 1 #define LCD_WRITE_COM 0 sbit RS = P2^4; sbit RW = P2^5; sbit E = P2^6; #define SUCC 0 #define ERR 1 void iic_start() { SDA = 1; //先操作SDA,在操作SCL SCL = 1; dela
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved