|

楼主 |
发表于 2023-3-27 09:03:39
|
显示全部楼层
本帖最后由 myt5l123 于 2023-3-27 11:20 编辑
问题已解决
”问题出在此代码上 (DATA3<<8)+DATA2;
你这种写法一般情况下,也是没错的,但是这个要看编译器,有的编译器可能不会帮你强转成16位 “
改为 ((uint16_t)DATA3<<8)+DATA2; 功能正常使用!
代码编写中一定要有代码来控制数据类型,不能交由编译器来控制。
谢谢 大东及熊家余 两位工程师的耐心指导!
uint16_t Read_Dgus(uint16_t Dgus_Addr) //改用Read_dgusii_vp 函数 避免读取失败
{
uint16_t R_Dgus;
// EA = 0;
ADR_H = 0x00;
ADR_M = (uint8_t)((Dgus_Addr/2)>>8);
ADR_L = (uint8_t)(Dgus_Addr/2);
RAMMODE = 0xAF; //读操作
while(!APP_ACK);
APP_EN = 1;
while(APP_EN);
// if(Dgus_Addr%2) R_Dgus = (DATA1<<8)+DATA0;
// else R_Dgus=(DATA3<<8)+DATA2;
if(Dgus_Addr%2) R_Dgus = ((uint16_t)DATA1<<8)+DATA0;
else R_Dgus=((uint16_t)DATA3<<8)+DATA2;
RAMMODE = 0;
// //EA = 1;
return R_Dgus;
}
|
|