- 收藏
- 点赞
- 分享
- 举报
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; }
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
-
2019-01-18 09:16:56
-
2013-04-26 14:19:40
-
02008-11-24 10:13:32
-
22020-03-17 11:56:06
-
02018-07-23 08:49:20
-
42019-12-20 09:46:51
-
2008-08-24 12:44:37
-
2012-12-04 13:21:40
-
22019-05-24 18:19:17
-
02019-03-22 09:52:53
-
22020-02-19 11:30:44
-
42018-09-25 12:19:17
-
2020-11-15 17:56:10
-
2017-07-14 20:57:07
-
2021-11-28 15:02:25
-
2020-05-18 10:09:36
-
62015-11-18 15:51:59
-
2018-09-01 11:11:36
-
2020-09-14 08:32:54
-
10RV1106的低功耗和休眠唤醒功能
-
10海思平台(Hi3516DV500),设置完ldc参数后 工作异常
-
5rv1126-dc-201 安装hi3881.ko wifi驱动成功后 启动connmand服务,系统就崩了
-
10ss928编码的h264帧流,用RTSP传输到电脑,VLC播放不了是什么情况?
-
10我运行rv1126的开发环境后,编译demo提示没有opencv,自行编译安装后没有解决,请问这个怎么处理呢?板子是easy eai nano
-
50CPS-1848 link不上FPGA。
-
10想问一下各位大佬们,关于VI配置成8Lan LVDS模式的相关问题
-
10基于SS928的NNIE做人脸检测算法,模型转换异常
-
10RV1126 38板有imx415的镜像吗?
-
5海思3519dv500 LT9611配置设备树问题
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明