打印

希望大家能帮我一把,这道题很难

[复制链接]
2280|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
newstarman|  楼主 | 2012-4-24 21:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我准备把红外遥控解码后,写入eeprom,再读出,然后输出。我的程序会在下方列出,我的程序调试后,发现单个程序没错,几个程序和到一块,在运行printf。。。后L107:adress space overflow地址溢出,SPACE:DATA位置在数据处,主要程序下面列出:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "common.h"

#define ADDRWR 0xa0
#define ADDRRD 0xa1
//#define Page   16
void WriteToRom(BYTE *pData,BYTE Address,BYTE cNum);
void ReadFromRom(BYTE *pData,BYTE Address,BYTE cNum);
#define JINGZHEN 48
#define TIME0TH ((65536-100*JINGZHEN/12)&0xff00)>>8   //time0,100us,红外遥控
#define TIME0TL ((65536-100*JINGZHEN/12)&0xff)
#define TIME1TH ((65536-5000*JINGZHEN/12)&0xff00)>>8   
#define TIME1TL ((65536-5000*JINGZHEN/12)&0xff)
#define uchar unsigned char
#define uint  unsigned int
code uchar  BitMsk[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};
uint IrCount=0,Show=0,Cont=0;
uchar IRDATBUF[32],s[20];
uchar IrDat[5]={0,0,0,0,0};
uchar aa[6]={0,0,0,0,0,0};
int IrStart=0,IrDatCount=0;
int flag=0;
extern void initLCM( void);                          //LCD初始化子程序
extern void DisplayListChar(uchar X,uchar Y, unsigned char *DData);                    //显示指定坐标的一串字符子函数
void timer1int (void)  interrupt 3  using 3{  //定时器1
EA=0;
TH1 = TIME1TH;  
TL1 = TIME1TL;
Cont++;
if(Cont>10)Show=1;
EA=1;
}
void timer0int (void)  interrupt 1  using 1{  //定时器0
uchar i,a,b,c,d,j=0;

EA=0;
TH0 = TIME0TH;  
TL0 = TIME0TL;
if(IrCount>500)IrCount=0;
if(IrCount>300&&IrStart>0){IrStart=0;IrDatCount=0;IrDat[0]=IrDat[1]=IrDat[2]=IrDat[3]=0;IrCount=0;}
if(IrStart==2)
{
  IrStart=3;
  for(i=0;i<IrDatCount;i++)
  {
   if(i<32)
   {
    a=i/8;//锄禾子喻
    b=IRDATBUF[i];
    c=IrDat[a];
    d=BitMsk[i%8];
    if(b>5&&b<14)c|=d;
    if(b>16&&b<25)c&=~d;
    IrDat[a]=c;
   }
  }
  if(IrDat[2]!=~IrDat[3])
  {
   IrStart=0;IrDatCount=0;IrDat[0]=IrDat[1]=IrDat[2]=IrDat[3]=0;IrCount=0;
  
  }
       else{
       if(flag==0)
       { IrStart=0; IrStart=0;IrDatCount=0;IrDat[0]=IrDat[1]=IrDat[2]=IrDat[3]=0;IrCount=0;
       aa[j]=IrDat[3];j++;}
        if(j<6)flag=0;
       else
       { flag=1;
  EA=1;
  return;}
}}
IrCount++;
EA=1;
}
void int0() interrupt 0  using 0  {
EA=0;
if((IrStart==0||IrStart==3)&&flag==1)
{
   IrStart=1;IrCount=0;TH0 = TIME0TH;TL0 = TIME0TL;
   IrDatCount=0;EA=1;
   return;
}
if(IrStart==1)
{
  if(IrDatCount>0&&IrDatCount<33)
   IRDATBUF[IrDatCount-1]=IrCount;
  if(IrDatCount>31)
   {IrStart=2;TH0 = TIME0TH;TL0 = TIME0TL;EA=1;return;}
  if(IrCount>114&&IrCount<133&&IrDatCount==0)
   {IrDatCount=1;}else if(IrDatCount>0)IrDatCount++;
}   
IrCount=0;TH0 = TIME0TH;TL0 = TIME0TL;
EA=1;
}
main()
{  
    int i;
    BYTE SData[6];
    BYTE  Address=0x70;
TMOD  |= 0x011;
TH0 = TIME0TH;
TL0 = TIME0TL;
ET0=1;
TR0=1;   
     
IT0 = 1;    //下降沿
EX0 = 1;

EA=1;

         while(!flag);
  

TR1=0;
TR0=0;
ET1=0;
ET0=0;EX0=0;
initUart(); /* 初始化串口 */
    WriteToRom(aa,Address,6);
    for(i=0;i<6;i++)SData[i]=0;
    ReadFromRom(SData,Address,6);
printf("\n AT24C16 adress 0x begin \n");//换行
   for(i=0;i<6;i++)
   {
      if(SData[i]<=0x0f){
   printf("0%BX ",SData[i]);     
      }
      else{
   printf("%B1X ",SData[i]);
      }
    }
   while(1);

}

相关帖子

沙发
newstarman|  楼主 | 2012-4-24 22:01 | 只看该作者
其中initUart(); /* 初始化串口 */ 是:
void initUart(void)/*初始化串口波特率,使用定时器2*/
{
/* Setup the serial port for 9600 baud at 11.0592MHz */
        SCON = 0x50;  //串口工作在方式1
    TMOD=0x20;//定时器1工作了方式2;
        PCON=0x00;//SMD=0
        TH1=0xFD;
        TL1=0xfd;
    TR1  = 1;//启动定时器   
    TI=1;/* 置位TI注意如果此位的作用是发送中断请求位,只有在置一后才可以发送数据*/
}

使用特权

评论回复
板凳
elec921| | 2012-4-25 09:23 | 只看该作者
看到这样的贴就晕

使用特权

评论回复
地板
airwill| | 2012-4-25 11:47 | 只看该作者
新人嘛, 还没有学会调试技巧呢.
看看大侠的这一帖, 从跟上教你怎么调试程序.
https://bbs.21ic.com/icview-286228-1-1.html

使用特权

评论回复
5
nixianmin| | 2012-4-25 11:49 | 只看该作者
自己写个输出函数,不用printf,不就ok了

使用特权

评论回复
6
NE5532| | 2012-4-25 12:37 | 只看该作者
本帖最后由 NE5532 于 2012-4-25 16:24 编辑

呵呵,感谢楼上有人推荐鄙人的拙作,不过问下楼主,楼主那个错误提示是在什么地方看到的呢?编译器上?液晶显示上?

使用特权

评论回复
7
coody| | 2012-4-25 13:20 | 只看该作者
太难了,闪

使用特权

评论回复
8
NE5532| | 2012-4-25 21:56 | 只看该作者
楼主啊,我问的问题你还没说呢。

使用特权

评论回复
9
highgear| | 2012-4-25 22:01 | 只看该作者
NE5532 是个热心人啊, 应该把那些不作为的版主换下来

使用特权

评论回复
10
NE5532| | 2012-4-25 22:03 | 只看该作者
NE5532 是个热心人啊, 应该把那些不作为的版主换下来
highgear 发表于 2012-4-25 22:01


谢谢褒奖,不过从理论上说,斑竹主要负责管理版面,而不是负责答帖。

使用特权

评论回复
11
newstarman|  楼主 | 2012-4-26 21:12 | 只看该作者
file:///F:/问题.jpg

问题.JPG (20.63 KB )

问题.JPG

使用特权

评论回复
12
newstarman|  楼主 | 2012-4-26 21:13 | 只看该作者
全部运行就出现以上问题

使用特权

评论回复
13
newstarman|  楼主 | 2012-4-26 21:15 | 只看该作者
即使套用原来的程序还是出现以上的问题

使用特权

评论回复
14
newstarman|  楼主 | 2012-4-26 21:23 | 只看该作者
我很想表达清楚问题,但不知从何说起,单个程序运行都正确,我只有把我的程序和盘托出让大家帮忙解决

红外遥控模拟.rar

98.53 KB

使用特权

评论回复
15
newstarman|  楼主 | 2012-4-26 21:27 | 只看该作者
我想你们会帮解决的,对吗?拜托

使用特权

评论回复
16
NE5532| | 2012-4-26 21:30 | 只看该作者
我想你们会帮解决的,对吗?拜托
newstarman 发表于 2012-4-26 21:27


不会,因为我们手里既没有硬件,也不知道楼主到底想干嘛。我估计楼主是在做毕业设计之类,不过楼主只有安心下来学基础,才能解决这个问题,目前除了你能在身边找到懂技术的人来帮你,我们无能为力。

使用特权

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

本版积分规则

0

主题

21

帖子

0

粉丝