雙機通信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.pswp.cn/news/392990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392990.shtml
英文地址,請注明出處:http://en.pswp.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