debug调试界面问题,求解!!
void Receive_Sixteenbit(){
uchar i;
for(i = 0;i < 16;i ++)
{
Sixteen_bit |= ((uint)Receive_1bit() << i); //低位在前,高位在后
}
Receive_Parity = Receive_1bit();//接收的校验位
Receive_Ready = 1;
Data1 = Sixteen_bit & 0xFF;
Data2 = (Sixteen_bit >> 8) & 0xFF;
}我在此已将Data1和Data2申明为外部可调用
void main()
{
Delay_Ms(7);
GPIO_Init();
ADC_Init();
Uart1_Init();
while(1)
{
Send_DKdata(0x00,0x01); //发送数据
Delay_Ms(1);
Receive_Sixteenbit(); //接收数据
Send_Byte(Data1); //串口发送
Send_Byte(Data2); //串口发送
Delay_Ms(8);
Send_DKdata(0x10,0x01);
Delay_Ms(1);
Receive_Sixteenbit();
Send_Byte(Data1);
Send_Byte(Data2);
Delay_Ms(8);
}
}
在debug界面,Data1和Data2的值始终是0,但通过串口发送Data1和Data2,又是有数据的,并且数据与协议对的上,这是为什么,请求大佬解答
根据您提供的代码,问题可能出在 ReceiveSixteenbit() 函数的实现上。当前函数中对 Sixteenbit 的赋值逻辑存在明显错误,导致 Data1 和 Data2 无法正确获取接收到的数据,从而在调试界面显示为 0。
问题分析
c
void ReceiveSixteenbit()
{
uchar i;
for(i = 0; i < 16; i++)
{
Sixteenbit |= ((uint)Receive1bit() > 8) & 0xFF;
}
}
该函数的问题在于:
1. Receive1bit() 返回值处理不当
Receive1bit() 应返回一个位(0 或 1),但代码中将其转换为 uint 后与 > 8 进行比较,这显然是不合理的。Receive1bit() 的返回值应为 0 或 1,因此 (uint)Receive1bit() > 8 永远为 false,即 0,最终结果始终为 0。
2. Sixteenbit 赋值逻辑错误
该函数试图通过逐位读取 16 位数据并拼接成一个 16 位整数,但当前逻辑是将每一位的结果与 0xFF 做按位或操作,这会导致 Sixteenbit 只能保存低 8 位数据,且每次循环都会覆盖高位,最终结果不准确。
3. 未对 Data1 和 Data2 正确赋值
您提到 Data1 和 Data2 是外部可调用变量,但在当前代码中并未看到它们被赋值。如果 Data1 和 Data2 是从 Sixteenbit 中提取的高 8 位和低 8 位,则需要明确地进行拆分。
推荐修复方案
1. 修正 ReceiveSixteenbit() 函数
假设 Receive1bit() 返回的是单个位(0 或 1),则应逐位构建 16 位数据:
c
void ReceiveSixteenbit()
{
uint sixteenbit = 0;
uchar i;
for(i = 0; i < 16; i++)
{
sixteenbit8);// 高 8 位
Data2 = (uchar)sixteenbit; // 低 8 位
}
注意:此版本假设 Data1 和 Data2 是全局变量,并且已正确定义为 uchar 类型。
2. 确保 Data1 和 Data2 已定义
请确认以下内容是否已在代码中定义:
c
extern uchar Data1;
extern uchar Data2;
或者在文件顶部声明:
c
uchar Data1, Data2;
3. 检查 Receive1bit() 实现
确保 Receive1bit() 正确读取一位数据,例如:
c
uchar Receive1bit()
{
// 示例:读取串口的一位数据
return (Uart1GetByte() >> 7) & 0x01; // 假设高位为有效数据
}
总结
您的 ReceiveSixteenbit() 函数中存在关键逻辑错误,导致 Data1 和 Data2 始终为 0。建议按照上述方式修正函数逻辑,并确保 Data1 和 Data2 正确定义和赋值。若仍有问题,请提供 Receive1bit() 的实现代码以进一步排查。
[本文内容由国芯人工智能辅助生成,仅供参考]
页:
[1]