智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3002|回复: 8
打印 上一主题 下一主题

[编程类] XS128 IIC 通讯源代码。

[复制链接]

1

主题

22

帖子

0

精华

高级会员

Rank: 4

积分
637
威望
329
贡献
204
兑换币
215
注册时间
2012-12-20
在线时间
52 小时
毕业学校
河北省实验中学
跳转到指定楼层
1#
发表于 2013-1-26 00:26:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2贡献
XS128 IIC 通讯源代码。哪位大侠能写一下啊。。这几天快疯了。。。自己写的一直不知道错那里了。。。

0

主题

24

帖子

0

精华

高级会员

Rank: 4

积分
525
威望
314
贡献
113
兑换币
65
注册时间
2012-2-3
在线时间
49 小时
毕业学校
南昌大学
2#
发表于 2013-3-16 15:13:13 | 只看该作者
同求啊,不知道怎么回事,用了51都可以,移植到XS128就出问题了
回复

使用道具 举报

17

主题

148

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1291
威望
595
贡献
390
兑换币
195
注册时间
2012-11-15
在线时间
153 小时
毕业学校
德州学院
3#
发表于 2013-3-16 21:33:21 | 只看该作者

void iic_delay()        //5us延时
{
_asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop);
_asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop);
_asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop);
}

void delay_50us(uint t)
{
    uchar j;
        for(;t>0;t--)
        for(j=124;j>0;j--);
}

/*********************************************************************/
/**************               I2C通信部分              ***************/
/*********************************************************************/
void iic_start()               //函数功能:I2C通信开始
{
  scl_dir = 1;
  sda_dir = 1;
        sda=1;
    iic_delay();
        scl=1;
    iic_delay();
        sda=0;
        iic_delay();
       
}

void iic_stop()                //函数功能:I2C通信停止
{
   scl_dir = 1;
   sda_dir = 1;
        sda=0;
        iic_delay();
        scl=1;
        iic_delay();
        sda=1;
        iic_delay();
   scl_dir = 0;
   sda_dir = 0;
       
}

void iic_ack()                 //函数功能:I2C通信查应答位
{       
  char i=0;       
  scl_dir = 1;
  sda_dir = 0;
  scl = 0;
        iic_delay();
        iic_delay();
  scl = 1;
        iic_delay();
//  if(sda == 1)
//  {
//     for(;;);  
//  }
  while((sda==1)&&(i<250))i++;
        iic_delay();
  scl = 0;
        iic_delay();
        iic_delay();
}

void iic_write_byte(uchar wdata)//函数功能:向I2C从机写入一个字节
{
     uchar i,temp,temp1;
    scl_dir = 1;
    sda_dir = 1;
         temp1=wdata;
     for(i=0;i<8;i++)
        {
        scl = 0;
                iic_delay();
                temp=temp1;
                temp=temp&0x80;
                if(temp==0x80)
                        sda=1;                               
                else
                        sda=0;
                        iic_delay();
                        scl=1;
                        iic_delay();
                        scl=0;
                        iic_delay();
                        temp1=temp1<<1;
                       
        }
       sda_dir = 0;
}
char iic_read_byte(void)                         //函数功能:从I2C从机中读出一个字节
{
     uchar op;
         char data_data;
    scl_dir = 1;
    sda_dir = 0;
     for(op=0;op<8;op++)
        {       
            data_data=data_data<<1;
                sda=1;
                iic_delay();
                scl=0;            
                iic_delay();
                scl=1;               
                iic_delay();
                if(sda==1)
            data_data|=0x01;
        }
        return data_data;
}
void iic_write(uchar byte_add,uchar wdata)//函数功能:按地址写入一字节数据
{
     uchar t;
         t=(IIC_WRITE<<1);
         iic_start();
         iic_write_byte(t);
         iic_ack();
         iic_write_byte(byte_add);
         iic_ack();
         iic_write_byte(wdata);
         iic_ack();
         iic_stop();
}
char iic_read(uchar byte_add)                   //函数功能:按地址读出一字节数据
{
     uchar t;
         char m;
         t=(IIC_WRITE<<1);
         iic_start();
         iic_write_byte(t);
         iic_ack();
         iic_write_byte(byte_add);
         iic_ack();
         t=((IIC_READ<<1)|0x01);
         iic_start();
         iic_write_byte(t);
         iic_ack();
         m=iic_read_byte();
         //iic_ack();
         iic_stop();
         return m;
}
回复

使用道具 举报

1

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
320
QQ
威望
149
贡献
81
兑换币
90
注册时间
2013-4-17
在线时间
45 小时
4#
发表于 2013-8-6 19:53:17 | 只看该作者
┦H3ゞ峰峰ぎ 发表于 2013-3-16 21:33
void iic_delay()        //5us延时
{
_asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm( ...

scl_dir = 1;这句的意思是把scl设置为输出口还是?scl_dir这个是什么意思?
回复

使用道具 举报

13

主题

329

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4226
威望
2030
贡献
1164
兑换币
977
注册时间
2012-9-24
在线时间
516 小时
5#
发表于 2013-8-12 11:55:25 | 只看该作者
┦H3ゞ峰峰ぎ 发表于 2013-3-16 21:33
void iic_delay()        //5us延时
{
_asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm( ...

赞一个
回复

使用道具 举报

54

主题

782

帖子

1

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3569
QQ
威望
1896
贡献
243
兑换币
1222
注册时间
2012-11-24
在线时间
715 小时
6#
发表于 2013-8-13 17:35:41 | 只看该作者
forever、 发表于 2013-8-6 19:53
scl_dir = 1;这句的意思是把scl设置为输出口还是?scl_dir这个是什么意思?

,自己研究研究吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

8

主题

324

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1209

活跃会员奖章优秀会员奖章

威望
528
贡献
373
兑换币
291
注册时间
2013-7-24
在线时间
154 小时
7#
发表于 2013-8-22 08:24:49 | 只看该作者
sda_dir = 0;设为输入口,前面还有宏定义,他应该没有给出来而已~~~~
回复

使用道具 举报

14

主题

355

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1675
威望
772
贡献
511
兑换币
506
注册时间
2013-2-27
在线时间
196 小时
8#
发表于 2013-8-30 19:34:25 | 只看该作者
yyyzrxh 发表于 2013-8-13 17:35
,自己研究研究吧

能问一下,这个iic是标准的吧。只要是iic器件就能用是吧。
回复

使用道具 举报

50

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2905

活跃会员奖章优秀会员奖章

威望
1424
贡献
707
兑换币
798
注册时间
2012-10-17
在线时间
387 小时
9#
发表于 2013-8-31 13:16:53 | 只看该作者
┦H3ゞ峰峰ぎ 发表于 2013-3-16 21:33
void iic_delay()        //5us延时
{
_asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm( ...

"t=(IIC_WRITE<<1);"???在哪里?能发一份完整的程序参考下吗?1182932426@qq.com谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 01:02 , Processed in 0.165965 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表