数据载入中...  
数据载入中...
时 间 记 忆
数据载入中...
最 新 评 论
数据载入中...
专 题 分 类
数据载入中...
最 新 日 志
数据载入中...
最 新 留 言
数据载入中...
搜 索
用 户 登 录
数据载入中...
友 情 连 接
博 客 信 息
数据载入中...


 
Mega8学习笔记(10.3.1)-------cocoguojia 原创 
[ 2008-6-12 11:06:00 | By: 嘉哥 ]
 

说明:

      Mega8学习笔记(10.1)里我会用采用CVAVR自带的I2C系统函数写24C02

      Mega8学习笔记(10.2)里我会用像51单片机那样写24C02的方法来写i2c

      Mega8学习笔记(10.3)里我会用avr单片机独特的方式写24C02

以上三种方法均是IO口模拟I2C

 

以下就是用avr单片机独特的方式写24C02,就是用IO口方向的改变来是IO口的电平产生相应的变化,sclsda两线上要有4k710k的上拉电阻,在程序中有两处 //***********注意************

第一处:要注意优先级

第二处:要注意位移的次数,不要多移哦

 

现象和(10.1)一样,注释省略

 

#i nclude <mega8.h>  

#i nclude <delay.h>

 

#define u8 unsigned char

 

#define SCL DDRC.4

#define SDA DDRC.5

 

#define SCL_INPUT PINC.4

#define SDA_INPUT PINC.5

 

#define SCL_OUTPUT PORTC.4

#define SDA_OUTPUT PORTC.5

 

//2us的延时等待稳定

#define SCL_HIGHT  SCL=0 ;delay_us(2);

#define SCL_LOW    SCL=1 ;delay_us(2);

 

#define SDA_HIGHT  SDA=0 ;delay_us(2);

#define SDA_LOW    SDA=1 ;delay_us(2);

 

 

void init(void)

{

      ACSR=0x80;

      PORTB=0XFF;

      DDRB=0XFF;

      SCL_OUTPUT=0;

      SDA_OUTPUT=0;

      SCL_LOW;

      SDA_LOW;

}

 

void start(void)

{

      SDA_HIGHT;

      SCL_HIGHT;

      SDA_LOW;

      SCL_LOW;

}

 

 

u8 rece_ack(void)

{ 

      u8 n;

      SDA_HIGHT;

      SCL_HIGHT;

      if(SDA_INPUT==1)

      {

            n=1;    

      }

      else

      {

            n=0;

      }

      SCL_LOW;

      return n;

}

 

void write(u8 w_data)

{

      u8 i;

      for(i=0;i<=7;i++)

      {

         

            if( (w_data&0x80) ==0x80)     //**********注意***********

            {

                  SDA_HIGHT;

            }

            else

            {

                  SDA_LOW;

            }

            w_data<<=1;

            SCL_HIGHT;

            SCL_LOW;

      }

     

      while( rece_ack() )

      {

            ;

      }

}

 

void stop (void)

{

      SDA_LOW;

      SCL_HIGHT;

      SDA_HIGHT;

}

 

由于博客文章字数的限制,我将在Mega8学习笔记(10.3.2) 中继续写此文章

 
  • 标签:i2c Mega8 cvavr 程序 
  •  
    Re:Mega8学习笔记(10.3.1)-------cocoguojia 原创
    [ 2008-6-17 15:34:47 | By: 访客10000(游客) ]
     
    访客10000(游客)你太厉害了,你的很多文章都被加为“精华”了,祝贺!
     
    个人主页 | 引用 | 返回 | 删除 | 回复
    发表评论:
    数据载入中...
    Powered by McuBLog.