找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6790|回復(fù): 1
收起左側(cè)

GMIN stepping at time=0.251152仿真時(shí)遇見(jiàn)這個(gè)問(wèn)題是咋回事 新人求指教!

[復(fù)制鏈接]
ID:116920 發(fā)表于 2016-4-26 21:22 | 顯示全部樓層 |閱讀模式

仿真圖

仿真圖

GMIN stepping at time=0.251152錯(cuò)誤提示:
QQ截圖20160426212131.png

上位機(jī)程序
#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};    //顯示緩存區(qū)
unsigned char adc=0;         //存放接收的數(shù)據(jù)
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()   //計(jì)算延遲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;          //開(kāi)啟串行口中斷
   TR1=1;
   IP=0x10;           //設(shè)置串行口通斷為高優(yōu)先級(jí)
   SCON=0x50;        //設(shè)串口為方式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;            //數(shù)碼管顯示轉(zhuǎn)換結(jié)果
     LED1=0;
     P1=tab[dat[3]]+0x80;        //最高位加小數(shù)點(diǎn)
     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;
          }
}   


下位機(jī)程序
#include<AT89X52.h>
#define DAC0832 P0
#define uint unsigned int
#define uchar unsigned char
//*********定義變量區(qū)*******************
sbit EOC=P2^5;       //定義ADC0808/0809轉(zhuǎn)換結(jié)束信號(hào)
sbit START=P2^6;     //定義ADC0808/0809啟動(dòng)轉(zhuǎn)換命令
sbit CLOCK=P3^7;     //定義ADC0808/0809時(shí)鐘脈沖輸入位
sbit OE=P3^2;        //定義ADC0808/0809數(shù)據(jù)輸出允許位
sbit RL1=P2^0;
sbit RL2=P2^1;
sbit cs=P2^7;
sbit wr=P3^6;
sbit SW=P2^3;                //開(kāi)關(guān)量接入口
sbit zhongduan=P2^4;        //外部中斷請(qǐng)求位
code uchar sintab[]={0x7f,0x89,0x94,0x9f,0xaa,0xb4,0xbe,0xc8,0xd1,0xd9,0xe0,0xe7,0xed,0xf2,0xf7,0xfa,0xfc,0xfe,0xff};  //正弦信號(hào)數(shù)組
uchar pt;   //存放接收數(shù)據(jù)
uchar adc;   //存放轉(zhuǎn)換后的數(shù)據(jù)
uchar data i=0,k;
uchar a=0;
void delay()
{
        uchar j;
        for(j=0;j<250;j++);//延時(shí)函數(shù)
}
void sbu(uchar S){
        
         START=0;
     START=1;                 //是否轉(zhuǎn)換
         START=0;               
     while(EOC==0);  //等待轉(zhuǎn)換結(jié)束
     OE=1;         //允許輸出
     adc=P1;       //取轉(zhuǎn)換結(jié)果
         if(S==1)                  //開(kāi)關(guān)量未接入
     {SBUF=adc;
         }     //發(fā)送采集的數(shù)據(jù)
         else                        //開(kāi)關(guān)量接入
         {SBUF=0;
}
         while(!TI);   //等待發(fā)送數(shù)據(jù)結(jié)束(數(shù)據(jù)發(fā)送完,T1由硬件置位)
             TI=0;       //T1復(fù)位
}

void main(void)
{
        
    EA=0;
    TMOD=0x22;      //T0、T1工作方式2
    TH0=0x14;
    TL0=0x14;
    TH1=0xE7;       //波特率為625bps
    TL1=0xE7;
    IE=0x92;        //開(kāi)放串行口,T0中斷
    IP=0x10;        //設(shè)置T0中斷方式為高優(yōu)先級(jí)
    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;        
        }                 
}
/*定時(shí)計(jì)數(shù)T0的中斷服務(wù)子程序*/
void timer0(void) interrupt 1 using 1
{
     CLOCK=~CLOCK;    //產(chǎn)生ADC0808/0809時(shí)鐘脈沖信號(hào)
         
}
void serial(void) interrupt 4 using 0
{if(RI==1)               
{        RI=0;
        pt=SBUF;
        a=pt;
}
}

回復(fù)

使用道具 舉報(bào)

ID:208271 發(fā)表于 2021-3-31 20:45 | 顯示全部樓層
其實(shí)跟程序并沒(méi)有太大關(guān)系,我出現(xiàn)過(guò)幾次,都不是程序的問(wèn)題。
是仿真原理圖里有的電阻沒(méi)加,元件的參數(shù)沒(méi)設(shè)置好這些原因?qū)е碌,有時(shí)原理在實(shí)物上驗(yàn)證沒(méi)問(wèn)題,但就是
在仿真里運(yùn)行出錯(cuò),所以還是改改電路換個(gè)方式驗(yàn)證吧。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表