在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参数的不同取值,区别是很明显的并且较均匀的.
已经查了好几次了,没有找到原因所在(基本可以排除硬件的原因,因已有人的程序可以满足要求正常运行).请各位大虾指点一二!
|