aduadu

aduadu

0个粉丝

101

问答

0

专栏

45

资料

aduadu  发布于  2008-12-30 16:57:35
采纳率 0%
101个问答
14044

I2C总线万能程序(C语言)

 

"reg51.h"

include "intrins.h"

unsigned char SystemError; sbit SCL= P1^6; //定义串行时钟线所在口 使用时根据自己的需要来定义 sbit SDA= P1^7; //定义串行数据线所在口 使用时根据自己的?枰?炊ㄒ?

define SomeNOP(); {nop();nop();nop();nop();}

/-------------------------------------------------------------------------------- 调用方式:void AD7416_I2CStart(void) 2003/05/04 函数说明:私有函数,I2C专用 ---------------------------------------------------------------------------------/

void I2CStart(void) { EA=0; SDA=1; SCL=1; SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始 SDA=0; SomeNOP(); SCL=0; } /-------------------------------------------------------------------------------- 调用方式:void AD7416_I2CStop(void) 2003/05/04 函数说明:私有函数,I2C专用 ---------------------------------------------------------------------------------/ void I2CStop(void) { SCL=0; SDA=0; SomeNOP(); //数据线保持低,时钟线从低到高一次跳变,I2C通信停止 SCL=1; SomeNOP(); SDA=1; EA=1; } /-------------------------------------------------------------------------------- 调用方式:I2CAck(void) 2003/05/13 函数说明:私有函数,I2C专用,等待从器件接收方的应答 ACK BY AD7416 ---------------------------------------------------------------------------------/ WaitAck(void) { unsigned char errtime=255;//因故障接收方无ACK,超时值为255。 SDA=1; SCL=1; SystemError=0x10; while(SDA) { errtime--; if(!errtime) { AD7416_I2CStop(); AD7416_SystemError=0x11; //出错后给全局变量赋值 return; } } SCL=0; } /-------------------------------------------------------------------------------- 调用方式:void SendAck(void) ﹫2003/05/13 函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,应答信号。 ---------------------------------------------------------------------------------/ void SendAck(void) { SDA=0; SomeNOP(); //数据线保持低,时钟线发生一次从高低的跳变 发送一个应答信号 SCL=1; SomeNOP(); SCL=0; } /-------------------------------------------------------------------------------- 调用方式:void SendAck(void) ﹫2003/05/13 函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,非应答信号。 --------------------------------------------------------------------------------/ void SendNotAck(void) { SDA=1; SomeNOP(); //数据线保持高,时钟线发生一次从高低的跳变 没有应答 SCL=1; SomeNOP(); SCL=0; } /-------------------------------------------------------------------------------- 调用方式:void I2CSend(uchar ch) 2003/05/13 函数说明:私有函数,I2C专用 ---------------------------------------------------------------------------------/ void I2CSendByte(Byte ch) { unsigned char i=8; while (i--) { SCL=0;nop(); SDA=(bit)(ch&0x80); ch<<=1; SomeNOP(); //时钟保持低可以发送数据 SCL=1; SomeNOP(); } SCL=0; } /-------------------------------------------------------------------------------- 调用方式:uchar I2CReceive(void) 2003/05/13 函数说明:私有函数,I2C专用 ---------------------------------------------------------------------------------/ Byte I2CReceiveByte(void) { unsigned char i=8,data=0; SDA=1; while (i--) { data<<=1; SCL=0;SomeNOP(); SCL=1;SomeNOP(); //时钟做一次从低到高的跳变 可以接收数据 data|=SDA; } SCL=0; return data; }

我来回答
回答76个
时间排序
认可量排序

zhihuizhiming

0个粉丝

0

问答

0

专栏

0

资料

zhihuizhiming 2015-03-04 14:18:31
认可0
谢谢              谢。

hisi3518C

0个粉丝

3

问答

0

专栏

0

资料

hisi3518C 2015-03-06 09:17:36
认可0
感谢LZ的无私分享。。。。。

lubing521

0个粉丝

20

问答

0

专栏

11

资料

lubing521 2015-03-06 12:09:52
认可0
好牛逼 的程序

alanredbull

0个粉丝

0

问答

0

专栏

0

资料

alanredbull 2015-08-08 18:05:22
认可0
谢谢分享 看看先啊

fancong

0个粉丝

15

问答

0

专栏

2

资料

fancong 2015-08-10 10:54:57
认可0
看看,这个应该是标准的I2C读写吧!不是GPIO 模拟I2C吧!

keke87

0个粉丝

1

问答

0

专栏

0

资料

keke87 2015-08-27 17:47:52
认可0
学习下,谢谢分享!

yjsstk

0个粉丝

2

问答

0

专栏

1

资料

yjsstk 2015-11-14 11:59:12
认可0
看看是什么。。。。。

foxfire123

0个粉丝

0

问答

0

专栏

0

资料

foxfire123 2016-01-11 21:08:21
认可0
感谢LZ分享,这个不是GPIO模拟I2C吧

cfgrpg

0个粉丝

7

问答

0

专栏

1

资料

cfgrpg 2016-01-12 10:49:00
认可0
;PI2C总线万能程序(C语言) [修改]

yds7462

0个粉丝

3

问答

0

专栏

0

资料

yds7462 2016-01-26 10:57:40
认可0
看看么么么么么么么么么么么么么么么么么吗

kennybluezy

0个粉丝

16

问答

0

专栏

0

资料

kennybluezy 2016-01-27 13:17:55
认可0
什么东西,看看

blacktulip7

0个粉丝

3

问答

0

专栏

0

资料

blacktulip7 2016-02-24 15:12:47
认可0
51单片机 IO模拟I2C,鉴定完毕。

JACK_ZHANG

0个粉丝

5

问答

0

专栏

0

资料

JACK_ZHANG 2016-05-03 16:43:09
认可0
看看先,不知道是什么

JACK_ZHANG

0个粉丝

5

问答

0

专栏

0

资料

JACK_ZHANG 2016-05-03 16:44:58
认可0
可以,能改总线速率就更好了

药导

1个粉丝

23

问答

0

专栏

11

资料

药导 2016-05-03 17:17:46
认可0
马克一下,先谢谢楼主,目前暂时用不到

hot219

0个粉丝

2

问答

0

专栏

0

资料

hot219 2016-05-25 10:05:18
认可0
感谢楼主分享

firefly1123

0个粉丝

1

问答

0

专栏

0

资料

firefly1123 2016-05-25 17:25:35
认可0
没啥说的先顶在下!!!!!!!!!!

orinwu

1个粉丝

4

问答

0

专栏

0

资料

orinwu 2016-06-20 17:06:12
认可0
你好 ,学习下 谢谢!

godlovesummer

0个粉丝

0

问答

0

专栏

0

资料

godlovesummer 2016-07-07 14:29:08
认可0
学习学习一下

dwt_guard

0个粉丝

9

问答

0

专栏

0

资料

dwt_guard 2016-07-20 10:06:35
认可0
看看是啥,辣么高级
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区