打印
[PIC®/AVR®/dsPIC®产品]

从没怀疑过编译器头文件会有错误,被我发现了?

[复制链接]
993|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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 | 只看该作者
阿杜

使用特权

评论回复
5
守着爱情的沙漠| | 2020-2-20 18:26 | 只看该作者
picc v9.8x是历史上bug最多的编译器,特别是用在四位数型号上,劝你早早更新

使用特权

评论回复
6
守着爱情的沙漠| | 2020-2-20 18:26 | 只看该作者
改用X IDE + XC8 + MCC,会让你觉得简单到哭了

使用特权

评论回复
7
xixi2017| | 2020-2-23 20:09 | 只看该作者
老掉牙的,赶紧更新。

使用特权

评论回复
8
endata123|  楼主 | 2020-3-2 15:48 | 只看该作者
bellstudio 发表于 2020-2-19 10:54
另外多说一句,picc v9.8x是历史上bug最多的编译器,特别是用在四位数型号上,劝你早早更新 ...

谢谢你的建议,有空试一下新版本的

使用特权

评论回复
9
18785027217| | 2020-4-23 10:51 | 只看该作者
官方的也不好使,之前8位16位都在官网下的mplabx 不同版本有不同坑,不过好在开源自己查下就知道问题在哪

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝