MSP430口线模拟I2C总线

发布者:陈熙琼最新更新时间:2016-08-26 来源: eefocus关键字:MSP430  口线  模拟I2C总线 手机看文章 扫描二维码
随时随地手机看文章
/********************************************************************************************************

* 功能: 实现MSP430口线模拟I2C总线协议与24C04通信.                                           *
* 描述: 主系统工作时钟为12MHz,I2C工作时钟频率为1MHz.给某地址写入一个数据     *
*         再读出来,如写入前和读出后的数据一致,则P1.0输出高电平,否则输出低电        *
*         平.                                                                                                                   *
*                                                  /|\    /|\                                                                     *
*               MSP430x22x4          10k   10k  ATMEL 24c04                                           *     
*                   master                     |      |       slave                                                       *
*             ---------------------------    |      |    ----------                                                      *
*           -|XIN     P3.1/UCB0SDA|<-|----+>|SDA      |                                                     *
*  32kHz |                                  |   |         |             |                                                     *
*           -|XOUT                         |    |        |             |                                                     *
*            |          P3.2/UCB0SCL|<-+-----> |SCL     |                                                      *
*            |                                  |             |             |                                                      *
*             --------------------------                ----------                                                       *
*                                                                                                                                 *
* 作者: Singel                                                                                                             *
* 时间: 2008年10月17日22时35分                                                                             *
*       此例在 IAR Embedded Workbench IDE for MSP430 v3.42a 调试通过 .            *
*********************************************************************************************************/


#include
#define  SlaveWriteAddress  0xa0
#define  SlaveReadAddress   0xa1
#define  OwnAddress         0xee
#define  I2CSDA             BIT1 
#define  I2CSCL             BIT2
#define  I2CSDA_SET_1       P3OUT |=  I2CSDA
#define  I2CSDA_SET_0       P3OUT &=~ I2CSDA
#define  I2CSCL_SET_1       P3OUT |=  I2CSCL
#define  I2CSCL_SET_0       P3OUT &=~ I2CSCL
#define  I2CSDA_INPUT_IN    P3IN&I2CSDA

unsigned char READI2CBUF;

void delay5us( void )
    {
      unsigned char count=8;
      while(count--);
    }     

void Delay_MS( unsigned int m )
    {    
      unsigned int i,j;
      for(i=0;i           for(j=0;j<125;j++);
    } 
void Setting_System_Clock_For_On_Chip_RC( char Frequency )
    {
      switch (Frequency)
        {
          case 1 :DCOCTL = BCSCTL1 = CALBC1_1MHZ;break;
          case 8 :DCOCTL = BCSCTL1 = CALBC1_8MHZ;break;
          case 12:DCOCTL = BCSCTL1 = CALBC1_12MHZ;break;
          case 16:DCOCTL = BCSCTL1 = CALBC1_16MHZ;break;
        }    
    } 

void I2C_Pins_DIR_Setting ( unsigned char SDADIR )
    {
      P3DIR  |= I2CSDA + I2CSCL;  
      if(SDADIR==1)
        {
          P3DIR &=~ I2CSDA;
          P3OUT &=~ I2CSDA;
        }
    }

void Engender_I2C_start_signal(void)
    {
      I2CSCL_SET_1;  delay5us();
      I2CSDA_SET_1;  delay5us();
      I2CSDA_SET_0;  delay5us();
    }       
void Engender_I2C_stop_signal(void)
    { 
      I2CSDA_SET_0;  delay5us();
      I2CSCL_SET_1;  delay5us(); 
      I2CSDA_SET_1;  delay5us();
    }       
void Engender_I2C_ack_signal(void)
    {     
      I2CSCL_SET_0;  delay5us();
      I2CSCL_SET_1;  delay5us();
      I2CSCL_SET_0;  delay5us();
    }          
void Engender_I2C_noack_signal(void)   
    { 
      I2CSDA_SET_1;  delay5us();
      I2CSCL_SET_0;  delay5us();
      I2CSCL_SET_1;  delay5us();
      I2CSCL_SET_0;  delay5us();
    }  

void WRITE_BYTE_TO_24C04( unsigned char ByteData )   
    { 
      unsigned char count;
      for(count=0;count<8;count++)
        {
          I2CSCL_SET_0;
          delay5us();
          if(ByteData&0x80)I2CSDA_SET_1;
          else             I2CSDA_SET_0;
          delay5us();
          I2CSCL_SET_1;
          delay5us();
          ByteData<<=1;
        }
    }          
unsigned char READ_BYTE_TO_24C04( void )
    { 
      unsigned char count,readbyte=0; 
      I2CSCL_SET_0; 
      for(count=0;count<8;count++)
        {
          readbyte=readbyte<<1; 
          I2CSCL_SET_1; 
          delay5us();  
          if(I2CSDA_INPUT_IN)readbyte=readbyte|0x01;
          else               readbyte=readbyte&0xfe;
          delay5us();
          I2CSCL_SET_0;
          delay5us(); 
        }
      I2CSCL_SET_0;
      return readbyte;
    }        
void WRITE_DATA_TO_24C04( unsigned char Address,unsigned char Date )
    {
      Setting_System_Clock_For_On_Chip_RC(1);
      I2C_Pins_DIR_Setting(0);
      Engender_I2C_start_signal();
      WRITE_BYTE_TO_24C04(SlaveWriteAddress);
      Engender_I2C_ack_signal();
      WRITE_BYTE_TO_24C04(Address);
      Engender_I2C_ack_signal();
      WRITE_BYTE_TO_24C04(Date);
      Engender_I2C_ack_signal();
      Engender_I2C_stop_signal();
      Delay_MS(15);
      I2CSCL_SET_0;
      I2CSDA_SET_0;
      Setting_System_Clock_For_On_Chip_RC(12);
     }           
unsigned char READ_DATA_FROM_24C04( unsigned char Address )
    { 
      unsigned char readdate;
      Setting_System_Clock_For_On_Chip_RC(1);
      I2C_Pins_DIR_Setting(0);
      Engender_I2C_start_signal();
      WRITE_BYTE_TO_24C04(SlaveWriteAddress);
      Engender_I2C_ack_signal();
      WRITE_BYTE_TO_24C04(Address); 
      Engender_I2C_ack_signal();
      Delay_MS(15);         
      Engender_I2C_start_signal();
      WRITE_BYTE_TO_24C04(SlaveReadAddress);  
      I2C_Pins_DIR_Setting(1);
      Engender_I2C_ack_signal();
      readdate=READ_BYTE_TO_24C04();
      I2C_Pins_DIR_Setting(0);     
      Engender_I2C_noack_signal();
      Engender_I2C_stop_signal();
      I2CSCL_SET_0;
      I2CSDA_SET_0;    
      Setting_System_Clock_For_On_Chip_RC(12);
      return (readdate);
    }

void main( void )                    
    {  
      unsigned char Data=0x59;
      WDTCTL  =  WDTPW+WDTHOLD;   
      Setting_System_Clock_For_On_Chip_RC(12);            
      P1DIR |= BIT0;
      while(1)
        {
          WRITE_DATA_TO_24C04(0X00,Data);
          READI2CBUF=READ_DATA_FROM_24C04(0x00); 
          if(Data == READI2CBUF)
            {
              P1OUT |=  BIT0;
            }
          else
            {
              P1OUT &=~ BIT0;
            }
          Delay_MS(15);
        }
    }

关键字:MSP430  口线  模拟I2C总线 引用地址:MSP430口线模拟I2C总线

上一篇:P1 端口中断操作
下一篇:MSP430F2274 LCD1602显示模块

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

基于MSP430的新型自报式水文遥测终端机设计
水文遥测系统通常由终端机、中继站和中心站三部分组成。由于终端机是用来直接测量雨量、水位等水文数据,是整个遥测系统信息的来源,故其设计成为整个遥测系统的关键。遥测终端机一般处于河流上游或者湖泊边缘,分布分散,维护起来很不方便,需要长期工作在无人值守的环境中,并且往往无交流电源提供,需要靠太阳能浮充和免维护蓄电池供电,因此在终端机的设计过程中低功耗和高可靠性尤为重要。 现有的遥测终端机通常采用MCS51微控制器作为控制芯片并配以较多的模拟电路和逻辑门电路,其设计复杂,功耗和可靠性难以得到保证,所以很有必要利用新型的性能更高的器件来对终端机重新设计。TI公司的MSP430系列集成了大量的外围部件,是低工作电压、超低功耗、高性能的微控
[应用]
MSP430F5529 ADC参考
1.ADC12_A初始化参数 typedef struct ADC_MemMap { union { uint16_t CTL0; struct { uint16_t SC :1; /* ADC12 Start Conversion */ uint16_t ENC :1; /* ADC12 Enable Conversion */ uint16_t TOVIE :1; /* ADC12 Timer Overflow interrupt enable */ uint16_t OVIE :1; /* ADC12 Overflow interrupt ena
[单片机]
<font color='red'>MSP430</font>F5529 ADC参考
基于MSP430的无线传感器网络设计
引言   传感测试技术正朝着多功能化、微型化、智能化、网络化、无线化的方向发展。自组织无线传感器网络(Self Organizing Wireless Sensor Networks)作为新兴技术,是目前国外研究的热点,其在军事、环境、健康、家庭、商业、空间探索和灾难拯救等领域展现出广阔的应用前景。早在2003年美国自然科学基金委员会已经斥巨资来支持这方面的研究,并且出现了一些致力于无线传感器网络的公司,其中Crossbow公司已推出了Mica系列传感器网络产品。国内很多大学现已经开展相关领域的研究,但大部分工作仍处在自组织无线网络协议性能仿真和硬件节点小规模实验设计阶段。本文就国防科技大学传感器教研室开展可应用于环境监测方面无
[工业控制]
基于<font color='red'>MSP430</font>的无线传感器网络设计
MSP430F5438 看门狗实验
简介: 1,学会在定时器和看门狗模式下操作 WDT,了解 WDT 寄存器的配置 2,编程实现WDT 定时功能,WDT 时钟源来自 ACLK,且 ACLK 无失效来自 XT1 晶体 3,实现功能:250ms 定时,每 250ms LED1 亮灭交替闪烁 1,看门狗介绍 看门狗定时器是一个32位的定时器它可以作为看门狗或定时器使用所有F5XX系列的器件中都有增强型看门狗定时器—WDT_A。 什么是看门狗? 从字面的意思理解,看门狗帮我的系统看门,防止我的系统到处乱跑。在实际嵌入式系统中看门狗也是充当这个角色的。看门狗,简称WDT,很明显它实际上是一个定时器,就如同我们所讲的Timer_A3亦或是Timer_B7系统一样,
[单片机]
<font color='red'>MSP430</font>F5438 看门狗实验
uCOS-II在MSP430上的移植1——准备工作
学习uC/OS-II有一段时间了,下了上百兆的资料。网上可以找到很多移植好的工程,参考别人的,稍微修改下,编译调试通过了,用起来始终觉得不是很踏实,毕竟不知道别人修改了哪些地方。静心整理了下思路,决定自己动手,从最原始的文件修改,把uCOS-II移植到MSP430F169上。 一、准备工作 (1)μC/OS-II中文教程.CHM ——《嵌入式实时操作系统uC/OS-II(第2版)邵贝贝译》一书的电子版。也可在网上查找相关的电子文档。作为工具手册,在移植过程中碰到不理解的可以随时查看. (2)μC/OS-II操作系统的源代码,版本为V2.86。 官方下载地址: http://www.micrium.com/pro
[单片机]
详细解读:MSP430G2553单片机串口通信
  MSP430的不同型号,其串行通讯工作模式是一样的。以MSP430G2553为例进行说明。MSP430G2553是20个引脚的16位单片机。具有内置的16位定时器、16k的FLASH和512B的RAM,以及一个通用型模拟比较器以及采用通用串行通信接口的内置通信能力。此外还具有一个10位的模数(A/D)转换器。这里我们详细说明MSP430G2553串口通信。其引脚排布如图1.1所示。其功能表如表1.1所示。   串行通讯模块主要由三个部分组成:波特率生成部分、发送控制器以及接收控制器。如图1.2所示。            一、UART模式   在异步模式下,接收器自身实现帧的同步,外部的通讯设备并不使用这一时钟
[单片机]
详细解读:<font color='red'>MSP430</font>G2553单片机串口通信
单片机 MSP430 G2553 F5529 蜂鸣器 音乐 音乐播放器
功能: 用蜂鸣器播放一首天空之城的音乐 。 需要无源蜂鸣器。 //如果根据简谱修改音乐? //第一步 //首先修改music0 的变量, //低音下面加点 //中音不加点 //高音上面加点 //根据简朴的符号写出对应C调音 //第二步 修改music0_JP数组 这个数组和上一个数组对应 就是每一个音 响多长时间 //普通无点是延时 7 即是800ms //如果音 下有一条下划线,延时 4 //如果音 下有两条下划线,延时2 //如果音 后加一个点 延时12 //如果音后加一条线 延时16 //如果音后加2条线 延时20
[单片机]
单片机 <font color='red'>MSP430</font> G2553 F5529 蜂鸣器 音乐 音乐播放器
基于MSP430和Cyclone II 的网络数据加密实现
  1 引言   随着信息技术和网络化进程的发展,网络通信安全问题日益突出。现场可编程门阵列(FPGA)以其自身设计灵活、可靠性高的优点广泛应用于加密领域。硬件实现的加密算法不占用计算机资源.加密过程完全与外部总线隔离,具有较高的数据保护能力。算法可灵活改变,具有较强的独立性。加密机由单片机,FPGA和El通信接口组成。FPGA内部算法由VHDL语言编写。该系统适用于要求数据安全较高的场合,其终端可为计算机,银行POS机等,提供数据传输的安全性和保密性。   2 流加密解密原理及算法   2.1 流加密解密原理   流密码由密钥和密码算法两部分组成,密钥一般存储在加解密设备内部,在数据传输前已设置完成。密码算法在较长时间内是不变
[单片机]
基于<font color='red'>MSP430</font>和Cyclone II 的网络数据加密实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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