国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

MSP430口線模擬I2C總線

發布時間:2008-11-4 21:08    發布者:MSP430
關鍵詞: MSP , 模擬 , 總線

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 <MSP430x22x4.h>
#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<m;i++)
          for(j=0;j<125;j++);
    }
void Setting_System_Clock_For_On_Chip_RC( char Frequency )
    {
      switch (Frequency)
        {
          case 1 COCTL = BCSCTL1 = CALBC1_1MHZ;break;
          case 8 COCTL = BCSCTL1 = CALBC1_8MHZ;break;
          case 12COCTL = BCSCTL1 = CALBC1_12MHZ;break;
          case 16COCTL = 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);
        }
    }
本文地址:http://m.qingdxww.cn/thread-2880-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
maanzhenhow 發表于 2011-4-13 08:53:33
謝謝了
maanzhenhow 發表于 2011-4-13 08:53:52
太謝謝了
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 情侣国产在线| 亚洲成综合人影院在院播放| 亚洲第九十九页| 俄罗斯美女啪啪| 同房交换4p好爽| 亚洲特黄视频| 日本免费高清在线| 爽a中文字幕一区| 99久久麻豆AV色婷婷综合| 久久精品中文字幕免费| 日本三级黄在线观看| 欧美一级视频精品观看| 亚洲视频自拍| 亚洲图区综合网| 动漫美女的阴| 日本学生VIDEOVIDEOS更新| 亚洲欧洲久久久精品| 天色噜噜噜噜| 偷偷操不一样| 99久久精品国产免费| 秋霞伦理手机在线看片| 亚洲色图综合网| 日本视频在线免费观看| 脱了白丝校花的内裤猛烈进入| 超碰caopro熟女m超碰分类| 香蕉精品国产高清自在自线| 亚洲天堂色| 天天看片中文字幕| 亚洲天堂在线观看完整版| 精品 在线 视频 亚洲| 亚洲精品久久久久中文字幕二区 | 网友偷自拍原创区| 竹内纱里奈一88av在线| 日本一区精品久久久久影院 | 日韩色区| 天天草狠狠干| 一日本道加勒比高清一二三| 免费看片A级毛片免费看| 色老大综合| 偷自视频区视频真实在线| 伊人高清|