STC89C52RCPC 端通过串口(STC-ISP 的串口助手)向开发板发送字符串(字符串以’#’字 母结尾,波特率 2400),规则如下: 发送“begin#”:开发板的数码管开始循环显示 0-9,同时开发板通过串 口向 PC 端发送当前显示的数字。 发送“stop#”:停止数码管显示,同时也停止向 PC 端发送数据。 其他字符串:向 PC 端发送字符串“ERROR!”(如果当前正在循环发送数 据,先停止发送后再发送“ERROR!”,数码管同时也停止显示)。请编写代码
时间: 2024-02-29 16:51:24 浏览: 73
RCPC MODULATION:使用RCPC调制传输和接收图像-matlab开发
以下是一个基本的代码示例,实现了您所描述的功能:
```
#include<reg52.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1 = P0^0; // 数码管控制端口
uchar data buff[20]; // 串口缓冲区
uchar data i; // 缓冲区计数器
bit begin_flag = 0; // 开始标志位
bit stop_flag = 0; // 停止标志位
// 数码管显示函数
void display(uchar num) {
switch(num) {
case 0: D1 = 0x3f; break;
case 1: D1 = 0x06; break;
case 2: D1 = 0x5b; break;
case 3: D1 = 0x4f; break;
case 4: D1 = 0x66; break;
case 5: D1 = 0x6d; break;
case 6: D1 = 0x7d; break;
case 7: D1 = 0x07; break;
case 8: D1 = 0x7f; break;
case 9: D1 = 0x6f; break;
default: D1 = 0xff; break;
}
}
// 串口中断服务函数
void uart() interrupt 4 {
if(RI) { // 接收中断
RI = 0; // 清除中断标志
buff[i] = SBUF; // 读取接收到的数据
i++;
if(buff[i-1] == '#') { // 字符串结束符,处理接收到的指令
if(strncmp(buff, "begin", 5) == 0) { // 开始指令
begin_flag = 1;
stop_flag = 0;
i = 0;
}
else if(strncmp(buff, "stop", 4) == 0) { // 停止指令
begin_flag = 0;
stop_flag = 1;
i = 0;
}
else { // 其他指令
begin_flag = 0;
stop_flag = 1;
i = 0;
SBUF = 'E'; // 发送错误信息
while(!TI); // 等待发送完成
TI = 0;
SBUF = 'R';
while(!TI);
TI = 0;
SBUF = 'R';
while(!TI);
TI = 0;
SBUF = 'O';
while(!TI);
TI = 0;
SBUF = 'R';
while(!TI);
TI = 0;
SBUF = '!';
while(!TI);
TI = 0;
}
}
}
if(TI) { // 发送中断
TI = 0; // 清除中断标志
}
}
// 主函数
void main() {
TMOD = 0x20; // 定时器1,模式2(8位自动重载)
TH1 = 0xfd; // 波特率2400
TL1 = 0xfd;
TR1 = 1; // 启动定时器1
SCON = 0x50; // 串口模式1,允许接收
ES = 1; // 开启串口中断
EA = 1; // 开启总中断
i = 0;
while(1) {
if(begin_flag) { // 循环显示数字
for(uchar j=0; j<10; j++) {
display(j);
SBUF = j + '0'; // 发送数字
while(!TI); // 等待发送完成
TI = 0;
delay(1000); // 延时1秒
if(stop_flag) break; // 收到停止指令,退出循环
}
}
else { // 停止显示
display(0);
if(stop_flag) { // 收到停止指令,清除标志位
begin_flag = 0;
stop_flag = 0;
}
}
}
}
```
请注意,此代码示例只是一种可能的实现方法,您可以根据您的具体需求进行修改和优化。
阅读全文