MSP430F5529 I2C 程序

发布者:火星最新更新时间:2016-08-17 来源: eefocus关键字:MSP430F5529  I2C 手机看文章 扫描二维码
随时随地手机看文章
MSP430板子到了好久,一直没有时间来写程序,前两天终于有空了,把I2C调试了下,参照TI给的例程,把发送和接收整合到一起。期间中断屏蔽处理的不好,经常进不了中断。网上也没有可参照的例程。只有仔细读了MSP430F55xx的用户手册,才调通。用户手册才是王道呀!

#include
#include "i2c.h"
extern unsigned char RXData,TXData,TXByteCtr,ATXData[2];

void I2C_Init(uint8_t SlaveAddress)
{
P3SEL |= 0x03; // Assign I2C pins to USCI_B0
UCB0CTL1 |= UCSWRST; // Enable SW reset
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST+UCTR; // Use SMCLK
UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz
UCB0BR1 = 0;
UCB0I2CSA = SlaveAddress; // Slave Address is 048h
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
UCB0IE |= UCTXIE+UCRXIE+UCSTPIE;
}
void I2C_WriteReg(unsigned char RegAddr, unsigned char Data) //////////涓婁笅灞侫PI闇?瑕佺敤鍒?
{

TXByteCtr = 2; // Load TX byte counter
ATXData[0]=RegAddr;
ATXData[1]=Data;

while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent
UCB0IE |= UCTXIE;
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupts
__no_operation();
}


uint8_t I2C_ReadByte() //////////涓婁笅灞侫PI闇?瑕佺敤鍒?
{

while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent
UCB0CTL1 &= ~UCTR;
UCB0IE &=~ UCTXIE;
UCB0CTL1 |= UCTXSTT; // I2C start condition

while(UCB0CTL1 & UCTXSTT); // Start condition sent?
UCB0CTL1 |= UCTXSTP;
return RXData;

}


#pragma vector = USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
{
switch(__even_in_range(UCB0IV,12))
{
case 0: break; // Vector 0: No interrupts
case 2: break; // Vector 2: ALIFG
case 4: break; // Vector 4: NACKIFG
case 6: break; // Vector 6: STTIFG
case 8:
UCB0IFG &= ~UCSTPIFG; // Clear stop condition int flag
__bic_SR_register_on_exit(LPM0_bits); // Exit LPM0 if data was transmitted
break; // Vector 8: STPIFG
case 10:
RXData=UCB0RXBUF;
// UCB0CTL1 |= UCTXNACK+UCTXSTP;
UCB0IFG &= ~UCRXIFG;

__bic_SR_register_on_exit(LPM0_bits);
break; // Vector 10: RXIFG
case 12: // Vector 12: TXIFG
if (TXByteCtr) // Check TX byte counter
{
UCB0TXBUF = ATXData[2-TXByteCtr]; // Load TX buffer
TXByteCtr--; // Decrement TX byte counter
}
else
{
UCB0CTL1 |= UCTXSTP; // I2C stop condition
UCB0IFG &= ~UCTXIFG; // Clear USCI_B0 TX int flag
__bic_SR_register_on_exit(LPM0_bits); // Exit LPM0
}
break;
default: break;
}
}

关键字:MSP430F5529  I2C 引用地址:MSP430F5529 I2C 程序

上一篇:利用MSP430定时器A测量脉冲宽度范例
下一篇:关于MSP430单片机数字与字符转换的问题

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

MSP430F5529火箭板 ---> 控制时钟系统输出频率实验(含时钟系统分析)
实验内容:上电控制MSP430F5529 Launch Pad上的主时钟系统达到25Mhz 实验准备: 1、硬件:MSP430F5529 Launch Pad 2、软件:Code Composer Studio集成开发工具(CCS) 3、提升MSP430F5529核心电压的办法及介绍请参考《MSP430F5529火箭板 ----> 关于核心电压提升实验(含电源管理模块和供电监控系统介绍)》文章链接link 一、时钟系统 1、MSP430F5529 Lanuch Pad晶振的物理层分析   在进入时钟系统之前我们先对MSP430F5529的时钟晶振做一个介绍。    MSP430F5529 Launch Pad 板载了1个3
[单片机]
<font color='red'>MSP430F5529</font>火箭板 ---> 控制时钟系统输出频率实验(含时钟系统分析)
STM32 模拟I2C 程序
STM32的硬件I2C不太好用,N多人深受其困扰,本人也不例外.所以干脆一不做二不休,用模拟的I2C算了,虽然速度不及硬件I2C,在一般的应用中还是不错的.帖上代码和协议分析图,造福广大受STM32的I2C困扰的朋友,哈哈!为了跟硬件I2C有所区别,本人把模拟的I2C名字写成TWI. H文件内容如下: #i nclude stm32f10x.h #ifndef _TWI_H_ #define _TWI_H_ //条件编译 1:使用软件模拟I2C #define TWI_ENABLE 1 #define TWI_SCL_0 GPIOB- BRR=GPIO_Pin_8 #define TWI_SCL_1 GPIOB- BSRR=GPI
[单片机]
stm32 mpu6050 模拟i2c实例实现
最近准备一个比赛,所以正在加紧学习stm32,这篇文章就结合mpu6050分析一下利用i2c实现芯片之间的通信。 首先可以在原有的LED文件或显示屏(OLED)的文件基础上,新建一个HANDWARE,在其中加入mpu6050.c和mpu6050.h(名字自定)。 首先是在C文件中加入基本的I2C通信函数 1.I2C的GPIO端口初始化SDA、SCL设置为推挽输出。 2.然后是i2c_start();i2c_stop();函数,根据时序图设置SCL、SDA的高低电平变化。 3.之后加入主机ack的响应函数和ack的等待响应函数i2c_wait_ack();i2c_ack();i2c_wai
[单片机]
stm32 mpu6050 模拟<font color='red'>i2c</font>实例实现
03:时钟与中断代码 【MSP430F5529
定时器 TA,TB 寄存器 (仅列举TA,具体功能请自行查看手册,或者bibl上有视频讲解) 部分模式 (部分定时器模式,不过多列举) 代码 代码一 LED2每500ms切换“亮,灭”状态 /** * 使用TA0,CCR0 * TACK = SMCLK/1 = 1M, 1/1M = 1us */ #include msp430.h int main(void) { WDTCTL = WDTPW | WDTHOLD; //关闭“看门狗” //LED初始化 P4DIR |= BIT7; //初始化为输出 P4OUT &= ~BIT0; //
[单片机]
03:时钟与中断代码 【<font color='red'>MSP430F5529</font>】
I2C和SPI各有什么特点?
I2C和SPI各有什么特点? 答:I2C总线是二线制,采用器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。I2C总线简单,结构紧凑,易于实现模块化和标准化。 SPI是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线。有多个SPI接口的单片机时,应为一主多从,在某一时刻只能由一个单片机为主器件;在扩展多个SPI外围器件时,单片机应分别通过I/O口线来分时选通外围器件。
[单片机]
第23章 I2C—读写EEPROM—零死角玩转STM32-F429系列
本章参考资料:《STM32F4xx 中文参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》及《I2C总线协议》。 若对I2C通讯协议不了解,可先阅读《I2C总线协议》文档的内容学习。若想了解SMBUS,可阅读《smbus20》文档。 关于EEPROM存储器,请参考 常用存储器介绍 章节,实验中的EEPROM,请参考其规格书《AT24C02》来了解。 23.1 I2C协议简介 I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的
[单片机]
第23章 <font color='red'>I2C</font>—读写EEPROM—零死角玩转STM32-F429系列
msp430驱动74hc595(程序+电路)I2C串行通信
#include "msp430G2553.h" int tab ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; int temp; //毫秒延迟函数 void delay(int ms) { int i; while(ms--) for(i=0;i 120;i++); } //纳米延迟函数 void delayns(int ns) { while(ns--); } void display(temp)//现实位置P2.0=SH;P2.1=ST;P2,2=DS { int k,temp1,t
[单片机]
msp430驱动74hc595(程序+电路)<font color='red'>I2C</font>串行通信
基于单片机的I2C的读写操作实验
利用24C08断电以后存储的数据不消失的特点,可以做一个断电保护装置。首先利用单片机做一个0-99秒的自动计时器。然后随机关断电源,在 通电以后计时器接着断电前的状态继续计时。 首先简单的说明以下I2C总线,I2C总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。在 I2C总线上传送的一个数据字节由八位组成。总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位。数据传送首先传送最高位(MSB),数据传送按图1所示格式进行。首先由主机发出启动信号“S”(SDA在SCL高电平期间由高电平跳变为低电平),然后由主机发送一个字节的数据。启动信号后的第一个字节数据具有特殊含义:高七位
[单片机]
基于单片机的<font color='red'>I2C</font>的读写操作实验
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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