?? iic.c
字號:
#include<w78e58b.h>
#include<intrins.h>
sbit sdata=P1^7;
sbit sclock=P1^6;
/********************* iic delay time function ************************/
void delay_iic(void)
{
int i;
for(i=0;i<400;i++)
{;}
}
/********************* iic wait function *******************************/
void iic_wait(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
/*************** iic start function ******************************/
void iic_start(void)
{
sdata=1;
sclock=1;
iic_wait();
sdata=0;
iic_wait();
sclock=0;
}
/**************** iic stop function ********************************/
void iic_stop(void)
{
sdata=0;
sclock=0;
iic_wait();
sclock=1;
iic_wait();
sdata=1;
}
/**************** send ask ****************************************/
void iic_ask(void)
{
sdata=0;
iic_wait();
sclock=1;
iic_wait();
sclock=0;
}
/*************** send no ask ******************************************/
void iic_no_ask(void)
{
sdata=1;
iic_wait();
sclock=1;
iic_wait();
sclock=0;
}
/*************** iic wait ack *****************************************/
bit iic_wait_ask(void)
{
unsigned char error_times=250;
sdata=1;
iic_wait();
sclock=1;
iic_wait();
while(sdata)
{
error_times--;
if(!error_times)
return(0);
}
sclock=0;
return(1);
}
/***************** iic send byte *******************************************/
void iic_send_byte(unsigned char sbyte)
{
unsigned char i=8;
while(i--)
{
sclock=0;
_nop_();
sdata=(bit)(sbyte&0x80);
sbyte<<=1;
iic_wait();
sclock=1;
iic_wait();
}
sclock=0;
}
/******************* iic receive byte ********************************/
unsigned char iic_receive_byte(void)
{
unsigned char i=8;
unsigned char ddata=0;
sdata=1;
while(i--)
{
ddata<<=1;
sclock=0;
iic_wait();
sclock=1;
iic_wait();
sclock=1;
iic_wait();
ddata|=sdata;
}
sclock=0;
return(ddata);
}
/******************* write iic data(n byte) to address ************************/
void write_iic_data(unsigned char iic_page,unsigned char write_data[],unsigned char address,unsigned char num)
{
unsigned char n;
iic_start();
iic_send_byte(0xa0);
iic_wait_ask();
iic_send_byte(iic_page); // 24c64 address 12 bit
iic_wait_ask();
iic_send_byte(address);
iic_wait_ask();
for(n=0;n<num;n++)
{
iic_send_byte(write_data[n]);
iic_wait_ask();
}
iic_stop();
}
/********************* read iic data(n byte) to address **********************/
void read_iic_data(unsigned char iic_page,unsigned char read_data[],unsigned char address,unsigned char num)
{
unsigned char n;
unsigned char *p;
p=read_data;
iic_start();
iic_send_byte(0xa0);
iic_wait_ask();
iic_send_byte(iic_page);
iic_wait_ask();
iic_send_byte(address);
iic_wait_ask();
iic_start();
iic_send_byte(0xa1);
iic_wait_ask();
for(n=0;n<num;n++)
{
*p=iic_receive_byte();
p++;
if(n!=(num-1))
{
iic_ask();
}
}
iic_no_ask();
iic_stop();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -