[PIC®/AVR®/dsPIC®产品] 从没怀疑过编译器头文件会有错误,被我发现了?

[复制链接]
1414|8
 楼主| endata123 发表于 2020-2-15 23:06 | 显示全部楼层 |阅读模式
本帖最后由 endata123 于 2020-2-15 23:11 编辑

先说下我的开发环境 MPLAB IDE V8.91+PICC 9.83
这两天做PIC16F1503 的I2C通讯程序,用的是主模式。一直调不通,具体表现在启动I2C后(SEN=1),就死在了while(SEN)里面,不能够硬件自动清零,郁闷了两天后终于找到问题的原因:
是系统头文件里宏定义的SSP模块地址有误,数据手册 SSP1CON1地址是0x215,下面是pic16f1503.h头文件中关于SSP1CON1的定义,地址0x211,后面SSP1CON2及后续部分寄存器地址也是整体偏移了,限于篇幅,就不贴上来了


找到了原因就好办了,前车之鉴,这次IIC相关函数用汇编写了,终于解决了,瞬间世界安静了。

如有错误,请大家指正

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
xyz549040622 发表于 2020-2-17 21:22 来自手机 | 显示全部楼层
你的头文件在哪找的了?这是个问题,我有一次不是官网下的stm32的库,结果里面的文件改了,坑死我了。从此以后一定官网找资料。
CoolSilicon 发表于 2020-2-18 09:19 | 显示全部楼层
其他版本的都已经好多年不更新了....
为啥不用XC8编译器呢? 都主推X IDE+XCx编译器这么久了,不要太怀旧了嘛.

// Register: SSP1CON1
#define SSP1CON1 SSP1CON1
extern volatile unsigned char           SSP1CON1            __at(0x215);
#ifndef _LIB_BUILD
asm("SSP1CON1 equ 0215h");
#endif
// aliases
extern volatile unsigned char           SSPCON              __at(0x215);
#ifndef _LIB_BUILD
asm("SSPCON equ 0215h");
#endif
extern volatile unsigned char           SSPCON1             __at(0x215);
#ifndef _LIB_BUILD
asm("SSPCON1 equ 0215h");
#endif
守着爱情的沙漠 发表于 2020-2-20 18:25 | 显示全部楼层
守着爱情的沙漠 发表于 2020-2-20 18:26 | 显示全部楼层
picc v9.8x是历史上bug最多的编译器,特别是用在四位数型号上,劝你早早更新
守着爱情的沙漠 发表于 2020-2-20 18:26 | 显示全部楼层
改用X IDE + XC8 + MCC,会让你觉得简单到哭了
xixi2017 发表于 2020-2-23 20:09 | 显示全部楼层
老掉牙的,赶紧更新。
 楼主| endata123 发表于 2020-3-2 15:48 | 显示全部楼层
bellstudio 发表于 2020-2-19 10:54
另外多说一句,picc v9.8x是历史上bug最多的编译器,特别是用在四位数型号上,劝你早早更新 ...

谢谢你的建议,有空试一下新版本的
18785027217 发表于 2020-4-23 10:51 | 显示全部楼层
官方的也不好使,之前8位16位都在官网下的mplabx 不同版本有不同坑,不过好在开源自己查下就知道问题在哪
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部