2301_77450812 2023-09-15 00:03 采纳率: 75%
浏览 3
已结题

这个程序实现的是51单片机在电脑端发送两个个位数,单片机接收到他们的和,这个程序是对的,我想问的是count初始化的问题

我的疑惑是,如果count一开始赋值为2,它第一次加入中断函数不是马上进行加法求和,可这个时候不是没有给data1和data2赋值吗?那不是没有已经赋值了的data1和data2用来进行运算吗?


#include <REGX52.H>
#include "UART.h"

unsigned char data1,data2,count=2,sum;

void main()
{
    UART_Init();
    while(1)
    {
        
    }
}

void UART_Routine() interrupt 4    
{
    if(RI==1)                      //返回电脑输入第一个数据函数,十六进制
    {
        RI=0;
        if(count==0)
        {
            data1=SBUF;
            count=1;
        }
        else if(count==1)
        {
            data2=SBUF;
            count=2;
        }
    }
    if(count==2)
    {
        sum=data1+data2;
        if(sum<=9)                        //hex模式相当于发送ASCII值,hex模式接收该ASCII对应的十六进制数,当sum<10时,sum不变例如ASCII=9对应0x09
            UART_SendByte(sum);
        else
        {
               sum=sum+6;                    //hex模式相当于发送ASCII值,hex模式接收该ASCII对应的十六进制数,当sum>10时,sum+6例如ASCII=16对应0x10
               UART_SendByte(sum);
        }
        count=0;
    }
        
}
  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-15 00:51
    关注

    引用 皆我百晓生 小程序回复内容作答:
    在这个程序中,count的初始值设为2是为了确保在第一次中断时不会进入计算sum的部分。因为在第一次中断时,data1和data2还没有被赋值,直接进行加法求和会导致错误的结果。所以,在第一次中断时,程序只是将接收到的数据赋值给data1和data2,并将count的值设为1和2,等待下一次中断时再进行加法求和操作。

    在下一次中断时,程序会先判断count是否为2,如果是,则表示已经接收到了两个数据,并可以进行加法求和操作。这样可以确保在进行加法求和时,data1和data2已经被正确赋值了。

    所以,由于count的初始值设为2,确保了第一次中断时不会进行求和操作,而是先赋值给data1和data2。这样就避免了在没有正确赋值的情况下进行加法操作。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月25日
  • 已采纳回答 9月17日
  • 修改了问题 9月15日
  • 创建了问题 9月15日

悬赏问题

  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型