打印

下面的程序为什末在keil2可以编译通过,而keil3不行

[复制链接]
1507|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chuandaoxy|  楼主 | 2007-7-17 16:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//设想先在主程序内部ram存入一组数据base[],再调用debug_insert函数,把数据插入缓冲区
//然后调用串行中断程序从串口发出

 #include<reg52.h>
 #include<stdio.h>
 #include<intrins.h>


 #define uchar unsigned char
 #define uint  unsigned int

#ifndef NULL
#define NULL ((void*)0L)
#endif


 #define DB_MAXSIZE 0x10
 


  idata  uchar  base[10] _at_ 0x40 ;

                   
 uchar db_head, db_tail,db_buffer[DB_MAXSIZE];

 




 //Function:debug_init
 //description:缓冲区指针设为0

 //////////////////////////////////////////////////

 void debug_init(void)

 {         
     SCON=0x50;
   
     PCON=0x00;  
          
     TMOD=0x20;

      TH1=0xfb;//波特率9600 18.432MHZ
   
     ES=1;//开放串行中断

     EA=1;

     TR1=1;
  
   

   


  }

////////////////////////////////////////////////////

 //Function:   debug_insert

 //description:把指向存储区的数据拷贝到缓冲区

 //parameters:base -指针 指向要拷贝数据的头地址

void debug_insert(uchar idata *base,uchar size)

  bit sendit=0;//标志位,表明是否要进行串行初始化

  uchar i=0;

  

  if (!size||base==NULL)

     {return;}

 if (db_tail==db_head)

    sendit=1;
    

 while((db_tail==db_head) || (i<size)) //缓冲区有空间且数据区还有数据时进行拷贝
 {  
   db_buffer[db_tail]=base;//拷贝当前字节

   i++;

   db_tail++;//移动指针

   

   if (db_tail==DB_MAXSIZE)//指针是否超出范围
    {
     db_tail=0;
    }
 }

 if(sendit)//是否要传输一个字节
     {  
       

     SBUF=db_buffer[db_head];
      
     }
     }
     


  ////////////////////////////////////////////////////////////////////

 //Function: debug_output

 //description:串行中断程序,增加缓冲区头指针,如果指针不等于尾指针
 //            输出下一个字节
 //////////////////////////////////////////////////
 
void debug_output(void) interrupt 4
{  
    
              RI=0;
             if (TI)    
             db_head++;
              TI=0;
     
    if (db_head ==DB_MAXSIZE)//是否超出范围
        {
         db_head=0;
         }
    if (db_head!=db_tail)         
    SBUF=db_buffer[db_head];
              
            }
        
//////////////////////////////////////////////////////            
main( )
    {    
        uchar i ;

        for(i=0;i<10;i++) 
        base=i;
      

        debug_init();
        debug_insert( base,10);
         while(1)
         {}
          
     }
  
        

        
           
    
       

相关帖子

沙发
computer00| | 2007-7-17 16:14 | 只看该作者

晕......编译通不过也不将错误信息发上来...

使用特权

评论回复
板凳
hqgboy| | 2007-7-17 16:17 | 只看该作者

重新建工程文件试试.

使用特权

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

本版积分规则

851

主题

1039

帖子

4

粉丝