| 
  void timer1intrrupt() interrupt 1 
{   
 TR0=0; 
 baozhanqi(); 
 TH0 = 0xA9; 
    TL0 = 0x9A;  
} 
void senddata(uchar dat)             // send a data 
{   ES = 0; 
    SBUF = dat; 
    while(!TI); 
    TI = 0; 
    ES =1; 
} 
/* serial interrupt */ 
void serial() interrupt 4    // serial interrupt 
{  
 RI = 0; 
 ES=0; 
 TR1 = 0; 
    TH1 = 0xD8; 
 TL1 = 0xF0; 
 serialdata[z] = SBUF;           // Get  
 z = z+1; 
 ES=1; 
 TR1 = 1;  
} 
/* Timer1  interrupt */ 
void timer1() interrupt 3         // timer1 interrupt 
{ 
    int i,n,s; 
bit flag; 
TR1 = 0; 
   for(s=0;s<z;s++) 
         { 
            if(serialdata==0x16) 
             { 
               if(serialdata[s+1]==0x17)   break;  
             } 
         }  
      if(s+2<z) 
         {    
            s=s+2; 
            for(n=s;n<z;n++) 
    { i=n-s; 
       tab1=serialdata[n]; 
                senddata(tab1); 
    } 
     TR0=1; 
         }    
}           
void baozhanqi() 
{ 
   uchar q,temp=3,temp1=200; 
   baozhanqi_display(); 
   q=num5+num6*2+24; 
   while(1) 
      { 
  if(num7<13) 
   {  
    if(num7%2!=0) 
     { 
         while(temp1--)  show_chinese(BZQ+(384-(11-num7)*8));  
               temp1=200; 
         move_left_scan(BZQ, q); 
         while(temp1--)  show_chinese(BZQ+(384-(11-num7)*8));  
          
     } 
    else 
     { 
         while(temp1--)  show_chinese(BZQ+(384-(12-num7)*8));  
               temp1=200; 
         move_left_scan(BZQ, q); 
         while(temp1--)  show_chinese(BZQ+(384-(12-num7)*8));      
     }  
   } 
  else 
   {   
    while(temp--)  move_left_scan(BZQ, q);            
   } 
        IAP_CONTR=0x20;  
   } 
} 
就是串口发送数据后,用单片机外部RAM存储起来,同时设置一个标志位,同时置TR0=1,进入定时器0中断后就立即置TR0=0,接着就调用显示函数,这样是没问题,问题是我通过上位机再次发送数据时,不能立即显示,必须要等到上次发送的内容显示完后才有效,这是什么原因啊? 
 麻烦各位帮忙看一下,帮忙解决一下!谢谢!QQ:978520695 
  |