欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: GMIN stepping at time=0.251152仿真時遇見這個問題是咋回事 新人求指教! [打印本頁]

作者: 樂群    時間: 2016-4-26 21:22
標題: 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;
}
}


作者: wifingtta    時間: 2021-3-31 20:45
其實跟程序并沒有太大關系,我出現過幾次,都不是程序的問題。
是仿真原理圖里有的電阻沒加,元件的參數沒設置好這些原因導致的,有時原理在實物上驗證沒問題,但就是
在仿真里運行出錯,所以還是改改電路換個方式驗證吧。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1