m0_74823380 2023-09-26 09:02 采纳率: 0%
浏览 16

C51单片机实现(4)要求从电脑端串口发送两个数字(两个数字之间用空格隔开),单片机能够返回这两个数字之和例如发送5 6,返回11.。代码

C51单片机实现(4)要求从电脑端串口发送两个数字(两个数字之间用空格隔开),单片机能够返回这两个数字之和例如发送5 6,返回11.。代码
(在接收缓冲区返回和

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-09-26 09:13
    关注

    该回复引自免费微信小程序-皆我百晓生:


    以下是C语言代码,用于在C51单片机上实现从计算机串口发送两个数字,并返回它们的和:

    #include <reg52.h>
    
    void UART_init() {
        TMOD |= 0x20;  // 设置计数器1为模式2
        SCON = 0x50;  // 设置串口为模式1,允许接收
        TH1 = 0xFD;  // 设置波特率为9600
        TL1 = 0xFD;
        TR1 = 1;  // 启动计数器1
    }
    
    unsigned char UART_receive() {
        unsigned char data;
        while (!RI);  // 等待接收完成
        data = SBUF;  // 读取接收到的数据
        RI = 0;  // 清除接收中断标志位
        return data;
    }
    
    void UART_send(unsigned char data) {
        while (!TI);  // 等待发送完成
        SBUF = data;  // 发送数据
        TI = 0;  // 清除发送中断标志位
    }
    
    void main() {
        unsigned char num1, num2;
        unsigned int sum;
        
        UART_init();
        
        while (1) {
            UART_send('E');  // 发送请求给计算机
            
            num1 = UART_receive() - '0';  // 接收第一个数字
            UART_send(num1 + '0');  // 发送确认接收的第一个数字
            
            while (UART_receive() != ' ');  // 等待接收到数字之间的空格
            
            num2 = UART_receive() - '0';  // 接收第二个数字
            UART_send(num2 + '0');  // 发送确认接收的第二个数字
            
            sum = num1 + num2;  // 计算两个数字之和
            
            UART_send(' ');  // 发送数字之间的空格
            UART_send(sum / 10 + '0');  // 发送求和结果的十位数
            UART_send(sum % 10 + '0');  // 发送求和结果的个位数
        }
    }
    

    以上代码使用C语言编写,并在C51单片机上通过串口与计算机通信。单片机会接收计算机发送的两个数字,并计算它们的和,然后将结果发送回计算机。

    评论

报告相同问题?

问题事件

  • 修改了问题 9月27日
  • 创建了问题 9月26日