#include<reg52.h>
#define i 30
#define uchar unsigned char
uchar flag;
char table2[i];
int num=0;
void init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void ser() interrupt 4
{if(RI==1)
{
RI=0;
flag=SBUF;
if(flag!='D')
{
table2[num]=flag;
num++;
}
else{
num=0;
}
TI=1;
SBUF=flag;
}}
void main()
{
init();
while(1){
switch(table2[24])
{
case '9' : switch(table2[25])
{
case'3':P2=0xf5;}
break;
case '3' : switch(table2[25])
{
case'4':P2=0xfa;}
break;
default:P2=0xfd;break;
}}
//while(1);
}
现在是上位机发一个信号后执行case后的语句,会一直执行case后语句,如何发一个信号只执行一次呢,我想做点动的,就是上位机发个信号P2的灯就亮一次,一直发就一直亮不发就不亮
而且很奇怪的是上位机第一次发信号无反应,第二次发才有反应
|