打印

咋回事呢我的程序

[复制链接]
1912|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ida|  楼主 | 2007-3-19 08:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, ADC, dc, ov, AC
在MPLAB IDE v6.60下单步执行我的程序,有个怪怪的现象:
void onovervolt(void)
{
  ad[0]=0x41;
  ad[1]=0x49;
  ad[2]=0x51;
  for(p=0;p<3;p++)
   {
      ADCON0=ad[p];
      ADCON1=0x00;
      adconv(); AD转换
      while(c<=lackv||c>=overv)//用AD后的值C来作判断
     {
      if(c<=lackv)PORTD=0x16;
      if(c>=overv)PORTD=0x15;
      RB7=1;
      RB7=0;
      PORTD=0x00;
      m=1;
      RC2=1;
      delay(9000);
      RC2=0;
      delay(9000);
      keyscan();
      ADCON0=ad[p];
      ADCON1=0x00;
      adconv();
     }
    PORTD=0X10;
    RB7=1;
    RB7=0;
    PORTD=0X00;
    m=0;
  }
}

执行到第一个ADCON0=ad[p];它马上就到了while中的ADCON0=ad[p];然后再ADCON1=0x00;adconv();后,才回到while中的第一条语句.

并且最大的问题是在程序中的lackv参数设置上:即使我分别设的只是1.0与1.00001这样相差极微小的两个数,但是在设备外部体现出来的却是几十伏还不止的差别,而如果设1.1,1.2,1.3,1.4...得到的却是不超过5伏的区别.
如果是我的AD不准确,为什么区别这么大呢,而overl参数的不同取值,区别是很明显的并且较均匀的.

已经查了好几次了,没有找到原因所在(基本可以排除硬件的原因,因已有人的程序可以满足要求正常运行).请各位大虾指点一二!
沙发
fzj| | 2007-3-19 13:44 | 只看该作者

别用6.60了

6.60支持新产品有错误,我以前在12F629上出现过,当时怎么也想不通,后来换作7.40版本就好了,去试试吧.

使用特权

评论回复
板凳
ida|  楼主 | 2007-3-20 08:29 | 只看该作者

这样啊,呵呵

昨天的问题被我莫名其妙就解决了,呵呵.
不过又有新问题了,哎.还是自己慢慢看吧.

使用特权

评论回复
地板
yewuyi| | 2007-3-20 08:38 | 只看该作者

ida搞PIC也有一段时间了把……

我记得上次就为AD的事情发过一次帖子,怎么到现在还没有把AD那点东东搞定吗?



呵呵,你的项目是不是没有时间限制的?


其实老张的那本入门书将PIC的很多基础问题讲解的很透彻,你仔细翻翻就应该明白的。

使用特权

评论回复
5
ida|  楼主 | 2007-3-23 11:29 | 只看该作者

呵呵,这次和上次,不是同一件事

我没有项目,在这个公司只是打杂的,他们说要什么功能,我就往上写.

我不得不很羞愧地说,没有看过任何PIC的书,只有一个877A的数据手册.C语言也学得很烂.去年发帖的时候,搞了20天,之后没有再碰它,这个月回来,又开始写,往上添加一个功能.不过因为自己有自己的课题要搞,所以基本上是半天打鱼,三天晒网,呵呵,反正他们不催得紧.
AD已经搞定了.现在的问题不是那里的问题,也许和它硬件有关。没有影响到功能,但是这个瑕疵对用户来说不完美:就是在某一种故障发生,重启机器后,有一组之前亮过的灯会再亮起来.按道理是不该亮的.现在不知道到底是程序的问题,还是电容充放电的问题.但我觉得可能还是程序上有漏洞.

所以,每次发问,俺都是无比心虚和虚心地举手的...

使用特权

评论回复
6
ida|  楼主 | 2007-3-23 11:32 | 只看该作者

万望大虾海涵,呵呵

因为这件事不是排在我第一位的事情,所以我想尽可能少地花时间解决,故怯怯来冒泡问一些比较白痴的问题,呵呵.

使用特权

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

本版积分规则

ida

48

主题

1345

帖子

0

粉丝