编写C51源程序,要求实现如下功能:U1机循环向U2机发送整数00~99,再根据从U2机发来的返回值決定是继续发送新数(若返回值与发送值相同时) 还是重复发送当前数 《若返回值与发送值不同时,;U2机则是将从U1机上接收到的值作为返回值再发送给U1机。两机都将当前值以十进制数形式显示在各机的2位共阴极数码管上。
时间: 2024-02-15 17:01:16 浏览: 428
很高兴为您解答这个问题。以下是一个简单的C51源程序,满足您的需求。请注意,这个程序是基于Keil C51编译器编写的,如果您使用的是其他编译器,可能需要进行适当修改。
```
#include <reg51.h>
#define U1_TX P1_0 // U1发送引脚
#define U1_RX P1_1 // U1接收引脚
#define U2_TX P1_2 // U2发送引脚
#define U2_RX P1_3 // U2接收引脚
#define DISPLAY P2 // 数码管引脚
unsigned char current_num = 0; // 当前发送的数字
// U1向U2发送一个数字,返回值为U2发送的数字
unsigned char u1_send(unsigned char num) {
U1_TX = num; // 发送数字
while(!U2_RX); // 等待U2返回
DISPLAY = U2_RX; // 在数码管上显示U2返回的数字
return U2_RX; // 返回U2发送的数字
}
// U2向U1发送一个数字,返回值为U1发送的数字
unsigned char u2_send(unsigned char num) {
U2_TX = num; // 发送数字
while(!U1_RX); // 等待U1返回
DISPLAY = U1_RX; // 在数码管上显示U1返回的数字
return U1_RX; // 返回U1发送的数字
}
void main() {
while(1) {
unsigned char ret;
if(current_num > 99) {
current_num = 0; // 数字循环发送
}
ret = u1_send(current_num); // U1发送数字
if(ret == current_num) {
current_num++; // 如果U2返回的数字与发送的数字相同,发送下一个数字
}
else {
u2_send(ret); // 如果U2返回的数字与发送的数字不同,U2发送U1返回的数字
}
}
}
```
这个程序使用了两个函数`u1_send`和`u2_send`来实现U1和U2的通信。`u1_send`函数向U2发送一个数字,然后等待U2返回一个数字,并在数码管上显示U2返回的数字,最后返回U2发送的数字。`u2_send`函数与`u1_send`函数类似,只是它向U1发送一个数字,然后等待U1返回一个数字,并在数码管上显示U1返回的数字,最后返回U1发送的数字。
在`main`函数中,程序循环发送00~99的数字,并根据从U2返回的值决定是继续发送新数还是重复发送当前数。如果U2返回的数字与发送的数字相同,程序发送下一个数字;如果不同,程序发送U1返回的数字。程序使用一个全局变量`current_num`来记录当前发送的数字,并在数码管上显示当前数字。
阅读全文