|
弄了一个星期,还没出来,这个程序在24C02上出来的,现在到24C04就出不来了。
我曾今在at24C512上用AVR 8M 晶振 都测试通过了,移植到 STC 晶振是11.0592上就出不来了,修改了延时时间,还是出不来。感谢哥哥姐姐们帮助下,要不又要挨老板批了。
#include "stc11.h"
#include "at24c04.h"
void Delay5us() //@11.0592MHz
{
unsigned char i;
_nop_();
i = 11;
while (--i);
}//开始总线
void Start(void)
{
SDA=1;
SCL=1;
Delay5us();
SDA=0;
SCL=0;
}
/*-----------------------------------------*/
//结束总线
void Stop(void)
{
SCL=0;
SDA=0;
Delay5us();
SCL=1;
SDA=1;
}
/*-----------------------------------------*/
//发送ACk0
void NoAck(void)
{
SDA=1;
SCL=1;
Delay5us();
SCL=0;
}
/*-----------------------------------------*/
//测试ACk
bit TestAck(void)
{
bit ErrorBit;
SDA=1;
SCL=1;
Delay5us();
ErrorBit=SDA;
SCL=0;
return (ErrorBit);
}
/*-----------------------------------------*/
//写入8个Bit 到24C04
void Write8Bit(unchar input)
{
unchar temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
Delay5us();
SCL=0;
input<<=1;
}
}
/*-----------------------------------------*/
//写入一个字到24C04中的指定地址中
void Write24C04(unsigned int address,unchar ch)
{
unsigned char addr_h,addr_l;
addr_h=address>>8;
addr_l=address&0xff;
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(addr_h);
TestAck();
Write8Bit(addr_l);
TestAck();
Write8Bit(ch);
TestAck();
Stop();
Delay_10ms(1); //延迟时间最大10ms!!!
}
/*-----------------------------------------*/
//从24C04中读出8个Bit
unchar Read8Bit(void)
{
unchar temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
Delay5us();
rbyte<<=1;
rbyte|=((unchar)(SDA));
SCL=0;
}
return (rbyte);
}
/*-----------------------------------------*/
//从24C04指定地址位置中读出1个字节
unchar Read24C04(unsigned int address)
{
unchar ch;
unsigned char addr_h,addr_l;
addr_h=address>>8;
addr_l=address&0xff;
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(addr_h);
TestAck();
Write8Bit(addr_l);
TestAck();
Start();
Write8Bit(ReadDeviceAddress);
TestAck();
ch=Read8Bit();
NoAck();
Stop();
return (ch);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|