这个程序编译的时候总是出现下面这个情况<br />MedWin v2.39 Translating F:\单片机\挑战杯\程序1\tzb.c......<br /> C51 COMPILER V7.50 - SN: K1DZP-5IUSHE<br /> COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2004<br /> C51 COMPILATION COMPLETE. 0 WARNING(S), 1 ERROR(S)<br /> ERROR C249 IN LINE 238 OF TZB.C: 'DATA': SEGMENT TOO LARGE<br />Translate completely and find errors!<br /><br />程序如下<br />/*------------------------------------------------------**<br />** 程序的基本简介 **<br />**定义:<br />**<br />**------------------------------------------------------*/<br />#include <reg52.h><br />#include <absacc.h><br />#include <intrins.h><br />#define uchar unsigned char <br />uchar sbuf[10],rbuf[60],chgbuf[60];<br />uchar count,second=0,minute,hour;<br />bit fgsm,fghot,fgrd;<br />bit revfg,intfg;<br />sbit p20=P2^0;<br />sbit p21=P2^1;<br />/*------------------------------------------------------**<br />**函数声明<br />**------------------------------------------------------*/<br />void delay50ms(unsigned int nb);<br />void init(); <br />dat_bulid();<br />void data_chg();<br />M_contor();<br />send();<br /><br />/*-----------------------------------------------------**<br />** 函数原型:void delay50ms(unsigned int nb) **<br />** 函数功能:50ms定时<br />** 入口参数: nb<br />**-----------------------------------------------------*/<br />void delay50ms(unsigned int nb)<br />{ uchar i;<br /> while(nb--)<br /> { for(i=0;i<125;i++);<br /> }<br />}<br />/*-----------------------------------------------------**<br />**函数原型:void init() **<br />**函数功能:串口定时器初始化,方式2,波特率9600 ** <br />**入口参数:无 **<br />**-----------------------------------------------------*/<br />void init() <br />{ TMOD=0x21;<br /> TL1=0xfd; <br /> TH1=TL1;<br /><br /> TH0=0x0c;<br /> TL0=0xdc;<br /> <br /> SCON=0x50;<br /> PCON=0x00;<br /> TR1=1;<br /> EA=1;<br />}<br />/*-------------------------------------------------------**<br />**函数原型:void time0() interrupt 1 using 1 **<br />**函数功能:时间定时,用于开启家用电器 **<br />**入口参数:无<br />**-------------------------------------------------------*/<br />void time0() interrupt 1 using 1 <br />{ count++;<br /> TH0=0x0c;<br /> TL0=0xdc;<br /> if(count==16)<br /> {<br /> count=0;<br /> second++;<br /> if(second==60)<br /> {<br /> second=0;<br /> minute++;<br /> if(minute==60)<br /> {<br /> minute=0;<br /> hour++;<br /> if(hour==24)<br /> {<br /> hour=0;<br /> }<br /> }<br /> }<br /> }<br />}<br /><br />/*------------------------------------------------------**<br />**函数原型:void int0() interrupt 0 using 0 **<br />**函数功能:外部中断入口,p15代表烟雾传感器,p16代表 **<br />**热释电传感器,p17代表无线模块接受中断 **<br />**fgsm烟雾传感器,fghot热释电传感器,fgrd无线 **<br />**入口参数:无 **<br />**-------------------------------------------------------*/<br />void int0() interrupt 0 using 0<br />{ <br /> intfg=1;<br /> switch(P1&0xe0)<br /> { case 0x20: fgsm=1; break;<br /> case 0x40: fghot=1; break;<br /> case 0x80: { if((P1&0x0f)==0x0f) fgrd=1; }break;<br /> default: break;<br /> }<br />}<br /><br />/*------------------------------------------------------**<br />**函数原型:void uart1() interrupt 4 using 1 **<br />**函数功能:串口接受中断 **<br />**出口参数:全局变量rbuf[] **<br />**------------------------------------------------------*/<br />void uart1() interrupt 4 using 1<br />{ uchar i;<br /> revfg=1;<br /> RI=0;<br /> for(i=0;i<5;i++)<br /> { rbuf=SBUF;<br /> while(RI==0); RI=0;<br /> }<br />}<br />/*-----------------------------------------------------**<br />**函数原型:dat_bulid() **<br />**函数功能:实现发送前的数据处理 ** <br />**p20热水器,p21空调 **<br />**入口参数:无 **<br />**------------------------------------------------------*/<br />dat_bulid()<br />{ uchar i;<br /> P2=0xff;<br /> for(i=0;i<60;i++)<br /> { delay50ms(20);<br /> delay50ms(20);<br /> } //延时两分钟,等待主人遥控信息<br /> if(fgsm) sbuf[0]=0x01; <br /> else sbuf[0]=0x00;<br /> if(fghot&(!fgrd)) sbuf[1]=0x03;<br /> else sbuf[1]=0x02;<br /> i=P2&0x03; //读取家电运行状况<br /> switch(i)<br /> { case 0x00: {sbuf[2]=0x05;sbuf[3]=0x07;}break;<br /> case 0x01: {sbuf[2]=0x04;sbuf[3]=0x07;}break;<br /> case 0x02: {sbuf[2]=0x05;sbuf[3]=0x06;}break;<br /> case 0x03: {sbuf[2]=0x04;sbuf[3]=0x06;}break;<br /> default:break;<br /> }<br />}<br /><br />/*----------------------------------------------------------**<br />**函数原型:void data_chg() **<br />**函数功能:16进制转换10进制 **<br />**入口参数:无 **<br />**出口参数:无 **<br />**-----------------------------------------------------------*/<br />void data_chg()<br />{ uchar i;<br /> for(i=0;i<60;i++)<br /> chgbuf=(rbuf/16)*10+rbuf%16;<br />} <br />/*-----------------------------------------------------------**<br />**函数原型:M_contor() **<br />**函数功能:实现对家用电器的定时控制 **<br />**入口参数:无 **<br />**出口参数:无 **<br />**-----------------------------------------------------------*/<br />M_contor()<br />{ uchar i;<br /> data_chg();<br /> hour=chgbuf[1];<br /> minute=chgbuf[2];<br /> TR0=1; //开定时中断<br /> for(i=3;i<60;i++)<br /> {<br /> if((chgbuf&0x0e)==0x00)<br /> { if((chgbuf&0x01)==0x01)<br /> { if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))<br /> p20=1;<br /> }<br /> else<br /> { if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))<br /> p21=0;<br /> }<br /> }<br /> <br /> else if((chgbuf&0x0e)==0x02)<br /> { if((chgbuf&0x01)==0x01)<br /> { if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))<br /> p20=1;<br /> }<br /> else<br /> { if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))<br /> p21=0;<br /> }<br /> }<br /> <br /> else <br /> { if((chgbuf&0x01)==0x01)<br /> { if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))<br /> p20=1;<br /> }<br /> else<br /> { if((hour=chgbuf[i+1])&(minute=chgbuf[i+2]))<br /> p21=0;<br /> }<br /> }<br /> }<br />}<br />/*------------------------------------------------------**<br />**函数原型:void send() **<br />**函数功能:数据的发送 **<br />**入口参数:全局变量sbuf[] **<br />**------------------------------------------------------*/<br />send()<br />{ uchar i;<br /> dat_bulid();<br /> ES=0; //发送时关串口中断<br /> for(i=0;i<4;i++)<br /> { SBUF=sbuf;<br /> while(TI==0); TI=0;<br /> }<br /> ES=1;<br />}<br />/*----------------------------------------------------------------**<br />**函数原型:<br />**函数功能:<br />**-----------------------------------------------------------------*/<br />void main()<br />{ <br /> init();<br /> send();<br /> while(1)<br /> { if(revfg)<br /> { revfg=0;<br /> M_contor();<br /> }<br /> if(intfg)<br /> { intfg=0;<br /> send();<br /> }<br /> }<br />} |
|