找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6231|回复: 1
打印 上一主题 下一主题
收起左侧

GMIN stepping at time=0.251152仿真时遇见这个问题是咋回事 新人求指教!

[复制链接]
跳转到指定楼层
楼主

GMIN stepping at time=0.251152错误提示:


上位机程序
#include<AT89X52.h>  
#define uint unsigned int
#define uchar unsigned char
sbit GREEN=P0^0;
sbit YELLOW=P0^1;
sbit RED=P0^2;
sbit SPK=P0^3;
sbit LED1=P0^4;
sbit LED2=P0^5;
sbit LED3=P0^6;
sbit LED4=P0^7;
unsigned char code
tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char dat[]={0,0,0,0};    //显示缓存区
unsigned char adc=0;         //存放接收的数据
unsigned char count;
unsigned int tmp;
unsigned char ssw;
unsigned char ad;
void delay10ms(void)
{
   uchar i;
   for(i=0;i<250;i++);
}
void delay()   //计算延迟1ms
{
unsigned char i,j;  
for(i=0;i<10;i++)
  for(j=0;j<33;j++) ;
}
void main(void)
{
   TMOD=0x20;          //T1为方式2
   TH1=0xE7;           //波特率为625bps
   TL1=0xE7;
   PCON=0;          //电源控制寄存器
   IE=0x90;          //开启串行口中断
   TR1=1;
   IP=0x10;           //设置串行口通断为高优先级
   SCON=0x50;        //设串口为方式1、允许串行口接收

   while(1)
   {
     tmp=adc*196;     //乘以19.6mv
     dat[3]=tmp/10000;
     dat[2]=tmp/1000%10;
     dat[1]=tmp/100%10;
     dat[0]=tmp/10%10;            //数码管显示转换结果
     LED1=0;
     P1=tab[dat[3]]+0x80;        //最高位加小数点
     delay();
     LED1=1;
     LED2=0;
     P1=tab[dat[2]];
     delay();
     LED2=1;
     LED3=0;
     P1=tab[dat[1]];
     delay();
     LED3=1;
     LED4=0;
     P1=tab[dat[0]];
     delay();
     LED4=1;

         if(ssw>45)
         {
            RED=0;
                GREEN=1;
                YELLOW=1;
                SPK=~SPK;
                 SBUF=0xff;
         }
         else if(ssw<5)
         {  
            YELLOW=0;
                GREEN=1;
                RED=1;
                SPK=~SPK;
                SBUF=0x00;
        
         }
         else
         {
           GREEN=0;
           RED=1;
           YELLOW=1;
           SBUF=0x01;        
         }
         while(!TI);
         TI=0;

  }
}   
void serial(void) interrupt 4 using 1
{
  if(RI==1)
   {
      RI=0;
          ad=SBUF;
         
          if(ad!=0)
        {  adc=ad;}
          else
          {adc=adc; }
          ssw=adc/5;
          }
}   


下位机程序
#include<AT89X52.h>
#define DAC0832 P0
#define uint unsigned int
#define uchar unsigned char
//*********定义变量区*******************
sbit EOC=P2^5;       //定义ADC0808/0809转换结束信号
sbit START=P2^6;     //定义ADC0808/0809启动转换命令
sbit CLOCK=P3^7;     //定义ADC0808/0809时钟脉冲输入位
sbit OE=P3^2;        //定义ADC0808/0809数据输出允许位
sbit RL1=P2^0;
sbit RL2=P2^1;
sbit cs=P2^7;
sbit wr=P3^6;
sbit SW=P2^3;                //开关量接入口
sbit zhongduan=P2^4;        //外部中断请求位
code uchar sintab[]={0x7f,0x89,0x94,0x9f,0xaa,0xb4,0xbe,0xc8,0xd1,0xd9,0xe0,0xe7,0xed,0xf2,0xf7,0xfa,0xfc,0xfe,0xff};  //正弦信号数组
uchar pt;   //存放接收数据
uchar adc;   //存放转换后的数据
uchar data i=0,k;
uchar a=0;
void delay()
{
        uchar j;
        for(j=0;j<250;j++);//延时函数
}
void sbu(uchar S){
        
         START=0;
     START=1;                 //是否转换
         START=0;               
     while(EOC==0);  //等待转换结束
     OE=1;         //允许输出
     adc=P1;       //取转换结果
         if(S==1)                  //开关量未接入
     {SBUF=adc;
         }     //发送采集的数据
         else                        //开关量接入
         {SBUF=0;
}
         while(!TI);   //等待发送数据结束(数据发送完,T1由硬件置位)
             TI=0;       //T1复位
}

void main(void)
{
        
    EA=0;
    TMOD=0x22;      //T0、T1工作方式2
    TH0=0x14;
    TL0=0x14;
    TH1=0xE7;       //波特率为625bps
    TL1=0xE7;
    IE=0x92;        //开放串行口,T0中断
    IP=0x10;        //设置T0中断方式为高优先级
    SCON=0x50;    //双工通信,串行口方式1
    TR0=1;
    TR1=1;
    while(1)
        {
     kkk: sbu(SW);
                  wr=1;
        if(a==0xff){RL1=1;RL2=1;goto k1;}
        else{goto kkk;}
         k1: while(1){
                        wr=0;
                        DAC0832=0xff;
                        delay();
                        DAC0832=0;
                        delay();
                        delay();
                        goto kkk;
                        }
           DAC0832=0;        
        }                 
}
/*定时计数T0的中断服务子程序*/
void timer0(void) interrupt 1 using 1
{
     CLOCK=~CLOCK;    //产生ADC0808/0809时钟脉冲信号
         
}
void serial(void) interrupt 4 using 0
{if(RI==1)               
{        RI=0;
        pt=SBUF;
        a=pt;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩1
回复

使用道具 举报

沙发
ID:208271 发表于 2021-3-31 20:45 | 只看该作者
其实跟程序并没有太大关系,我出现过几次,都不是程序的问题。
是仿真原理图里有的电阻没加,元件的参数没设置好这些原因导致的,有时原理在实物上验证没问题,但就是
在仿真里运行出错,所以还是改改电路换个方式验证吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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