#include<reg52.h> #include<string.h> #define uchar unsigned char #define uint unsigned int uchar temp,flag,readflag,i; uchar serial_data[]={0x13,0x87,0x94}; void serial_send(uchar temp); void main() { TMOD=0x20; //定时器T1工作在方式1; TH1=0xfd; //设置波特率为:9600; TL1=0xfd; TR1=1; //开定时器T1; SM0=0; SM1=1; REN=1; //设置串口工作方式1; EA=1; //开总中断; ES=1; //开串口中断; ES=0; SBUF=0xaa; //发送aa; while(!TI); TI=0; ES=1; while(1) { if (flag==1) //如果取数标志已置位,就将读到的数从串口发出 { flag=0 ; //取数标志清0 serial_send(temp); //发送接收到的字符; readflag=1; } if(readflag==1&temp=='b') //发送b的时候返回数组中的数值; { ES=0; readflag=0; for(i=0;i<3;i++) { SBUF=serial_data; while(!TI); TI=0; i++; } ES=1; } } }
void serial_send(uchar temp) //发送字符子程序; { ES=0; SBUF=temp; while(!TI); TI=0; ES=1; }
void serial_receive() interrupt 4 //中断接收子程序; { RI=0; temp=SBUF; flag=1; } 我要实现的功能是:刚开始单片机给Pc发送一个aa,然后Pc给单片机发送除b之外的字符时原样返回单片机,发送b的时候返回b和数组中的三个数字,但是为什么程序没有错,就是发送b的时候返回来的就是没有数组三个数中中间的那个数呢??求高手指教!!
|