实例1 单片机甲、乙双机串行通信,双机RXD和TXD相互交叉相连,甲机P1口接8个开关,乙机P1口接8个发光二极管。甲机设置为只能发送不能接收的单工方式。要求甲机读入P1口的8个开关的状态后,通过串行口发送到乙机,乙机将接收到的甲机的8个开关的状态数据送入P1口,由P1口的8个发光二极管来显示8个开关的状态。实现代码
时间: 2024-03-22 19:38:38 浏览: 29
以下是一个基于51单片机的实现代码,供参考:
甲机代码:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit TXD = P3^1;
void delay(uint xms) {
uint i, j;
for (i = xms; i > 0; i--)
for (j = 112; j > 0; j--);
}
uchar read_switch() {
uchar i, val = 0;
for (i = 0; i < 8; i++) {
val |= P1 & (1 << i);
if (i != 7)
val <<= 1;
}
return val;
}
void send_byte(uchar dat) {
uchar i;
TXD = 0;
_nop_();
_nop_();
for (i = 0; i < 8; i++) {
TXD = dat & 0x01;
dat >>= 1;
delay(1);
}
TXD = 1;
delay(1);
}
void main() {
uchar switch_val;
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
while (1) {
switch_val = read_switch();
send_byte(switch_val);
delay(100);
}
}
```
乙机代码:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0;
uchar receive_byte() {
uchar i, dat = 0;
for (i = 0; i < 8; i++) {
while (!RI);
dat |= SBUF & (0x01 << i);
RI = 0;
}
return dat;
}
void display_switch(uchar switch_val) {
uchar i;
for (i = 0; i < 8; i++) {
LED = (switch_val >> i) & 0x01;
delay(100);
}
}
void main() {
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
while (1) {
display_switch(receive_byte());
}
}
```
需要注意的是,以上代码只是基于51单片机的实现,对于其他单片机需要进行相应的修改。同时,还需要根据实际接口及端口来进行相应的配置。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)