首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用s5pc100的GPIO模拟IIC(2)

用s5pc100的GPIO模拟IIC(2)

(3)发送数据
       

                                /*Write 1 Byte to IIC*/       
                        void iic_write_byte(uint8 data)       
                        {       

                                                                        uint8 loop;               
       
                                                               
               

       
                                                                for(loop = 8;loop > 0;loop --)               
       
                                                                {               
       
       
                                                                                                                //先发送最高位,在SCL高电平时,SDA必须保持稳定                       
               
       
       
                                                                                                                SDA = data >> 7;                       
               
       
       
                                                                                                                SCL = HIGH;                       
               
       
       
                                                                                                                delay(50);                       
               
       
       
                                                                                                               
                       

               
       
       
                                                                                                                //SCL为低电平时,SDA可以任意改变                       
               
       
       
                                                                                                                SCL = LOW;                       
               
       
       
                                                                                                                //低位向高位移动                       
               
       
       
                                                                                                                data <<= 1;                       
               
       
       
                                                                                                                delay(50);                       
               
       
                                                                        }               
       
                                                               
               

       
                                                                return;               
       
                                }       


        (4)读取数据

                        /*Read 1 byte from IIC*/       
                        uint8 iic_read_byte()       
                        {       

                                                        uint8 loop;               
       

                                                uint8 value = 0;               
       

                                               
               
       

                                                for(loop = 8; loop > 0;loop --)               
       

                                                {               
       

       
                                                                                        SCL = HIGH;                       
               

       
       
                                                                                       
                       
               

       
       
                                                                                        delay(50);                       
               

       
       
                                                                                       
                       
               

       
       
                                                                                        value <<= 1;                       
               

       
       
                                                                                       
                       
               

       
       
                                                                                        //读取1位数据                       
               

       
       
                                                                                        value |= SDA;                       
               

       
       
                                                                                       
                       
               

       
       
                                                                                        SCL = LOW;                       
               

       
       
                                                                                       
                       
               

       
       
                                                                                        delay(50);                       
               

       
                                 }       
                       
       
                                 return value;       
                        }       


                                                                (5)主机向从机发送ACK信号               
               
                                                                        void iic_send_ack()                       
                                                        {                       
               
       

                                                                                                                                                        SCL = HIGH;                               
                       
               
       
                                                                                                                                                SDA = LOW;                               
                       
               
       
                                                                                                                                                delay(50);                               
                       
               
       
                                                                                                                                               
                               
                       
               
       
                                                                                                                                                SCL = LOW;                               
                       
               
       
                                                                                                                                                delay(50);                               
                       
               
       
                                                                                                                                               
                               
                       
               
       
                                                                                                                                                return;                               
                       
               
       
                                                                                                }
继承事业,薪火相传
返回列表