⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic.c

📁 自己写的测试程序,调试已通过,可以直接使用, 而且有的还有详细的注释.红外测试软件
💻 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 + -