?? 24c256.c
字號(hào):
/* ------------------------------------------------- */
/* ADuC812 I2C MASTER.C */
/* ------------------------------------------------- */
#include <aduc812.h>
#include <intrins.h>
extern delay10ms();
start()
{
MDE = 1;
MCO = 1;
MDO = 1;
MDO = 0;
MCO = 0;
}
stop()
{
MDE = 1;
MDO = 0;
MCO = 1;
MDO = 1;
}
sendbyte(uchar c)
{
uchar i;
bit error;
ACC = c;
MDE = 1;
for(i = 8; i!=0; i--)
{
ACC<<=1;
MDO = CY;
MCO = 1;
MCO = 0;
}
MDE = 0;
MCO = 1;
error = MDI;
MCO = 0;
}
rcvbyte(uchar *p)
{
uchar i,c;
c = 0;
MDE = 0;
MCO = 0;
for(i = 0; i < 8; i++)
{
c <<= 1;
MCO = 1;
MCO = 0;
if(MDI) c++;
}
*p = c;
}
ack(bit a)
{
MDE = 1;
MDO = a;
MCO = 1;
MCO = 0;
}
specify_addr( bit rw,uint addr)
{
uchar device,addr_hi,addr_lo;
device = 0xa0;
if(addr>0x7fff) { device+=2; addr -= 0x8000; }
addr_hi = addr >> 8;
addr_lo = addr & 0x00ff;
sendbyte(device);
sendbyte(addr_hi);
sendbyte(addr_lo);
if(rw)
{
start();
sendbyte(device+1);
}
}
wr24cxx(uint addr, uchar *p, uint n)
{
uchar i;
uchar count1, count2;
uint pager;
pager = 1;
count1 = 64 - (addr & 0x003f);
if( n > count1 )
{
pager++;
n -= count1;
}
while( n > 64 )
{
pager++;
n -= 64;
}
count2 = n;
if( pager == 1 ) count1 = n;
while(pager != 0)
{
start();
specify_addr(0,addr);
for(i = 0; i < count1; i++)
{
sendbyte(*p);
p++;
}
stop();
addr += count1;
if(--pager != 1) count1 = 64;
else count1 = count2;
delay10ms();
}
}
rd24cxx(uint addr, uchar *p, uint n)
{
uint i;
start();
specify_addr(1, addr);
for(i = 0; i < n-1; i++)
{
rcvbyte(p);
ack(0);
p++;
}
rcvbyte(p);
ack(1);
stop();
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -