久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2015|回復: 4
收起左側

Error [1250]could not find space (2 bytes) for variable _SEC pic單片機編譯問題

[復制鏈接]
ID:769545 發表于 2022-6-30 23:43 | 顯示全部樓層 |閱讀模式
我是新手,提問的帖不夠全面,現在完整發出來,請問一下高手

出錯提示如下:
Error   [1250] E:\thermometer\PIC\thermometer.c; 72. could not find space (2 bytes) for variable _SEC

unsigned int SEC;這樣定義編譯會通過,這樣的話比較的數是不是少于255;理論上是不會的。是不是我哪兒設置不對?

單片機源程序如下:
#include <pic.h>
//#include "thermometer.h"
unsigned char volatile ADCY_COUNT @ 0X25;
unsigned char volatile DIP0 @ 0X26;
unsigned char volatile DIP1 @ 0X27;
unsigned char volatile WEI @ 0X30;
unsigned char sbstatus @ 0x23;
bit volatile ADCY@((unsigned)&sbstatus*8+0;

unsigned char LED @ 0x21;
bit volatile LEDdp@((unsigned)&LED*8+0;
bit volatile LEDg@((unsigned)&LED*8+1;
bit volatile LEDf@((unsigned)&LED*8+2;
bit volatile LEDe@((unsigned)&LED*8+3;
bit volatile LEDd@((unsigned)&LED*8+4;
bit volatile LEDc@((unsigned)&LED*8+5;
bit volatile LEDb@((unsigned)&LED*8+6;
bit volatile LEDa@((unsigned)&LED*8+7;

#define XLEDa  RC0
#define XLEDb  RC1
#define XLEDc  RC5
#define XLEDd  RC4
#define XLEDe  RC3
#define XLEDf  RC2
#define XLEDg  RA5

//unsigned char volatile SEC; //雙字節
unsigned int SEC;
unsigned char  i;

void DisbytLED(void)
  {
                XLEDa=LEDa;
                XLEDb=LEDb;
             XLEDc=LEDc;
        XLEDd=LEDd;
        XLEDe=LEDe;
        XLEDf=LEDf;
        XLEDg=LEDg;
                //LEDdp=;
  }
void interrupt ISR(void)
{
  if(T0IE&&T0IF==1)
    {   T0IF=0;
     TMR0=TMR0+0X03;
     OPTION_REG=0X01;
     LED=0X00;
      DisbytLED();      
      if(WEI==0X00)
      {
         RA0=1;
         RA1=0;
         LED=DIP0;
         WEI=0X01;
      }
      else
      {
         RA1=1;
         RA0=0;
         LED=DIP1;
         WEI=0X00;
      }  

    DisbytLED();
    SEC=SEC+1;
    if(SEC==500)   
        ADCY=1;
    SEC=0;   
    }
  }


void cydelay()   //采樣時間延時程序
{
  for (i=255;i>0;i--)
    {
     asm("nop");
     asm("nop");
     asm("nop");
     asm("nop");
    }

}

void initial()    //初始化程序
{
  INTCON=0X00;
  TRISA=0X0C;
  ANSEL=0X04;
  //TRISB=0X00;
  TRISC=0X00;
//TRISD=0X00;
OPTION_REG=0X01;
  ADCON1=0X04;
  ADCON0=0X00;
  CMCON=0x07;
  INTCON=0XA0;
}
/*主程序*/
main()
{
WEI=0X00;
ADCY=0;
initial();//調用初始化端口程序


for(;;)
{
   asm("clrwdt");//清除看門狗
  // DIP0=0X11;
   //DIP1=0XFF;
    SEC=SEC+1;
   if(SEC>=500)
    ADCY=1;
}
}
// LLED=0XFF;
// LLED1=0;
  //LOLED=0XFF;


回復

使用道具 舉報

ID:887371 發表于 2022-7-1 09:36 | 顯示全部樓層
這代碼太多問題了。
1.不要大量使用volatile 絕對定位變量。
2.能用自動變量就不要用全局變量。
3.中斷服務中使用函數。
4.多處代碼邏輯混亂。
5.picc的特有語法使用錯誤。你這代碼功能我猜測是2位數碼管顯示,只需要標準C語言就能完成,完全不需要用到picc的特有語法。雖然你沒定義幾個變量,因語法出錯,編譯提示定義的變量超出了極限。

樓主應要花幾天學習下C語言基礎。
回復

使用道具 舉報

ID:769545 發表于 2022-7-1 18:45 | 顯示全部樓層
datouyuan 發表于 2022-7-1 09:36
這代碼太多問題了。
1.不要大量使用volatile 絕對定位變量。
2.能用自動變量就不要用全局變量。

中斷里面的程序是1ms刷新一次,顯示需要刷新,2位數碼管的程序是一樣的,不過可以調整;我奇怪的是:判別秒SEC大于500秒,意味著需要用2個字節,理論上需要定義int,但是編譯會出錯,如果定義一個字節char就能正常編譯通過。我的意思是PICC的編譯器是不是不能直接比較大的數據,如2個字節的數據。
回復

使用道具 舉報

ID:329625 發表于 2022-7-1 19:26 | 顯示全部樓層
先找到錯誤什么意思,然后去對應的地方修改
回復

使用道具 舉報

ID:887371 發表于 2022-7-2 09:25 | 顯示全部樓層
hym8085hym 發表于 2022-7-1 18:45
中斷里面的程序是1ms刷新一次,顯示需要刷新,2位數碼管的程序是一樣的,不過可以調整;我奇怪的是:判別 ...

假設你的mcu共有40byte RAM。由于你代碼這么多問題,使得還沒定義SEC,RAM就用掉了39byte。
所以定義一個字節(char)就能正常編譯通過,定義l兩個字節(short)就不能編譯通過。
你按我提到的幾點要求稍微改下,就不會出現你奇怪的現象。

再強調下,編譯器一般不會有問題,該懷疑的是自己的代碼,自己解決相關問題的思路。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久久冷 | 亚洲福利片| 国产精品福利视频 | 蜜桃在线一区二区三区 | 成人视屏在线观看 | 国产精品无码久久久久 | 欧美一区二区三区在线 | 色网站入口 | 精品国产乱码久久久久久闺蜜 | 久久久久久女 | 亚洲天堂免费在线 | 成人精品视频99在线观看免费 | 精品视频免费在线 | 美女视频黄色片 | 中文字幕成人在线 | 国产69久久精品成人看动漫 | 国产一区二区三区在线 | 亚洲一区二区视频在线观看 | 久久久国产一区二区三区 | 久久精品视频亚洲 | 国产精品久久久久久久岛一牛影视 | 一区二区三区日韩精品 | 一区二区三区四区电影视频在线观看 | 日韩精品一区二区三区中文在线 | 精品区一区二区 | 综合视频在线 | 91在线视频免费观看 | 久久久性色精品国产免费观看 | 黄视频在线网站 | 亚洲国产成人精品女人久久久野战 | 亚洲一区二区中文字幕 | 亚洲最大福利网 | 成人免费视频网站在线观看 | 欧美三级免费观看 | 欧美日韩精品在线一区 | 日本污视频 | 日韩精品一区二区在线观看 | 浮生影院免费观看中文版 | 欧美一区二区三区免费在线观看 | 久久精品一区二区三区四区 | 国产精品视频入口 |