各位高手,小弟在用683的时候出现一个很奇怪的问题。我这个程序目的是开机后LED闪一下,然后AD采集AN2的电压值,然后写在EEPROM里面。现在有两个问题:
1)在程序初始化的时候我把POWER=1,执行初始化以后在运行完LED=0以后POWER居然变为0了。奇怪,这个POWER(GPIO4)是给外部的设备供电的,对地电阻有1K左右,按道理说是不会出现读--修改--写的问题才对。但是POWER为什么会变为零呢?
2)这个AD的配置我确定过许多次,是没有问题的,为什么就采集不到AN2的电压值呢?
高手请指点一下,谢!
程序;
#include <pic.h>
__CONFIG(0X00C4);
#define UCHAR unsigned char
#define UINT unsigned int
#define LED GPIO1
#define POWER GPIO4
UCHAR ADRESULT_H,ADRESULT_L;
void Delay_ms(UCHAR x)
{
UCHAR y,z;
for(y=x;y>0;y--)
for(z=200;z>0;z--);
}
void Sys_Init()
{
CMCON0=0X07; //关闭
ANSEL=0X54; //FOSC/16 0100
TRISIO=0XED; //1110 1101
OSCTUNE=0X00;
OSCCON=0X61; //4MHZ INTRCOSC
OPTION=0X00;
WPU=0X20; //0010 0000 GP5 PULL UP
IOC=0X00; //0000 0000 DISABLE ALL LEVEL INTERRUPT
INTCON=0X00; //0000 0000 DISABLE ALL INTERRUPT
CCP1CON=0X00;
POWER=1;
GIE=0;
PIE1=0;
ADRESL=0;
ADRESH=0;
}
void main()
{
while(1)
{
Sys_Init();
LED=0; //??????????到这里的时候POWER引脚居然变为0了
Delay_ms(200);
LED=1;
Delay_ms(200);
ADCON0=0X89; //CH2 RIGHT ON
Delay_ms(1);
GODONE=1;
while(GODONE==1);
ADRESULT_L=ADRESL;
ADRESULT_H=ADRESH;
EEPROM_WRITE(0X22,ADRESULT_H);
EEPROM_WRITE(0X23,ADRESULT_L);
Delay_ms(220);
Delay_ms(220);
LED=0;
Delay_ms(220);
LED=1;
while(1);
} |