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
|