标题: 用keil仿真MCU程序直接跑到最后一行,请教各位大侠哪里错了? [打印本页]

作者: qisheng108    时间: 2019-3-1 13:14
标题: 用keil仿真MCU程序直接跑到最后一行,请教各位大侠哪里错了?
我的这个程序无法运行
// STC 官网 STC12C5Axx Series MCU A/D 例程
#include "STC12C5A60S2.H"
#include "stdio.h"
#include "intrins.h"
#define uchar unsigned char
#define UINT8  unsigned int
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共阳数字编码  0.1.2.3.4....9

UINT8 code tongdao[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};                 //通道选择0-7
int getad(UINT8 tongdao);
UINT8 junzhi=0;
void delay(uchar i)         //延时函数
{
  uchar j,k;
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}

void display() //显示函数
{
   P0=table[junzhi/1000];
   P2_0 = 0;
   delay(5);
   P2_0 = 1;

   P0=table[junzhi%1000/100];
   P2_1 = 0;
   delay(5);
   P2_1 = 1;

   P0=table[junzhi%100/10];
   P2_2 = 0;
   delay(5);
   P2_2 = 1;

    P0=table[junzhi%10];
   P2_3 = 0;
   delay(5);
   P2_3 = 1;
   
}
void ad_init()
{
P1M0=0xff;
P1M1=0xff;                        //P1口设置成开漏模式
ADC_CONTR=0xe0;                //开A/D控制寄存器  ADC_POWER(AD电源控制位) SPEED1、SPEED0(为转换速率选择位(都为1时)速度最快为210个时钟/次) ADC_FLAG 转换结束标志位 ADC_START:ADC转换器的启动控制位 CHS2、CHS1
delay(200);
}

int getad(UINT8 tongdao)                  //转换函数
{
UINT8 jieshu=0;
int jieguo;
ADC_CONTR|=tongdao;
ADC_CONTR|=0x08;
while(jieshu==0)
{
jieshu=(ADC_CONTR&0x10);
}
//jieguo=(ADC_DATA<<2)+ADC_LOW2;   //5410ad单片机用数据调取
         jieguo=ADC_RES;                                  //60s2单片机用数据调取
ADC_CONTR&=0xef;
return (jieguo);
}

float qiuzhi(UINT8 tongdao)                           //滤波求值函数
{
UINT8 junzhi=0;
UINT8 i;
for(i=15;i>0;i--)
{
junzhi+=getad(tongdao);
}
junzhi/=15.0;
junzhi=((junzhi*5.0)/0.256)+5;
//junzhi=junzhi*0.13-30.0;
//junzhi=junzhi/6.5536;
junzhi=(2507-junzhi)/0.86;

return (junzhi);

}
void main()
{
     void ad_init();
  while(1)  
    {
         int getad(UINT8 tongdao);
     float qiuzhi(UINT8 tongdao);
     void display();
     }
}
作者: wulin    时间: 2019-3-1 16:18
  1. void main()
  2. {
  3.         ad_init();
  4.         while(1)  
  5.         {
  6.                 getad(tongdao);
  7.                 qiuzhi(tongdao);
  8.                 display();
  9.         }
  10. }
复制代码

作者: mwj1983    时间: 2019-3-1 16:23
你没有描述清楚你的仿真环境,具体问题描述也不清楚,你可以看一下这个帖子,希望对你有帮助。
https://blog.csdn.net/qlexcel/article/details/54949093
作者: xuyaqi    时间: 2019-3-1 16:26
main()里,ad_init()前不该有void。
作者: qisheng108    时间: 2019-3-3 11:50
谢谢各位老师的指点,我试一下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1