查询方式:发送数据——先发后查;
接收数据——先查后收。
中断方式:发送数据——发送、等待中断、中断中发送;
接收数据——等待中断、在中断中接收。
下面让我们通过两个列子进一步看一下两者的区别:
/******************查询方式实现的串口通讯*************************/ #include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar code table[]="E-mail:xtxy_esl@163.com "; uchar i,temp;
void init_ser() //串口初始化 { TMOD=0x20; //定时器1工作于方式2 TH1=0xf3; //娤初值波特率为2400 TL1=0xf3; TR1=1; //开定时器1 SCON=0x50; //设置串口方式1 允许接收 EA=0; //关总中断 } void out_ser() //串口输出 { while(table[i] != '\0') { SBUF=table[i]; while(!TI); //注意“;” TI=0; i++; } i=0; SBUF=temp; while(!TI); TI=0; }
void main() { init_ser(); //串口初始化 while(1) //必须在大循环中 { if(RI) //扫描是否接收到数据(一个字节) { RI=0; temp=SBUF; out_ser(); //串口输出 } }
} /******************中断方式实现的串口通讯*************************/ #include<reg52.h> #define uint unsigned int #define uchar unsigned char //uchar code table[]="you get "; uchar temp,flag;
void init_ser() //串口初始化 { TMOD=0x20; //定时器1工作于方式2 TH1=0xfd; //娤初值波特率为 TL1=0xfd; TR1=1; //开定时器1 SCON=0x50; //设置串口方式1 允许接收 EA=1; //开总中断 ES=1; //开串口中断 }
void main() { init_ser(); while(1) { if(flag==1) { ES=0; SBUF=temp; while(!TI); TI=0; ES=1; flag=0; } } } void ser() interrupt 4 { temp=SBUF; //读走数据 RI=0; flag=1;
}
|