电路设计,软件开发,专业项目团队承接电子产品开发!


ISPRO下载型编程器
火爆销售中

RS232/TTL转换器
全IC串口窃电

RS232/TTL转换线
全IC串口窃电

ByteBlasterMV Cable
CPLD/FPGA并口下载线

ByteBlaster II Cable ISPRO下载型编程器
支持S51/AVR/PIC
超级51开发板套件
前卫实用超值

PC/MCU/CPLD
三合一学习套件

全新万年历方案
AVR单片机开发板
 

Min51单片机仿真机
迷你型

ARM7开发板
仅售260元!
 

RS-232/RS-485双向接口电平转换器  

51单片机升级STM32
火爆销售中
MPLAB-ICD2
火爆销售中
LED51开发板
玩具又名图文显示棒

面板模块/开发板
经济危机明智决择

       

GSM MODEM GSM猫

SMS短信模块 工业级/全自动
火爆销售中

大功率数传电台

高速数传电台

您当前位置:电子技术资料 -> 外围驱动 -> EEPROM ->

祝您阅读愉快!

ISPRO下载型编程器

RS232 TO TTL转换器
↑↑本文相关产品介绍↑↑

MSP430F449与24C01通讯程序调试成功


类别:技术文章
来源:未知
作者:未知
关键字:AT24C01
加入日期:2010-8-3

//MSP430F449与24C01通讯程序调试成功
//中国电子网www.ec66.com
#include "msp430x44x.h"
//P4.7 SDA
//P4.6 SCL
#define SDA_0 (P4DIR|=BIT7)
#define SDA_1 (P4DIR&=~BIT7)
#define SCL_0 (P4DIR|=BIT6)
#define SCL_1 (P4DIR&=~BIT6)
#define DIR_OUT (P4DIR|=BIT7)
#define DIR_IN (P4DIR&=~BIT7)
void Delay(unsigned int n);
void Start(void);
void Stop(void);
void Send_Byte(unsigned char data);
unsigned char Receive_Byte(void);
void Ack(void);
void I2C_ACK(unsigned char tm);
void Send_word(void);
void Receive_word(void);
unsigned char *D,*M,ADD,Ack_Flag;
unsigned int MPM[16];
unsigned int DDT[16]={
0xf316,0x6921,0xd315,0xc523,0xb628,0x8525,0xc324,0xd716,0xf316,
0x6921,0xd315,0xc523,0xb628,0x8525,0xc324,0xd716
};
void main(void)
{ unsigned int i;
WDTCTL=WDTPW+WDTHOLD;
D=(char*)DDT;
ADD=0; //24C01内数据读写首地址
M=(char*)MPM;
for(i=0;i<4;i++)
{ Send_word();
Delay(1000);
ADD+=8;
}
ADD=0;
Receive_word();
}
/*****************************************延时*/
void Delay(unsigned int n)
{
while(n-- > 0);
}
//*****************************************开始
void Start(void)
{ P4OUT&=0x3F;
SDA_1;
SCL_1;
SDA_0;
SCL_0;
}
//******************************************停止
void Stop(void)
{ SCL_0;
SDA_0;
SCL_1;
SDA_1;
}
//***************************************发送一个字节
void Send_Byte(unsigned char data)
{ unsigned char BI,i;
BI=0x80;
for(i=0;i<8;i++)
{ if((data&BI)==BI) SDA_1;
else SDA_0;
SCL_1;
Delay(50);
SCL_0;
BI>>=1;
}
}
//********************************************写完一个字节判断应答
void Ack(void)
{ DIR_IN;
SCL_1;
Ack_Flag = 0;
Delay(10);
if ((P4IN & BIT7))
{
Ack_Flag = 1;
}
SCL_0;
Delay(10);
}
//*******************************************接收一个字节
unsigned char Receive_Byte(void)
{ unsigned char i,temp=0x80,tempdata;
tempdata=0;
DIR_IN;
for(i=0;i<8;i++)
{
SCL_1;
if((P4IN&BIT7)==BIT7) tempdata|=temp;
temp>>=1;
SCL_0;
}
return(tempdata);
}
//************************************************接收一个字节后发送应答信号
void I2C_ACK(unsigned char tm)
{
if(tm==0) SDA_0;
else SDA_1;
Delay(10);
SCL_1;
Delay(10);
SCL_0;
Delay(10);
}
//*************************************************发送一个数组
void Send_word(void)
{ unsigned char i;
while(1)
{ Start();
Delay(20);
Send_Byte(0xA0);
Ack();
if (Ack_Flag) continue;
Send_Byte(ADD);
Ack();
if (Ack_Flag) continue;
for(i=0;i<8;i++)
{
Send_Byte(*D++);
Ack();
if (Ack_Flag) continue;
}
if (!Ack_Flag) break;
}
Stop();
}
//************************************************接收一个数组
void Receive_word(void)
{ unsigned char i;
while(1)
{ Start();
Send_Byte(0xA0);
Ack();
if (Ack_Flag) continue;
Send_Byte(ADD);
Ack();
if (Ack_Flag) continue;
Start();
Send_Byte(0xA1);
Ack();
if (Ack_Flag) continue;
for(i=0;i<31;i++)
{ *M++=Receive_Byte();
I2C_ACK(0);
}
Delay(5);
*M=Receive_Byte();
I2C_ACK(1);
if (!Ack_Flag) break;
}
Stop();
}

您可能还会关注的相关技术资料:

中国电子网
www.EC66.com
QQ:34740080 EMAIL:iloveaoe@163.com
最佳浏览:1024*768
Copyright (C) 2001-2010 EC66.COM All Rights Reserved
Aoe/帝国 制作维护
粤ICP备18061901号