doc

MSP430F5438 I2C模块读写程序

  • 1星
  • 日期: 2015-08-28
  • 大小: 28KB
  • 所需积分:1分
  • 下载次数:2
  • favicon收藏
  • rep举报
  • free评论
标签: 430

430

I2C

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

使用MSP430的I2C模块实现单字节地址寄存器单字节数据的读写,单字节地址寄存器多字节数据的读写,双字节地址寄存器单字节数据的读写,双字节地址寄存器多字节数据的读写

文档内容节选

I2C初始化 void InitRTCvoid P3SEL BIT2 P3DIR BIT2 P3OUT BIT2 forint j0 j9 j P3OUT BIT2 delaycycles8000 P3OUT BIT2 delaycycles8000 9个脉冲恢复I2C总线状态 P3SEL 0x06 UCB0CTL1 UCSWRST UCB0CTL0 UCMST UCMODE3 UCSYNC UCB0CTL1 UCSSEL2 UCB0BR0 10 UCB0BR1 0 UCB0CTL1 UCSWRST 单字节地址寄存器操作 单字节数据写操作 void RTCWRITEBYTEuchar wordaddruchar wordvalue UCB0I2CSA 0x68 UCB0CTL1 UCTR whileUCB0STAT UCBBUSY UCB0CTL1 UCTXSTT whileUCB0IFG UCTXIFG UCB0TXBUF wor......

// I2C初始化 void Init_RTC(void) { P3SEL &= ~BIT2; P3DIR |= BIT2; P3OUT |= BIT2; for(int j=0; j<9; j++) { P3OUT |= BIT2; __delay_cycles(8000); P3OUT &= ~BIT2; __delay_cycles(8000); } //9个脉冲恢复I2C总线状态 P3SEL |= 0x06; UCB0CTL1 |= UCSWRST; UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; UCB0CTL1 = UCSSEL_2; UCB0BR0 = 10; UCB0BR1 = 0; UCB0CTL1 &= ~UCSWRST; } /*****************************************************/ /***************单字节地址寄存器操作******************/ /*****************************************************/ //单字节数据写操作 void RTC_WRITEBYTE(uchar word_addr,uchar word_value) { UCB0I2CSA = 0x68; UCB0CTL1 |= UCTR; while(UCB0STAT & UCBBUSY); UCB0CTL1 |= UCTXSTT; while(!(UCB0IFG & UCTXIFG)); UCB0TXBUF = word_addr; while(UCB0CTL1 & UCTXSTT); while(!(UCB0IFG & UCTXIFG)); UCB0TXBUF = word_value; while(!(UCB0IFG & UCTXIFG)); UCB0CTL1 |= UCTXSTP; UCB0IFG&=~UCTXIFG; } //单字节数据读操作 void RTC_READBYTE(uchar word_addr) { UCB0I2CSA = 0x68; UCB0CTL1|=UCTR; while(UCB0STAT & UCBBUSY); UCB0CTL1|=UCTXSTT; while(!(UCB0IFG&UCTXIFG)); UCB0TXBUF=word_addr; while(UCB0CTL1&UCTXSTT); while(!(UCB0IFG&UCTXIFG)); UCB0CTL1&=(~UCTR); UCB0CTL1|=UCTXSTT; while(UCB0CTL1&UCTXSTT); while(!(UCB0IFG&UCRXIFG)); UCB0CTL1|=UCTXSTP; } //多字节数据写操作 void RTC_WRITEPAGE(uchar word_addr,uchar *pword_buff,uchar len) { UCB0I2CSA = 0x68; UCB0CTL1|=UCTR; while(UCB0STAT & UCBBUSY); UCB0CTL1|=UCTXSTT; while(!(UCB0IFG&UCTXIFG)); UCB0TXBUF=word_addr; while(UCB0CTL1&UCTXSTT); while(!(UCB0IFG&UCTXIFG)); for(uint i=0;i> 8; while(UCB0CTL1&UCTXSTT); while(!(UCB0IFG&UCTXIFG)); UCB0TXBUF = word_addr & 0x00FF; while(!(UCB0IFG&UCTXIFG)); UCB0TXBUF=word_value; while(!(UCB0IFG&UCTXIFG)); UCB0CTL1|=UCTXSTP; UCB0IFG&=~UCTXIFG; } //单字节数据读操作 void FRAM_READBYTE(uint word_addr) { UCB0I2CSA = 0x50; UCB0CTL1 |= UCTR; while(UCB0STAT & UCBBUSY); UCB0CTL1 |= UCTXSTT; while(!(UCB0IFG&UCTXIFG)); UCB0TXBUF = (word_addr & 0xFF00) >> 8; while(UCB0CTL1 & UCTXSTT); while(!(UCB0IFG & UCTXIFG)); UCB0TXBUF = word_addr & 0x00FF; while(!(UCB0IFG & UCTXIFG)); UCB0CTL1 &= (~UCTR); UCB0CTL1 |= UCTXSTT; while(UCB0CTL1 & UCTXSTT); while(!(UCB0IFG & UCRXIFG)); UCB0CTL1 |= UCTXSTP; } //多字节数据写操作 void FRAM_WRITEPAGE(uint word_addr,uchar *pword_buff,uchar len) { UCB0I2CSA = 0x50; UCB0CTL1|=UCTR; while(UCB0STAT & UCBBUSY); UCB0CTL1|=UCTXSTT; while(!(UCB0IFG&UCTXIFG)); UCB0TXBUF = (word_addr & 0xFF00) >> 8; while(UCB0CTL1&UCTXSTT); while(!(UCB0IFG&UCTXIFG)); UCB0TXBUF = word_addr & 0x00FF; while(!(UCB0IFG&UCTXIFG)); for(uint i=0;i> 8; while(UCB0CTL1 & UCTXSTT); while(!(UCB0IFG & UCTXIFG)); UCB0TXBUF = word_addr & 0x00FF; while(!(UCB0IFG & UCTXIFG)); UCB0CTL1 &= (~UCTR); UCB0CTL1 |= UCTXSTT; while(UCB0CTL1 & UCTXSTT); while(!(UCB0IFG & UCRXIFG)); *pword_buff=UCB0RXBUF; for(uint i=0;i
更多简介内容

推荐帖子

评论

登录/注册

意见反馈

求资源

回顶部

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })
×