| 
 
| 
 #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的灯就亮一次,一直发就一直亮不发就不亮
 而且很奇怪的是上位机第一次发信号无反应,第二次发才有反应
 
 
 
 | 
 |