打印

这次我必须吐槽了 pic18F+mcc18 。

[复制链接]
2329|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
taijing33|  楼主 | 2016-12-22 09:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用pic18F66k22+mcc18+mplab IDE。硬件是10路18B20.分别连接在了PE0-PE7和PD0-PD1。由于是10路18B20.我把操作18B20的子程序加了通道参数,比如 VOID DS18B20(u8 CHN);void WRITE_1820(u8 chn,u8 dat)
然后程序中 使用if else 判断chn,分别对相关IO口操作。main中每100ms对一个通道进行采集。10路采集完正好1秒。也就是说相同一路的18B20采集间隔正好1秒。
我申请了一个全局数组u16 Cur_temperature[10];用于存放10路温度值。采集成功的通道我进行CRC计算。我遇到的问题是只能采集前7路。后面3路采集不到,仿真观察,从18B20读到的数据全是0XFF..

我试着修改时序,等等等 。做了很多工作,。也把后面3路接到其他IO上。后面的数据一直是0XFF,传感器我都换过,。通道我也割线对调过。单独采集后面几路也试过。总是不行。

鼓捣了好几天。昨晚发现我对10路18B20操作的程序在一个C1文件里一共500多行。我突然奇想,我把后面5路放在另一个C2文件里。C1文件还是不变只不过只采集前5路。C2文件采集后5路。

说白了就是 我把前5路放在C1文件里,后5路放在C2文件,C1文件还是和原来一样。竟然TMD,TNND 好了。!!!!!!

本人用这个单片机很多年了,这个编译环境知道也不怎么好用。但是这次 我如果没有这个突发奇想。估计只有换单片机了。
基于以上的郁闷,,,肯定大侠指点。

C1文件和C2文件在附件里。C1文件是18B21.c

caiping.rar

4.06 KB

沙发
GeekyGeek| | 2016-12-22 12:47 | 只看该作者
之前整个一块PIC18F97J60接18个DS18B20,   并且把采集到的数据通过网络发给服务器。没发现这种问题。
感觉你这像是bank的问题

使用特权

评论回复
板凳
taijing33|  楼主 | 2016-12-23 11:40 | 只看该作者
GeekyGeek 发表于 2016-12-22 12:47
之前整个一块PIC18F97J60接18个DS18B20,   并且把采集到的数据通过网络发给服务器。没发现这种问题。
感觉 ...

BANK的问题 我以前也遇到过,就是一个C文件里申请的变量不能超过255个,但是这次我一个C文件里的变量远远不到255个。还有就是我的C1文件还和原来一样。只不过只对前5个通道采集。

使用特权

评论回复
地板
PIGYONG801| | 2016-12-28 09:20 | 只看该作者
原则上pic18还是用汇编的路子,还没STM8对C支持好

使用特权

评论回复
5
mmcu| | 2016-12-28 10:30 | 只看该作者
编译器还是换成XC8+mplab X ide比较靠谱。

使用特权

评论回复
6
m564522634| | 2016-12-28 17:07 | 只看该作者
没看你的代码,估计是堆栈覆盖问题了。 你申请的变量没有超过255但是你的函数执行用的堆栈加你自己申请的变量估计超一个bank了,这样有可能其他函数有可能覆盖你的变量。 建议你把这个变量先放到另外 一个blank中去试下吧。 不同的文件可能有区别的就是变量申请的地方了。

使用特权

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

本版积分规则

163

主题

365

帖子

3

粉丝