您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术在51上用P1口模拟I2C 正文
在51上用P1口模拟I2C

在51上用P1口模拟I2C

点击数:7782 次   录入时间:03-04 11:50:53   整理:http://www.55dianzi.com   嵌入式系统-技术
       下面是用普通 C51 实现的 I2C 基本电平模拟函数和通用函数。 

       /*  电平模拟函数和基本读写函数 
       void IIC_Start(void); 
       void IIC_Stop(void); 
       void SEND_0(void); 
       void SEND_1(void); 
       bit Check_AcknowLEDge(void); 
        void Write_Byte(uchar b)reentrant; 
       bit Write_N_Bytes(uchar *buffer,uchar n)reentrant; 
       bit Read_N_Bytes(uchar SlaveAdr,uchar n,uchar *buffer); 
       uchar Read_Byte(void)reentrant; 
   */ 

       #include 
       #include 
       #include 
       #include"aiic_51.h" 

       sbit SCL=P1^6; 
       sbit SDA=P1^7; 

       void DELAY(uint t) 
       { 
           while(t!=0) 
               t--; 
       } 

       void IIC_Start(void) 
       { 
           //启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变 
           SDA=1; 
           SCL=1; 
           DE

www.55dianzi.com LAY(DELAY_TIME); 
           SDA=0; 
           DELAY(DELAY_TIME); 
           SCL=0; 
           DELAY(DELAY_TIME); 
       } 

       void IIC_Stop(void) 
       { 
           //终止 I2C 总线,当SCL为高电平时使SDA产生一个正跳变 
           SDA=0; 
           SCL=1; 
           DELAY(DELAY_TIME); 
           SDA=1; 
           DELAY(DELAY_TIME); 
           SCL=0; 
           DELAY(DELAY_TIME); 
       } 

       void SEND_0(void) 
       { 
           //发送0,在SCL为高电平时使SDA信号为低 
           SDA=0; 
           SCL=1; 
           DELAY(DELAY_TIME); 
           SCL=0; 
           DELAY(DELAY_TIME); 
       } 

       void SEND_1(void) 
       { 
           //发送1

www.55dianzi.com ,在SCL为高电平时使SDA信号为高
           SDA=1; 
           SCL=1; 
           DELAY(DELAY_TIME); 
           SCL=0; 
           DELAY(DELAY_TIME); 
       } 

       bit Check_AcknowLEDg e(void) 
       { 
           //发送完一个字节后检验设备的应答信号 
           SDA=1; 
           SCL=1; 
           DELAY(DELAY_TIME/2); 
           F0=SDA; 
           DELAY(DELAY_TIME/2); 
           SCL=0; 
           DELAY(DELAY_TIME); 
           if(F0==1) 
               return FALSE; 
           return TRUE; 
       } 

       void Write_Byte(uchar b)reentrant 
       { 
           //向IIC总线写一个字节 
           uchar i; 
           for(i=0;i<8;i++) 
               if((b<&

www.55dianzi.com nbsp;   
               SEND_1(); 
               else 
                   SEND_0(); 
       } 

       bit Write_N_Bytes(uchar *buffer,uchar n)reentrant 
    &nbs p;  { 
           //向 I2C 总线写n个字节 
           uchar i; 
           IIC_Start(); 

           for(i=0;i           { 
               Write_Byte(buffer[i]); 

[1] [2]  下一页


本文关键字:暂无联系方式嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术

《在51上用P1口模拟I2C》相关文章>>>