搜索
bottom↓
回复: 2

PIC16F877A程序求助

[复制链接]

出0入0汤圆

发表于 2014-11-30 10:38:36 | 显示全部楼层 |阅读模式
各位大侠,
实在是想不通,
我是个新手,刚接触PIC,以前都是用AVR,
用MPLAP写了个简单的ADC程序,准备在仿真版上看看运行的效果
但在proteux仿真时通过了,在板子上出不来结果,LCD显示的值都是0,真不知道问题出在哪里,附件有图片
忘各位高手指点下
以下为程序
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
uchar num,i,m;
uchar adc_data[]={"data:___________"};
uint count=0;
//__CONFIG(0x3B31);
//#define RS RE0
//#define RW RE1
//#define EN RE2


//********************函数定义*********************
const uchar table[]={"  China CEPARK  "};
uchar table1[]={" dian zi yuan   "};

void write_com(uchar com);
void write_data(uchar data);
void init(void);
void delay(uint z);
void delay1ms(uint DelayTime);     
uchar spi_write_read(uchar dd);
void led_display(void);
void decimal_bcd_16bit(uint cnt);
uint adc_converter(void);
void adc_channel(uchar channel);
void adc_init(void);


void main()
{
init();
       
        for        (num=0;num<16;num++)
        {        write_data(table[num]);
        delay(50);
        }
   write_com(0x80+0x40);
        for (i=0;i<16;i++)
    {
                write_data(table1[i]);
                delay(50);
        }

  adc_init();//adc初始化
  adc_channel(0);//选择通道0
        delay(10);

        while(1)
{
delay(1000);
count=adc_converter();
//count=1023;
table1[0]=count/1000+0x30;
table1[1]=count%1000/100+0x30;
table1[2]=count%100/10+0x30;
table1[3]=count%10+0x30;

write_com(0x80+0x40);
for (i=0;i<16;i++)
    {
                write_data(table1[i]);
                delay(50);
        }
}
;

}
void init()
{
         TRISE=0x00;
     TRISD=0x00;
     TRISA=0XFF;
         ADCON1=0X82;
        PORTE=0;
          PORTD=0;
        write_com(0x38);
        write_com(0x0f);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);

}
void adc_init()
{
  //AD 功能设置
  PCFG3=1;
  PCFG2=1;
  PCFG1=0;
  PCFG0=0;
  // PCF<3..0> AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 VERF+ VREF-
  // 0000      A   A   A   A   A   A   A   A   VDD   VSS
  TRISA=0b00111111;    //PORTA口全为输入

  ADCS2=0;
  ADCS1=0;
  ADCS0=0;     //AD转换频率设为32Tosc(Tosc=1/Fosc),该时间要大于1.6us
  ADFM=1;                  //AD转换结果右对齐
  ADON=1;
}

//**********************选择ad转换通道(0-7)*************************
void adc_channel(uchar channel)
{
  ADCON0|=((channel&0x07)<<3);     //选择AD转换通道
  delay1ms(1);                     //最少延时20us,使输入电压稳定
}

//***********************启动ad转换***************************
uint adc_converter(void)          //AD转换函数
{        
ulong adc_result;                //使用ulong型变量
  
  ADGO=1;                                                 //开始AD转换
  while(ADGO==1);                                    //等待AD转换结束
  ADIF=0;                          //清AD结束标志
  
  adc_result=ADRESH;
  adc_result=adc_result<<8;
  adc_result|=ADRESL;
  adc_result=(adc_result*5000)>>10;  //计算时应用ulong 查考电压5V
  return(adc_result);                  //将测量值扩大1000倍后,返回uint型变量
}

void write_data(uchar data)
{
        RE0=1;
        PORTD=data;
        delay(5);
        RE2=1;
        delay(5);
        RE2=0;
}
void write_com(uchar com)
{
        RE0=0;
        PORTD=com;
        delay(5);
        RE2=1;
        delay(5);
        RE2=0;
}
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--);
        for(y=110;y>0;y--);
}
//*****************延时 n*1ms 12MHz*****************
void delay1ms(uint DelayTime)
{       
  uint temp;
  for(;DelayTime>0;DelayTime--)
  {       
    for(temp=0;temp<270;temp++)
    {;}
  }
}

出0入0汤圆

 楼主| 发表于 2014-11-30 10:41:14 | 显示全部楼层
这个是图,在附件里没看见

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出75入90汤圆

发表于 2014-11-30 10:49:50 | 显示全部楼层
我只知道,PIC单片机做为数字端口的IO要把 ADC、比较器等等关闭掉。否则软仿真正常,实际不行。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-1 19:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表