这个是查询法,不是中断法。
#include <AT89X52.h>
unsigned char cc[]={1,2,3,4,5};
/************串口初始化函数***************/
void serial_port_initial()//
{
PCON = 0x00; //波特率不加倍
SCON = 0x50; //0101,0000 设定串口方式1,10位异步通信
TMOD = 0x20; //0011,0001 设置定时器1为8位自动重装计数器
TH1 = 0xfd; //设置定时器1自动重装数 9.6K
TL1 = 0xfd; //波特率设定 9.6K
ES = 0; //串口中断关闭
ET1 = 0; //定时器1中断关闭
TR1 = 1; //打开串口
EA = 0; //开总中断
}
/***********串口发送一个数据**************/
void send_UART(unsigned char i)
{
TI = 0; //软件清零发送中断标志
SBUF = i ; //发送一帧数据
while( TI == 0 ); //等待发送结束
}
/***************主函数********************/
void main( void )
{
serial_port_initial(); //初始化串口
while( 1 )
{
if(RI==1) //判断是否接收完毕
{
a = SBUF; //把接收的数据存于a中
P0 = a; //用P0显示接收的数据
}
RI=0; //清除接收标志位
send_UART(cc); //通过串口发送
}
}
|