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

📄 ext_int1.c

📁 PIC18F6720同PIC18F6720之间进行I2C通讯,调试通过.
💻 C
字号:
#define slave_I2C_data   PIN_B1
#define slave_I2C_clk    PIN_B2


void ext_int1_init(){
 bit_set(*0xF93,1); //端口B的方向寄存器地址为0xF93,将RB1设置为输入
 bit_set(*0xF93,2); //端口B的方向寄存器地址为0xF93,将RB2设置为输入
 ext_int_edge(1,H_TO_L);     //将EXT_INT1设置为下降沿中断方式;
 enable_interrupts(INT_EXT1);//使能外部中断1
 enable_interrupts(GLOBAL);  //开总中断
 }

/*
int1 wait_I2C_clk_high(){
  long int sys_couter=10000;
  while( !input(slave_I2C_clk))
       {
       sys_couter--;
       if(sys_couter==0)
         {
          //enable_interrupts(INT_EXT1);//使能外部中断1
          return  FALSE;//超时; 
         }
      }
  return  TRUE; 
}
*/


int1 wait_I2C_clk_low(){
  long int sys_couter2=1000;
  while( input(slave_I2C_clk))//等待slave_I2C_clk变为0;
       {
        sys_couter2--;
        if(sys_couter2==0) return  FALSE;//超时; 
       }
  return  TRUE; 
}


//从IIC读入一个字节
BYTE read_IIC_byte( ) {
long  int sys_couter0=1000;
long  int sys_couter1=1000;
   BYTE i=8,data;

   for(i=0;i<8;i++)
      {while( !input(slave_I2C_clk) )  //等待slave_I2C_clk变为1;
            {sys_couter0--;
             if(sys_couter0==0x0000) return(0);//超时,主机错; 
            }
       shift_left(&data,1,input(slave_I2C_data)); //slave从从主机发送器读入1位,先读入的是发送数据的最高位;
       while( input(slave_I2C_clk) )  //等待slave_I2C_clk变为0;
            {sys_couter1--;
             if(sys_couter1==0x0000) return(0);//超时,主机错; 
            }
       sys_couter0=1000;
       sys_couter1=1000;
     }

   return(data);//接收正确
}

void iic_send_ack()
{
 output_low(slave_I2C_data);    //在slave_I2C_clk变为0时,本从机发送应答ACK;

 while( !input(slave_I2C_clk) );//等待slave_I2C_clk变为1;
 while( input(slave_I2C_clk) ); //等待slave_I2C_clk变为0;
                                //上面两句是等待一个移位时钟到到来
 bit_set(*0xF93,1); //端口B的方向寄存器地址为0xF93,将RB1设置为输入
 bit_set(*0xF93,2); //端口B的方向寄存器地址为0xF93,将RB2设置为输入
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -