qepuemc 发表于 2025-4-11 18:49:39

如何看待AI8051U 8位模式和32位模式显示红外遥控键值不同

收←◆Read: UserCode=0xff00,IRCode=5632

上面的32位的。



收←◆Read: UserCode=0xff00,IRCode=25


而8位的时候是这格式的。求指教。哪种才是正常的呢。


国芯人工智能 发表于 2025-4-11 18:53:00

在分析AI8051U芯片在8位模式和32位模式下显示红外遥控键值不同的现象时,首先需要明确的是,这种差异主要是由于数据位宽和处理方式的不同所导致的。以下是对这一问题的专业分析:

1. 数据位宽的影响
AI8051U芯片支持8位和32位两种工作模式。在8位模式下,数据以8位为单位进行处理,而在32位模式下,数据以32位为单位进行处理。这种位宽的差异直接影响了数据的解析和显示方式。

2. 红外遥控键值的解析
红外遥控信号通常由用户码(UserCode)和键值码(IRCode)组成。在8位模式下,由于数据位宽的限制,键值码可能被截断或重新编码,导致显示的键值与实际发送的键值不一致。而在32位模式下,由于数据位宽较大,能够完整地解析和显示键值码。

3. 具体案例分析
根据用户提供的数据:
在32位模式下,读取到的键值码为5632(0x1600)。
在8位模式下,读取到的键值码为25(0x19)。

这种差异可能是由于8位模式下,键值码的高位被截断或重新编码,导致显示的键值与32位模式下的键值不同。

4. 正常性的判断
从技术角度来看,32位模式下的键值码更接近实际发送的键值,因为它能够完整地解析和显示数据。而8位模式下的键值码由于位宽限制,可能无法准确反映实际键值。因此,32位模式下的键值码更符合正常情况。

5. 解决方案
为了确保在不同模式下都能准确解析和显示红外遥控键值,建议采取以下措施:
统一工作模式:尽量使用32位模式进行数据处理,以确保数据的完整性和准确性。
数据转换:如果必须在8位模式下工作,可以编写数据转换算法,将32位键值码转换为8位格式,以确保显示的键值与实际键值一致。
调试工具:使用调试工具对红外遥控信号进行详细分析,确保在不同模式下都能正确解析键值码。

6. 结论
AI8051U芯片在8位和32位模式下显示红外遥控键值不同的现象,主要是由于数据位宽和处理方式的差异所导致的。从技术角度来看,32位模式下的键值码更符合正常情况。为了确保数据的准确性和一致性,建议尽量使用32位模式进行数据处理,并采取相应的数据转换和调试措施。

通过以上分析,希望能够帮助用户更好地理解AI8051U芯片在不同模式下处理红外遥控键值的差异,并采取相应的解决方案。

[本文内容由国芯人工智能辅助生成,仅供参考]

乘风飞扬 发表于 2025-4-11 21:17:28

如果你是使用 printf 打印的话,参考下面这个帖子:

printf函数 的 格式参数; USB接口 使用 printf 打印数据
https://www.stcaimcu.com/thread-6864-1-1.html
(出处: 国芯技术交流网站)

qepuemc 发表于 2025-4-12 09:30:12

乘风飞扬 发表于 2025-4-11 21:17
如果你是使用 printf 打印的话,参考下面这个帖子:

printf函数 的 格式参数; USB接口 使用 printf 打印 ...

这个用的是ai 8051u的试验箱程序。没做任何改动

qepuemc 发表于 2025-4-13 11:38:35


收←◆0F 0F 00 00 01 06
收←◆0F 0F 00 00 00 0C
收←◆0F 0F 00 00 01 08
收←◆0F 0F 00 00 05 0E


                LED8 = (u8)((UserCode >> 12) & 0x0f);    //用户码高字节的高半字节
                LED8 = (u8)((UserCode >> 8)& 0x0f);    //用户码高字节的低半字节
                LED8 = (u8)((UserCode >> 4)& 0x0f);    //用户码低字节的高半字节
                LED8 = (u8)(UserCode & 0x0f);            //用户码低字节的低半字节
                                                       
                LED8 = IR_code >> 4;
                LED8 = IR_code & 0x0f;

这个是用STC32G8K64采到的。串口显示。由此可以看出来。
                LED8 = (u8)((UserCode >> 12) & 0x0f);    //用户码高字节的高半字节
                LED8 = (u8)((UserCode >> 8)& 0x0f);    //用户码高字节的低半字节
用户码这个遥控器都是F   显示两个 0F组合一起就是FF

                LED8 = (u8)((UserCode >> 4)& 0x0f);    //用户码低字节的高半字节
                LED8 = (u8)(UserCode & 0x0f);            //用户码低字节的低半字节

这里显示的都是00


                LED8 = IR_code >> 4;
                LED8 = IR_code & 0x0f;
红外键码这里应该就是需要两个组合到一起。比如01 09 应该就是19对应25结论就是AI8051U中的32 32位接收可能是不对的

qepuemc 发表于 2025-4-13 11:57:37

比如看串口数据是2801 0C可是对应的波形是这样的。

qepuemc 发表于 2025-4-13 14:03:07

串口码0F 0F 00 00 01 05
逻辑分析仪
地址   地址取反            数据      数据取反
8个08个1(对应8个取反)10101000 01010111(对应8个取反)
                        00010101 11101010

怎么也对应不出来。

qepuemc 发表于 2025-4-13 15:33:28

串口码0F 0F 00 00 01 05
逻辑分析仪
地址   地址取反            数据      数据取反
8个08个1(对应8个取反)10101000 01010111(对应8个取反)
                          原数据                       
                        00010101 11101010
                          取反后
                          取反后对应0x15对应21                                               

总结:例程没有问题。
页: [1]
查看完整版本: 如何看待AI8051U 8位模式和32位模式显示红外遥控键值不同