// Master 單片機
#include <Wire.h>
void setup() {
Wire.begin(); // 初始化 I2C 通信
}
void loop() {
Wire.beginTransmission(8); // 開始向地址為 8 的設備發送數據
Wire.write("1"); // 發送字符 '1'
Wire.endTransmission(); // 結束傳輸
delay(500); // 等待 500 毫秒
}
----------------------------------------------------
// Slave 單片機
#include <Wire.h>
void setup() {
Wire.begin(8); // 加入 I2C 總線,地址為 8
Wire.onReceive(receiveEvent); // 註冊接收數據事件
pinMode(13, OUTPUT); // 設置 13 號引腳為輸出模式
}
void loop() {
delay(100);
}
// 當接收到數據時調用此函數
void receiveEvent(int howMany) {
while (Wire.available()) { // 循環,直到讀取完所有數據
char c = Wire.read(); // 讀取壹個字符
if (c == '1') { // 如果字符為 '1'
digitalWrite(13, HIGH); // 將 13 號引腳設置為高電平
} else {
digitalWrite(13, LOW); // 否則,將 13 號引腳設置為低電平
}
}
}
以上代碼僅供參考,具體的代碼可能會根據您的硬件和需求有所不同。在編寫代碼時,您需要考慮到您的單片機的具體型號、通信協議、端口號等因素。
..................................................
在兩個80C51單片機之間進行通信和控制,妳可以使用I2C協議。以下是壹個基本的示例,展示了如何在壹個單片機(Master)上編寫代碼,通過I2C協議控制另壹個單片機(Slave)的端口。
首先,我們需要在Master單片機上編寫代碼來發送I2C命令。這裏是壹個簡單的示例:
#include <reg51.h>
#include "I2C.h" // I2C通信庫
#define SLAVE_ADDRESS 0x50 // Slave單片機的I2C地址
void main() {
unsigned char command = 0x01; // 要發送的命令
I2C_Init(); // 初始化I2C
I2C_Start(); // 開始I2C通信
I2C_Write(SLAVE_ADDRESS); // 寫入Slave單片機的地址
I2C_Write(command); // 寫入命令
I2C_Stop(); // 停止I2C通信
while(1); // 無限循環,保持程序運行
}
然後,在Slave單片機上編寫代碼來接收I2C命令,並根據接收到的命令來控制端口。這裏是壹個簡單的示例:
#include <reg51.h>
#include "I2C.h" // I2C通信庫
#define SLAVE_ADDRESS 0x50 // Slave單片機的I2C地址
void main() {
unsigned char command;
I2C_Init(); // 初始化I2C
while(1) {
if (I2C_Read(SLAVE_ADDRESS, &command)) { // 如果接收到I2C命令
switch (command) {
case 0x01:
P1 = 0xFF; // 將P1端口設置為高電平
break;
// 其他命令...
}
}
}
}
請註意,這只是壹個基本的示例,妳可能需要根據妳的具體需求來修改這些代碼。例如,妳可能需要使用不同的命令來控制不同的端口,或者使用不同的命令來控制端口的不同狀態(如高電平、低電平等)。此外,妳還需要確保妳的單片機已經正確地連接了I2C總線,並且已經正確地設置了I2C地址。
希望這個信息對妳有所幫助!