#include

#include

typedef unsigned char uint8;

typedef unsigned int uint16;

#define SLAVEADDR  0x90                 //定义器件地址

#define nops()  do{_nop_();_nop_();_nop_();_nop_();_nop_();} while(0) //定义空指令

sbit SCL = P2^1;       //I2C  时钟

sbit SDA = P2^0;       //I2C  数据

void delay(uint16 n)

{

while (n--);

}

/**

* 函数: i2c_start()

* 功能: 启动i2c                  起始信号

*/

void i2c_start()

{

SCL = 1;

nops();

SDA = 1;

nops();

SDA = 0;

nops();

SCL = 0;

}

/**

* 函数: i2c_stop()

* 功能: 停止i2c

*/

void i2c_stop()

{

SCL = 0;

nops();

SDA = 0;

nops();

SCL = 1;

nops();

SDA = 1;

nops();

}

/**

* 函数: i2c_ACK(bit ck)

* 功能: ck为1时发送应答信号ACK,

*       ck为0时不发送ACK

*/

void i2c_ACK(bit ck)

{

if (ck)

SDA = 0;

else

SDA = 1;

nops();

SCL = 1;

nops();

SCL = 0;

nops();

SDA = 1;

nops();

}

/**

* 函数: i2c_waitACK()

* 功能: 返回为0时收到ACK

*       返回为1时没收到ACK

*/

bit i2c_waitACK()

{

SDA = 1;

nops();

SCL = 1;

nops();

if (SDA)

{

SCL = 0;

i2c_stop();

return 1;

}

else

{

SCL = 0;

return 0;

}

}

/**

* 函数: i2c_sendbyte(uint8 bt)

* 功能: 将输入的一字节数据bt发送

*/

void i2c_sendbyte(uint8 bt)

{

uint8 i;

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

{

if (bt & 0x80)

SDA = 1;

else

SDA = 0;

nops();

SCL = 1;

bt <<= 1;

nops();

SCL = 0;

}

}

/**

* 函数: i2c_recbyte( )

* 功能: 从总线上接收1字节数据

*/

uint8 i2c_recbyte()

{

uint8 dee, i;

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

{

SCL = 1;

nops();

dee <<= 1;

if (SDA)

dee = dee | 0x01;

SCL = 0;

nops();

}

return dee;

}

/**

* 函数: i2c_readbyte

* 输入: addr

* 功能: 读出一字节数据

* 返回值: 0->成功  1->失败

*/

bit i2c_readbyte(uint8 com, uint8 *dat)

{

i2c_start();

i2c_sendbyte(SLAVEADDR);    //地址

if (i2c_waitACK())

return 1;

i2c_sendbyte(com);        //控制字节

if (i2c_waitACK())

return 1;

i2c_start();

i2c_sendbyte(SLAVEADDR+1); //地址

if (i2c_waitACK())

return 1;

*dat = i2c_recbyte();      //读数据

i2c_ACK(0);                //因为只读一字节数据,不发送ACK信号

i2c_stop();

return 0;

}

/**

* UART初始化

* 波特率:9600

*/

void uart_init(void)

{

ET1=0;

TMOD = 0x21;        // 定时器1工作在方式2(自动重装)

SCON = 0x50;        // 10位uart,允许串行接受

TH1 = 0xFD;

TL1 = 0xFD;

TR1 = 1;

}

/**

* UART 发送一字节

*/

void UART_Send_Byte(uint8 dat)

{

SBUF = dat;

while (TI == 0);

TI = 0;

}

main()

{

uint8 ans;

uart_init();

while(1)

{

i2c_readbyte(0x43, &ans);

UART_Send_Byte(ans);

delay(50000);

}

}

i2c Linux 动态 波特率,i2c通信通过串口发送数据相关推荐

  1. C#串口通信—向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...

  2. C#串口通信-向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...

  3. i2c Linux 动态 波特率,如何在Linux中设置i2c总线的波特率?

    我有一台基于riko-3288处理器的ARM计算机.我还具有带有自定义内核(不带模块系统)的设备的Ubuntu映像. 我目前正在尝试为i2c总线设置最高100KHz的波特率.我不是Linux方面的专家 ...

  4. python树莓派串口通信实例_树莓派通过串口发送数据

    可以通过串口登陆树莓派,也可以通过串口向其他主机发送数据.树莓派的串口接受数据科技爱好者博客已经写过,可以参考这篇文章:树莓派与arduino串口通信实践.这篇文章教大家如果通过树莓派的串口发送数据. ...

  5. 安捷伦万用表--Agilent34401A数字万用表串口发送数据只上位机使用说明

    Agilent34401A数字万用表串口发送数据使用说明 安捷伦34410A万用表可以通过背后的RS232接口与电脑连接,进行串口通信. 仪表的串口有两种工作方式,一种是交互模式–既能接收命令,又能发 ...

  6. MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据

    MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据 [目录] - 1.无线通信模块设置 - 1.1 设置参数 - 1.2 调试步骤 - 2.按键与通信格式 - 2.1 P ...

  7. STM32串口发送数据

    串口通信经常作为开发调试的工具,所以先介绍下串口通信. 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程 ...

  8. 51单片机 串口发送数据(只是发送)

    51单片机 串口发送数据(只是发送)用于调试. #include <reg51.h>#define uchar unsigned char #define uint unsigned in ...

  9. electron+node+node-serialport nodeJs向串口发送数据,自定义收银客显设备

    文章目录 一.前言 二.了解客显设备 三.开始操作 index.html main.js 一.前言 electron+node+node-serialport 实现串口通信+electron-buil ...

最新文章

  1. 编译GCC4.8.2
  2. 帮小猴子准备的高数知识点
  3. 用边缘计算为智能制造提速,行业的破局者是他们
  4. js中的几种跨域方法
  5. Windows API入门系列之五 -一个正儿八经的SDK程序
  6. 升级ASP.Net Core项目
  7. stat函数(stat、fstat、lstat)
  8. 让zabbix图像中文不再是乱码
  9. 真机调试 —— An unknown error occurred.
  10. AcWing 796. 子矩阵的和
  11. python个人简历爬取_python爬取简历模板
  12. 强化学习入门1—多臂老虎机Multi-armed Bandits
  13. Nginx和HA负载
  14. JAVA学习(三)----常量和数据类型
  15. c 语言除法运算,C 语言简单加减乘除运算
  16. 2022年8月最新运维面试题-服务器上下架流程
  17. 使用python爬取某药品网站药品说明
  18. 如何用一句话激怒互联网人?
  19. SAP FICO 批量成本估算
  20. 潘多拉路由器搭建php,openwrt PandoraBox(潘多拉)如何安装使用SQM QoS

热门文章

  1. Qt - qmake工具介绍
  2. 计算机音乐创作比赛作品,2015年(第八届)中国大学生计算机设计大赛“计算机音乐创作类”决赛在我院隆重开幕...
  3. 每天阅读一个 npm 模块(5)- ee-first
  4. 【译】二进制代码相似性综述
  5. 悲惨的阿尔塞斯(全介绍+堕落全解析阿斯)
  6. Python 的学习脚印(1)
  7. 使用新的kdevelop,卸载了 visual code 编辑器
  8. 手把手演示Ngnix+Tomcat实现动静分离
  9. TeamViewer 连接的远程端 CPU 使用率高
  10. 天梯赛自主练习4补题 (如果20年去打有机会拿国二吧,国一不太可能,最后俩题都好难啊)