咋回事呢我的程序

[复制链接]
3374|5
 楼主| ida 发表于 2007-3-19 08:51 | 显示全部楼层 |阅读模式
AD, ADC, dc, ov, AC
在MPLAB&nbsp;IDE&nbsp;v6.60下单步执行我的程序,有个怪怪的现象:<br />void&nbsp;onovervolt(void)<br />{<br />&nbsp;&nbsp;ad[0]=0x41;<br />&nbsp;&nbsp;ad[1]=0x49;<br />&nbsp;&nbsp;ad[2]=0x51;<br />&nbsp;&nbsp;for(p=0;p&lt3;p++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON0=ad[p];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON1=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adconv();&nbsp;AD转换<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(c&lt=lackv||c&gt=overv)//用AD后的值C来作判断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(c&lt=lackv)PORTD=0x16;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(c&gt=overv)PORTD=0x15;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RB7=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RB7=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTD=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC2=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(9000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC2=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(9000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyscan();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON0=ad[p];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON1=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adconv();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTD=0X10;<br />&nbsp;&nbsp;&nbsp;&nbsp;RB7=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;RB7=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTD=0X00;<br />&nbsp;&nbsp;&nbsp;&nbsp;m=0;<br />&nbsp;&nbsp;}<br />}<br /><br />执行到第一个ADCON0=ad[p];它马上就到了while中的ADCON0=ad[p];然后再ADCON1=0x00;adconv();后,才回到while中的第一条语句.<br /><br />并且最大的问题是在程序中的lackv参数设置上:即使我分别设的只是1.0与1.00001这样相差极微小的两个数,但是在设备外部体现出来的却是几十伏还不止的差别,而如果设1.1,1.2,1.3,1.4...得到的却是不超过5伏的区别.<br />如果是我的AD不准确,为什么区别这么大呢,而overl参数的不同取值,区别是很明显的并且较均匀的.<br /><br />已经查了好几次了,没有找到原因所在(基本可以排除硬件的原因,因已有人的程序可以满足要求正常运行).请各位大虾指点一二!<br />
fzj 发表于 2007-3-19 13:44 | 显示全部楼层

别用6.60了

6.60支持新产品有错误,我以前在12F629上出现过,当时怎么也想不通,后来换作7.40版本就好了,去试试吧.
 楼主| ida 发表于 2007-3-20 08:29 | 显示全部楼层

这样啊,呵呵

昨天的问题被我莫名其妙就解决了,呵呵.<br />不过又有新问题了,哎.还是自己慢慢看吧.
yewuyi 发表于 2007-3-20 08:38 | 显示全部楼层

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

我记得上次就为AD的事情发过一次帖子,怎么到现在还没有把AD那点东东搞定吗?<br /><br /><br /><br />呵呵,你的项目是不是没有时间限制的?<br /><br /><br />其实老张的那本入门书将PIC的很多基础问题讲解的很透彻,你仔细翻翻就应该明白的。
 楼主| ida 发表于 2007-3-23 11:29 | 显示全部楼层

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

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

万望大虾海涵,呵呵

因为这件事不是排在我第一位的事情,所以我想尽可能少地花时间解决,故怯怯来冒泡问一些比较白痴的问题,呵呵.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

ida

48

主题

1345

帖子

0

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