这个程序实现的是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;
    }
        
}

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

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

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

变量就算不赋值,系统也会随机给一个值的,可以参考:https://mp.weixin.qq.com/s?src=3×tamp=1694740552&ver=1&signature=kXHOJvF76tnIkOHjZK0OdA5nriNnB96TJ2Dtel8kZkb0nAl0PJRj2vhZGRC4XlJpQWlx3QU4TzFyBNOMa9zwFTU7pgJq6PuWwLWeAhkD8f2brzQRU-ef8RPA6QAKGkM9ZCy2HsDJCfvB9KNDkROjsfM2x7uFaH7hKyRRcbje9wY=

你的疑惑是对的,count 的初始值不能是 2,应该为 0 才是正确的。