我的疑惑是,如果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。这样就避免了在没有正确赋值的情况下进行加法操作。
你的疑惑是对的,count 的初始值不能是 2,应该为 0 才是正确的。