双机通信c语言程序,上传一个自己编写的I2C双机通信程序

本帖最后由 micro_听海 于 2012-11-24 19:58 编辑

这几天一直在搞AVR的twi(twi就是i2c)双机通信程序,使用的是两块arduino开发板。因为最总要这个通信程序最总是要放在winavr的编译环境中,所以没有使用arduino自带的库函数。但是这没关系,因为arduino IDE和winavr编译器的内核都是开源gcc,所以在arduino ide上同样可以使用winavr的语言,赞ARDUINO!

硬件上就是arduino的SCL(A5引脚)和SDA(A4引脚)互联,当然还有GND。

下面上程序

先上发送端

#define  uchar  unsigned char

#define  STATUS  (TWSR&0xf8)

#define  SLA_W    0x32

#define  SLA_R    0x33

#define  SLAVER_ADDRESS     0x32

#define  START              0x08

#define  RE_START           0x10

#define  MT_SLA_WRITE_ACK   0x18

#define  MT_SLA_READ_ACK    0x40

#define  MT_DATA_ACK        0x28

#define  MT_READ_ACK        0x58

void Start(void)//主机向从机发送i2c起始信号

{

TWCR=(1<

while(!(TWCR&(1<

}

void Stop(void)//主机发送i2c停止信号

{

TWCR=(1<

}

void Load(uchar i)//主机发送一个字节数据或地址

{

TWDR=i;

TWCR=(1<

while(!(TWCR&(1<

}

uchar SendByte(uchar data)//主机以广播方式向从机发送一个字节数据data

{

Start();//开始

Load(0);//发送广播地址0

Load(data);//发送数据

Stop();//停止

return 1;//发送成功,返回1;

}

void Init_Io(void)//io口初始化函数

{

DDRC&=~((1<<4)&(1<<5)&(1<<2));

PORTC|= (1<<4)|(1<<5)|(1<<2);//使能scl,sda引脚内部上拉电阻

TWCR=(1<

TWBR=32;//波特率 200k

}

uchar temp;

void setup( )

{

Init_Io();

Serial.begin(9600);

}

void loop( )

{

for(temp=0;temp<10;temp++)

{

SendByte(temp);  //向从机发送0到9的数据

delay(8);

}

}

接收端程序

#define  uchar  unsigned char

#define  STATUS  (TWSR&0xf8)

#define  SLA_W    0x32

#define  SLA_R    0x33

#define  TWI_ADDRESS        0x32

#define  START              0x08

#define  RE_START           0x10

#define  MT_SLA_WRITE_ACK   0x18

#define  MT_SLA_READ_ACK    0x40

#define  MT_DATA_ACK        0x28

#define  MT_READ_ACK        0x58

#define TW_SR_DATA_ACK                0x80

void Init_Io(void)

{

DDRC&=~((1<<4)&(1<<5)&(1<<2));

PORTC|= (1<<4)|(1<<5)|(1<<2);

TWAR=TWI_ADDRESS|(1<

TWCR=(1<

asm("CLI");//关闭全局中断,采用轮询方式接受数据

}

void setup( )

{

Init_Io();

Serial.begin(9600);

}

void loop( )

{

uchar temp1,temp2;

TWCR=(1<

while((TWCR&(1<

temp1=STATUS;

temp2=TWDR;

if(temp1==0x90)

{

Serial.println(temp2,DEC);//打印接收数据

}

}

上述程序已被验证,打开接受端arduino自带的串口监控器可以看到0到9的不断重复数据。

程序中没用到的宏可自行删除,不影响最后结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode684. 冗余连接(并查集)

在本问题中, 树指的是一个连通且无环的无向图。 输入一个图&#xff0c;该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间&#xff0c;这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。每一…

Windows Server 2008 部署权限管理RMS

1.1 实战&#xff1a;部署权限管理 试验目的&#xff1a; 在单域环境中部署活动目录权限管理服务&#xff0c;实现文档的保护。 试验环境&#xff1a; ? DCServer安装Windows Server 2008企业版&#xff0c;是ess.com的域控制器&#xff0c;安装企业CA。 ? RMSServer安装Wind…

day5 Python爬虫学习

一 实现京东上的自动搜索并提取信息 from selenium import webdriver # 导入键盘Keys from selenium.webdriver.common.keys import Keys import timedriver webdriver.Chrome()# 检测代码块 try:# 隐式等待&#xff0c;等待标签加载driver.implicitly_wait(10)# 往京东主页…

虚拟dom添加虚拟dom_虚拟DOM缓慢。 认识记忆化的DOM

虚拟dom添加虚拟domby Sindre Osen Aarsaether通过Sindre Osen Aarsaether 虚拟DOM缓慢。 符合已记忆的DOM。 (The Virtual DOM is slow. Meet the Memoized DOM.) 超越虚拟DOM和状态管理 (Moving beyond the Virtual DOM and State Management) The virtual DOM was a fantas…

编写一个字节数的rtu C语言校验程序,Modbus通信协议中CRC校验的快速C语言算法

Modbus通信协议中CRC校验的快速C语言算法2004年第11期            福 建 电 脑  63Modbus通信协议中CRC校验的快速C语言算法孟开元(西安石油大学计算机学院陕西西安710065)【摘 要】 本文主要讨论了Modbus通信协议的RTU帧格式中常用的错误校验方法,即循环冗…

leetcode1319. 连通网络的操作次数(并查集)

用以太网线缆将 n 台计算机连接成一个网络&#xff0c;计算机的编号从 0 到 n-1。线缆用 connections 表示&#xff0c;其中 connections[i] [a, b] 连接了计算机 a 和 b。 网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。 给你这个…

Codeforces 600E Lomsat gelral (树上启发式合并)

题目链接 Lomsat gelral 占坑……等深入理解了再来补题解…… #include <bits/stdc.h>using namespace std;#define rep(i, a, b) for (int i(a); i < (b); i)typedef long long LL;const int N 600010;int n; int cc[N], col[N], sz[N], son[N]; LL ans[N];vect…

如何让CloudStack使用KVM创建Windows实例成功识别并挂载数据盘

问题产生背景&#xff1a; 使用CloudStack KVM组合进行资源池纳管工作&#xff0c;通过ISO镜像文件创建了两个模板&#xff1a; RHEL6U3 64位系统以及WindowsServer2008 R2 SP1 64位系统。然后通过模板创建实例&#xff0c;挂载外接存储&#xff0c;实例启动后&#xff0c;通过…

云计算openstack介绍

转载于:https://www.cnblogs.com/WIU1905/p/11107593.html

C语言Node lt T gt,c语言论坛填空;#includelt;stdio.hgt;# 爱问知识人

填空&#xff1b;#include #include #define N 6typedef struct node {int data;struct node *next;填空&#xff1b;#include #include #define N 6typedef struct node {int data;struct node *next;} NODE;void fun(NODE *h){ NODE *p, *q; int t;/**********found*********…

gitlab设置邮件服务器_如何设置您自己的一次性电子邮件服务器

gitlab设置邮件服务器by Oren Geva由Oren Geva 如何设置您自己的一次性电子邮件服务器 (How To Setup Your Own Disposable Email Server) Disposable email services are online services that provide temporary email addresses for registering or signing up on websites…

leetcode442. 数组中重复的数据

给定一个整数数组 a&#xff0c;其中1 ≤ a[i] ≤ n &#xff08;n为数组长度&#xff09;, 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗&#xff1f; 示例&#xff1a; 输入: [4,3,2…

C语言基础注意点

一、基础知识篇 &#xff08;一&#xff09;关键字 1&#xff0c;存储类型 A、auto 声明自动变量&#xff0c;一般不使用 B、static 声明静态变量 C、extern 声明变量是在其他文件正声明&#xff08;可看做引用变量&#xff09; D、register 声明积有器变量 2、常用…

**加密解密基础、PKI及SSL、创建私有CA**

进程间通信 socket通信 客户端-->请求--> 路由转发 --> 服务端&#xff0c;取出资源 --> 封装为可响应给客户端的请求报文从接收请求端口发出 SSL/TLS协议的实现 OpenSSL OpenSSL程序组件 1234[rootlocalhost CA]# rpm -ql openssl /usr/lib/libcrypto.so.10 //加…

json 文件打读取

1。获取文件路径 /** BookController.class.getClassLoader().getResource("static/json/book_nav.json").getPath() 获取当期运行时的项目json文件路径*/JSONObject json JsonResourceUtils.getJsonObjFromResource(BookController.class.getClassLoader().getReso…

16F877A和24C02通信汇编语言,pic单片机IIC通信读24C02程序例 16F877A 主频4M

#define _iic_h_//pic单片机IIC通信初始化函数声明void iiccsh(void);//pic单片机IIC通信读外围设备函数声明//功能&#xff1a;传送一个8位地址&#xff0c;返回一个8位数据unsigned char iicread(unsigned char data);//pic单片机IIC通信给外围器件发送函数声明//功能&#x…

如何从XMLHttpRequest创建自定义获取API

What is your worst nightmare?你最可怕的噩梦是什么&#xff1f; That sounded dark, but it’s not a rhetorical question. I really want to know because I am about to tell you mine. Along the way, we will learn some things like how the fetch API works and als…

leetcode637. 二叉树的层平均值

给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 1&#xff1a;输入&#xff1a;3/ \9 20/ \15 7 输出&#xff1a;[3, 14.5, 11] 解释&#xff1a; 第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。/*** Definition for a b…

5.3 上午

观看英语课程——《恋练有词》 学习Linux 转载于:https://www.cnblogs.com/bgd140206110/p/6801164.html

AD库转换为KiCAD库的方法

AD库转换为KiCAD库的方法 参照博主另外一篇文档&#xff1a; AD转换为KiCAD的方法&#xff0c;点击此处转载于:https://www.cnblogs.com/zhiqiang_zhang/p/11109560.html