打印

PIC12F683疑惑

[复制链接]
2240|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
playpic|  楼主 | 2010-10-20 12:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位高手,小弟在用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);
}
沙发
XIEYUANBIN| | 2010-10-20 15:09 | 只看该作者
读-修改-写的现象只取决于 操作端口时端口当时的状况,外部电路是什么不必关心,你可用示波器看看你操作LED 时 POWER 端口的状态

使用特权

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

本版积分规则

0

主题

21

帖子

1

粉丝