打印

请各位大哥帮忙看一下程序错在哪里

[复制链接]
2481|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
楼亮亮|  楼主 | 2008-3-15 21:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个程序编译的时候总是出现下面这个情况
MedWin v2.39 Translating F:\单片机\挑战杯\程序1\tzb.c......
    C51 COMPILER V7.50 - SN: K1DZP-5IUSHE
    COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2004
    C51 COMPILATION COMPLETE.  0 WARNING(S),  1 ERROR(S)
    ERROR C249 IN LINE 238 OF TZB.C: 'DATA': SEGMENT TOO LARGE
Translate completely and find errors!

程序如下
/*------------------------------------------------------**
**                程序的基本简介                        **
**定义:
**
**------------------------------------------------------*/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char 
uchar sbuf[10],rbuf[60],chgbuf[60];
uchar count,second=0,minute,hour;
bit fgsm,fghot,fgrd;
bit revfg,intfg;
sbit p20=P2^0;
sbit p21=P2^1;
/*------------------------------------------------------**
**函数声明
**------------------------------------------------------*/
void delay50ms(unsigned int nb);
void init();  
dat_bulid();
void data_chg();
M_contor();
send();

/*-----------------------------------------------------**
** 函数原型:void delay50ms(unsigned int nb)           **
** 函数功能:50ms定时
** 入口参数: nb
**-----------------------------------------------------*/
void delay50ms(unsigned int nb)
{ uchar i;
  while(nb--)
  { for(i=0;i<125;i++);
  }
}
/*-----------------------------------------------------**
**函数原型:void init()                            **
**函数功能:串口定时器初始化,方式2,波特率9600        **    
**入口参数:无                                         **
**-----------------------------------------------------*/
void init()   
{ TMOD=0x21;
  TL1=0xfd;          
  TH1=TL1;

  TH0=0x0c;
  TL0=0xdc;
  
  SCON=0x50;
  PCON=0x00;
  TR1=1;
  EA=1;
}
/*-------------------------------------------------------**
**函数原型:void time0() interrupt 1 using 1             **
**函数功能:时间定时,用于开启家用电器                   **
**入口参数:无
**-------------------------------------------------------*/
void time0() interrupt 1 using 1 
{ count++;
  TH0=0x0c;
  TL0=0xdc;
    if(count==16)
    {
        count=0;
        second++;
        if(second==60)
        {
            second=0;
            minute++;
            if(minute==60)
            {
                minute=0;
                hour++;
                if(hour==24)
                {
                    hour=0;
                }
            }
        }
    }
}

/*------------------------------------------------------**
**函数原型:void int0()  interrupt 0 using 0            **
**函数功能:外部中断入口,p15代表烟雾传感器,p16代表     **
**热释电传感器,p17代表无线模块接受中断                 **
**fgsm烟雾传感器,fghot热释电传感器,fgrd无线           **
**入口参数:无                                          **
**-------------------------------------------------------*/
void int0()  interrupt 0 using 0

  intfg=1;
  switch(P1&0xe0)
    { case 0x20:  fgsm=1; break;
      case 0x40:  fghot=1; break;
      case 0x80:  { if((P1&0x0f)==0x0f) fgrd=1; }break;
      default: break;
    }
}

/*------------------------------------------------------**
**函数原型:void uart1() interrupt 4 using 1            **
**函数功能:串口接受中断                                **
**出口参数:全局变量rbuf[]                              **
**------------------------------------------------------*/
void uart1() interrupt 4 using 1
{ uchar i;
  revfg=1;
  RI=0;
  for(i=0;i<5;i++)
    { rbuf=SBUF;
      while(RI==0); RI=0;
    }
}
/*-----------------------------------------------------**
**函数原型:dat_bulid()                                 **
**函数功能:实现发送前的数据处理                        ** 
**p20热水器,p21空调                                    **
**入口参数:无                                          **
**------------------------------------------------------*/
dat_bulid()
{ uchar i;
  P2=0xff;
  for(i=0;i<60;i++)
   { delay50ms(20);
     delay50ms(20);
   }                           //延时两分钟,等待主人遥控信息
  if(fgsm) sbuf[0]=0x01;  
  else     sbuf[0]=0x00;
  if(fghot&(!fgrd)) sbuf[1]=0x03;
  else              sbuf[1]=0x02;
  i=P2&0x03;                   //读取家电运行状况
  switch(i)
   { case 0x00: {sbuf[2]=0x05;sbuf[3]=0x07;}break;
     case 0x01: {sbuf[2]=0x04;sbuf[3]=0x07;}break;
     case 0x02: {sbuf[2]=0x05;sbuf[3]=0x06;}break;
     case 0x03: {sbuf[2]=0x04;sbuf[3]=0x06;}break;
     default:break;
   }
}

/*----------------------------------------------------------**
**函数原型:void data_chg()                                 **
**函数功能:16进制转换10进制                                 **
**入口参数:无                                              **
**出口参数:无                                              **
**-----------------------------------------------------------*/
void data_chg()
{ uchar i;
  for(i=0;i<60;i++)
   chgbuf=(rbuf/16)*10+rbuf%16;
}  
/*-----------------------------------------------------------**
**函数原型:M_contor()                                       **
**函数功能:实现对家用电器的定时控制                         **
**入口参数:无                                               **
**出口参数:无                                               **
**-----------------------------------------------------------*/
M_contor()
{ uchar i;
  data_chg();
  hour=chgbuf[1];
  minute=chgbuf[2];
  TR0=1;                                         //开定时中断
  for(i=3;i<60;i++)
  {
   if((chgbuf&0x0e)==0x00)
     { if((chgbuf&0x01)==0x01)
           { if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))
                p20=1;
            }
       else
           {  if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))
                p21=0;
           }
      }
 
   else if((chgbuf&0x0e)==0x02)
      { if((chgbuf&0x01)==0x01)
           { if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))
                p20=1;
            }
        else
           {  if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))
                p21=0;
           }
      }
   
   else 
      { if((chgbuf&0x01)==0x01)
           { if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))
                p20=1;
            }
        else
           {  if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))
                p21=0;
           }
       }
   }
}
/*------------------------------------------------------**
**函数原型:void send()                                 **
**函数功能:数据的发送                                  **
**入口参数:全局变量sbuf[]                              **
**------------------------------------------------------*/
send()
{ uchar i;
  dat_bulid();
  ES=0;                      //发送时关串口中断
  for(i=0;i<4;i++)
   { SBUF=sbuf;
     while(TI==0); TI=0;
    }
   ES=1;
}
/*----------------------------------------------------------------**
**函数原型:
**函数功能:
**-----------------------------------------------------------------*/
void main()

  init();
  send();
  while(1)
    { if(revfg)
        { revfg=0;
          M_contor();
        }
      if(intfg)
        { intfg=0;
          send();
        }
     }
}

相关帖子

沙发
NE5532| | 2008-3-16 09:16 | 只看该作者

大哥,给点专业精神好不好

起码说一下程序意图和问题所在吧。

另外你搞挑战杯这种正规比赛,好歹还是换个像样的编译器哈。

使用特权

评论回复
板凳
canger| | 2008-3-16 14:39 | 只看该作者

你用的是哪一款51啊

uchar sbuf[10],rbuf[60],chgbuf[60];
这些好象太大了,将他们放到idate中去.

使用特权

评论回复
地板
ayb_ice| | 2008-3-17 15:47 | 只看该作者

DATA空间只有128字节

而且还包括寄存器空间

使用特权

评论回复
5
楼亮亮|  楼主 | 2008-3-28 12:13 | 只看该作者

谢谢 大家

  谢谢 大家能帮我 现在问题得到解决了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

37

帖子

1

粉丝