百韵网 >>  正文

我用AVR M128的普通IO口PD6,PD7模拟I2C总线,控制24c64EEPROM的写入和读出,时序都没问题,应答也有。 我用AVR M128的普通IO口PD6,PD7模拟I2C总线...

来源:www.baiyundou.net   日期:较早时间
我看你那两个io口的时序好像不大对劲。我给你个代码,直接保存成xxx.h文件。插到你代码里面就可以了。
因为我不知道你pd6 和pd7 各接什么脚
你要自行修改以下两句代码
#define SDA 0X02 //定义sda连接的是portd1
#define SCL 0X01 //定义scl连接的是portd0

写数据的时候就调用 write_eep(地址,数据);
读数据的时候就调用 read_eep(地址);
文件内容如下

#define EEP_PORT PORTD //定义是使用PROTC口
#define EEP_DDR DDRD //定义是使用PROTC口
#define SDA 0X02 //定义sda连接的是portd1
#define SCL 0X01 //定义scl连接的是portd0
#define WP 0X04 //定义wp连接的是portd2
#define EEP_ADD_R 0xa1 //写I2C从器件地址和读方式 a0,a1接地
#define EEP_ADD_W 0xa0 //写I2C从器件地址和写方式 a0,a1接地

void eep_init(void)
{
EEP_DDR|= SDA | SCL | WP ;
EEP_PORT|=SDA | SCL | WP ;
}

void send(void)
{
EEP_PORT|=SCL;
asm("nop");
EEP_PORT&=~SCL;
}
/********************************************
内部函数,I2C开始
********************************************/
void Start(void)
{
EEP_PORT|=SDA; //sda
EEP_PORT|=SCL; //scl
asm("nop");
EEP_PORT&=~SDA;
asm("nop");
EEP_PORT&=~SCL;
}
/********************************************
内部函数,I2C结束
********************************************/
void Stop(void)
{
EEP_PORT&=~SDA;
EEP_PORT&=~SCL;
asm("nop");
EEP_PORT|=SCL;
asm("nop");
EEP_PORT|=SDA;
asm("nop");
}

/********************************************
内部函数,等待ACK
********************************************/
void ACK(void)
{

unsigned char errtime=20;
EEP_PORT|=SDA; //上拉
EEP_DDR&=~SDA; //设置为输入口
EEP_PORT|=SCL;
asm("nop");
while(PINC&SDA)
{ errtime--;
if(!errtime)
{
Stop();
EEP_PORT&=~SDA; //超时,给他个离开的理由
}
}
EEP_PORT&=~SCL;
asm("nop");
EEP_DDR|=SDA; //设置为输出口
}
/********************************************
内部函数.输出数据字节
********************************************/
void writebyte(unsigned char wdata)
{
unsigned char i;
for(i=0;i<8;i++)
{
if((wdata&0x80)){EEP_PORT|=SDA;}else{EEP_PORT&=~SDA;}
wdata<<=1;
send(); //发送一个位

}
}
/********************************************
内部函数.输入数据
********************************************/
unsigned char Readbyte(void)
{
unsigned char i,bytedata;
EEP_DDR&=~SDA; //设置为输入?
for(i=0;i<8;i++)
{
EEP_PORT|=SCL;
bytedata<<=1;
if(PINC&SDA){
bytedata|=0X01;
}else{
bytedata&=~0X01;
}
EEP_PORT&=~SCL;
asm("nop");
}
EEP_DDR|=SDA;
return(bytedata);

}

/********************读24cxx--外部调用********************/
unsigned char read_eep(unsigned char add1,unsigned char add2)
{ unsigned char mdata;
Start(); //起始位
writebyte(EEP_ADD_W); //写eeprom地址+1个写命令
ACK(); //等待应答信号
writebyte(add1); //写如访问地址
ACK(); //等待应答信号
writebyte(add2); //写入访问地址
ACK(); //等待应答信号
Start(); //起始位
writebyte(EEP_ADD_R); //写eeprom地址+1个读命令
ACK(); //等待应答信号
mdata=Readbyte(); //获取数据
Stop(); //发送停止位置
asm("nop"); //此处延时根据实际情况,如果不延时,可能会不正常
return(mdata);
}
/********************写24cxx--外部调用********************/
void write_eep(unsigned char add1,unsigned char add2,unsigned char udata)
{
EEP_PORT&=~WP; //关闭写保护
Start(); //起始位
writebyte(EEP_ADD_W); //写eeprom地址+1个写命令
ACK(); //等待应答信号
writebyte(add1); //写如访问地址
ACK(); //等待应答信号
writebyte(add2); //写如访问地址
ACK(); //等待应答信号
writebyte(udata); //写入数据
ACK(); //等待应答信号
Stop(); //发送停止位
delay_nms(4); //此处延时根据实际情况,大多EEPROM都需要3毫秒的写入时间,如果不延时,可能会不正常
EEP_PORT|=WP; //打开写保护
}

/***********************************************************/

当大量宾馆酒店借力世博扩张,世博会确实给业者带来非常多的商机,各个宾馆酒店都借力世博扩大发展、提高经营收益。那么世博会对宾馆宾馆酒店业产生了哪些影响?上海宾馆分析了以下几大影响。

1.区位的影响

上海世博会对宾馆酒店业的影响以世博园为增长极逐步向外扩散。影响最大的第一级为世博会场所在区域宾馆酒店;第二级为相对集中的上海市区内宾馆酒店;第三极为上海市郊区和杭州、宁波、南京等长三角区域宾馆酒店。从上海市区主要地段来看,轨道交通附近的宾馆酒店迎来了更好的发展机遇。另外,从宾馆酒店类型来看,世博客源以国内团队为主,上海非星级宾馆酒店旅馆受到市场青睐,特别是那些品牌经济型宾馆酒店。

2.经营的影响

2009年上海高档宾馆酒店业整体受到金融危机冲击很大。据上海宾馆了解,上海不少高星级宾馆酒店大幅度降价、促销、做外卖来过冬,某宾馆酒店甚至降价幅度超过50%,为上海近几年所罕见。借助世博效应、虹桥机场以及虹桥交通枢纽的扩建完成等利好因素,上海2010年的宾馆酒店市场在短期内取得了比较理性的恢复。另外,作为比邻的长三角城市是世博会的分会场,它们的宾馆酒店业将获得前所未有的发展机遇。

3.信息的影响

要实现世博规划中的住宿解决方案,信息作用不可忽视。世博住宿解决方案是一个复杂的系统,不同区域的、各种不同类型宾馆酒店接待信息是否能统一、完整地便利搜索,影响到住宿解决方案是否在现实可执行的实际问题。这中间,星级宾馆酒店是大多数外来游客到上海后的首要选择,无论借助哪一种交通工具,都得先找到宾馆酒店的确切方位。但多数电子地图的双语功能都比较差。另外,为应对上海世博会期间极端高峰日的住宿缺口,世博住宿解决方案中提供了上海高校内部招待所和周边地区疏散等应急预案,这些非常规资源的系统整合情况和具体信息的公开与被搜索同样非常重要。

4.容量的影响

以第一、第二极为例,抽取5月24日、25日、26日数据,可以了解到,虽然不少宾馆酒店的价格已经相对于世博前实现翻番,但随着入园人数的增加,上海市区客房平均出租率依然逐步增加到饱和状态(达到97%)。政府的价格规定使宾馆酒店业通过提价增加利润和控制入住流量受到限制。鉴于上海世博会期间预计接待人次与现实的差距,票检入园人数将继续增加,那么住宿问题将形成瓶颈。按照原世博规划,对应解决方案主要是内挖潜力,外引资源:通过世博人家、世博农家、临时调用企事业单位及学校等社会资源来缓解;通过向车程在两小时以内的长三角周边地区宾馆酒店疏散客流来缓解。

但上海周边杭州、苏州等地和上海在宾馆酒店方面的接洽没达到理想状态。

文章转自 上海宾馆 上海宾馆

我用AVR M128的普通IO口PD6,PD7模拟I2C总线,控制24c64EEPROM的写入和读出,~

如果真是这样,那看看是不是移位的时候出错了。

对应主控方的单片机来说,SDL需要支持输出和输入双向或半双向功能。spi也可以用软件和普通IO口模拟。

相关要点总结:
(编辑:本站网友)
相关推荐
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图
@ 百韵网