用c语言编写代码将两个51单片机串行起来,其中一个通过P1口连接两个开关,另一个通过P2口连接两个300欧电阻和两个led,最终实现开关控制led亮灭
时间: 2024-03-12 20:49:56 浏览: 68
利用两个c51单片机控制led
好的,下面是一个简单的C语言代码示例,用于实现开关控制LED亮灭的功能。其中,一个单片机上通过P1口连接两个开关,另一个单片机上通过P2口连接两个300欧电阻和两个LED,两个单片机通过串口通信进行数据传输。
首先是第一个单片机的代码:
```c
#include <reg52.h>
#include <stdio.h>
// 定义串口通信参数
#define BAUDRATE 9600
#define SYSCLK 11059200UL
// 定义开关IO口和串口发送函数
sbit SW1 = P1^0;
sbit SW2 = P1^1;
void UART_Init() {
TMOD |= 0x20; // 设置为定时器1的工作方式2-自动重载
TH1 = 256 - SYSCLK/BAUDRATE/12; // 设置波特率为9600
TL1 = TH1;
TR1 = 1; // 启动定时器1
SM0 = 0; // 设置为模式1-8位异步收发,波特率可变
SM1 = 1;
REN = 1; // 使能串口接收
TI = 1; // 串口发送标志位
}
void UART_SendChar(char ch) {
SBUF = ch;
while(!TI);
TI = 0;
}
void main() {
UART_Init(); // 初始化串口通信
while(1) {
if(SW1 == 0) {
UART_SendChar('1'); // 发送字母'1',表示SW1被按下
while(SW1 == 0); // 等待按键释放
}
if(SW2 == 0) {
UART_SendChar('2'); // 发送字母'2',表示SW2被按下
while(SW2 == 0); // 等待按键释放
}
}
}
```
然后是第二个单片机的代码:
```c
#include <reg52.h>
#include <stdio.h>
// 定义串口通信参数
#define BAUDRATE 9600
#define SYSCLK 11059200UL
// 定义LED和电阻IO口和串口接收函数
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit R1 = P2^2;
sbit R2 = P2^3;
void UART_Init() {
TMOD |= 0x20; // 设置为定时器1的工作方式2-自动重载
TH1 = 256 - SYSCLK/BAUDRATE/12; // 设置波特率为9600
TL1 = TH1;
TR1 = 1; // 启动定时器1
SM0 = 0; // 设置为模式1-8位异步收发,波特率可变
SM1 = 1;
RI = 0; // 串口接收标志位
}
char UART_RecvChar() {
while(!RI);
RI = 0;
return SBUF;
}
void main() {
UART_Init(); // 初始化串口通信
while(1) {
char ch = UART_RecvChar(); // 接收从第一个单片机发送过来的数据
if(ch == '1') {
LED1 = ~LED1; // 点亮LED1
}
else if(ch == '2') {
LED2 = ~LED2; // 点亮LED2
}
}
}
```
这两个单片机的代码可以分别烧录到两个不同的51单片机中。需要注意的是,两个单片机需要连接在一起,并且需要将它们的串口通信引脚(TX、RX)连接在一起。此外,需要将两个单片机的地线连接在一起,以确保信号传输的可靠性。
阅读全文