打印

45K22芯片有BUG或者是编译器C18-2.4有BUG

[复制链接]
2719|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuntian|  楼主 | 2012-3-31 19:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个问题困扰了好几天,终于找到问题了,用的芯片是45K22,用PORTB端口输出READ/WRITE信号控制显示屏,显示屏的片选信号采用RB6,由于这个脚有用于ICSP(原电路设计是这样),用KIT3调试显示屏是有显示的,用ICD2调试也有显示,但用它们烧程序却不能点亮显示屏,(调试时把RB6改在RB1,硬件也改动了),
    通过一步步排除问题,怀疑是软件哪里有问题,把程序一个一个的函数删除,终于在删到还有10几个函数时显示正常了,满以为找到问题了,恢复原程序时故障依旧,
    怀疑是子符串常量太多了,设了一个字符串常量,长度为765个字节,发现显示屏只能显整句字符串的前三个字符,搞了搞,搞了两天,还是没搞定.
    最后将几个引脚一个一个来对,原来片选脚E定义为#DEFINE E LATBBITS.LATB6,原来程序没有问题啊!试着改为PORTBBITS.RB6,重烧程序,显示屏点亮了,
    RB6这个脚只用作输出,写LAT6与写RB6是一样的啊,只不过读改写一个是读锁存器,一个是读端口,为什么差异这么大呢?
     没空去找是编译器还是芯片是哪一个的原因.这个问题害死人,特地写下,其他人碰到这个问题可以避免下,也请原厂注意这个问题,看是哪造成的.这几天被这些兼容问题搞得好烦.
沙发
Ryanhsiung| | 2012-4-1 15:28 | 只看该作者
LZ可能TRIS 设置成1 输入状态了,所以操作LAT没有效果,操作PORT反而可能可以修改端口状态。
还有你可以去看一下45K22的勘误手册,看一下是不是有这个BUG!

使用特权

评论回复
板凳
asspeed| | 2012-4-1 15:48 | 只看该作者
本帖最后由 asspeed 于 2012-4-1 16:00 编辑

开玩笑,PIC18F45K22用的人何其多,而且用C18开发的何其多....先检查自己的代码(看看反汇编),大多数是自己的错误.
  而且你没有描述清楚,RB6是ICSP引脚之一,所以你想在在线调试时用RB6口是不行的,如果你换做RB1时,注意模拟复用。
   所以你如果一定要用RB6,只能烧写后脱机运行,这时要把ICSP连接断掉.

使用特权

评论回复
地板
yuntian|  楼主 | 2012-4-2 10:14 | 只看该作者
满以为解决问题了,昨天去现场,却又有问题了,
真不知道问题出在哪里,现在没找到原因,东西拉回来了,这几天好好找下原因,
用PIC也有**年了,不可能出现TRIS,ANSEL这类错误的,现在来看,应该是编译器有BUG的可能性比较大,我的程序有里有500多字节的字符串,
WRITE_TEXT("TEST PROGRAM PLEASE WAIT...");
都这采用这种方式把字符串写入LCD的.WRITE_TEXT(ROM UCHAR CONST *BUFF_P);
各位看下哪出问题的可能性比较大?

使用特权

评论回复
5
XIEYUANBIN| | 2012-4-2 18:37 | 只看该作者
不知道出在什么地方,是RB1没有输出吗?还是RB6没有输出,最近MCHP编译器问题比较多,像你这样的定义,我一般按照头文件里面的定义:
#DEFINE E  _LATB6,但C18我没用过,不知道是否可以这样定义。

使用特权

评论回复
6
1521732588| | 2012-4-3 10:18 | 只看该作者
2.4不支持45k22吧
有更新版本的啊

使用特权

评论回复
7
1521732588| | 2012-4-3 10:19 | 只看该作者
锁存是因为45k22支持的系统速度较快,所以写RB6不行

使用特权

评论回复
8
yuntian|  楼主 | 2012-4-4 14:07 | 只看该作者
找到问题了,但不知道怎么解决,是字符串常量读出=0造成的,但SIM仿真和KIT3仿真都没问题,但换成发行版编译后,表读结果都为0,不知道为什么这样,这种算法在67J10里比这字符串还要多,但没有问题,
例如,定义了一个ROM CHAR CONST DIS_LIST_CODE[]={0X80,0X90,0X88,0X98};
但在CHAR I=DIS_LIST_CODE[VAR&0X03];这里,结果无论VAR是何值,I都等于0,没办法,只有把程序改为
IF(VAR==0)
   {}
ELSE IF(VAR==1)
  {}
ELES IF(VAR==2)
  {}
ELSE IF(VAR==3)
  {}
才没问题,但读字符串依然有问题,基本上所有的字符串常量用指针读都是返回=0,

使用特权

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

本版积分规则

29

主题

178

帖子

1

粉丝