我要实现PC机与单片机8051都可发送和接收数据的异步串行通信,现在只想要下位机单片机的程序。

具体要求:PC机键盘输入发送给单片机8051,单片机接收PC机发来的数据并送LED显示;单片机8051键盘的每次输入以BCD码送给单片机的LED显示,PC机接收单片机发送来的数据并送窗口显示;
下位机的程序用C语言编写。

#include<reg52.h>
unsigned char flag,a;
void main()
{

TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;//设置9600bps波特率 比特率是每秒钟传输二进制代码的位数
TL1=0xfd;
TR1=1;//开启定时器1
REN=1;//开串口通讯,允许串口接收
SM0=0;
SM1=1;//设置串口通讯方式1(8位传输数据)
EA=1;//开总中断 用中断法时打开总中断和串口中断
ES=1;//开串口中断
while(1)//此为单片机执行的任务
{
/* if(RI==1)//如果没收到数据RI=0,收到数据时RI=1
{
RI=0; //RI清零等待下次发送
P1=SBUF;//P1把发送的数据sbuf取走 点亮发光二极管
}*/ //这是第一种方法 查询法
if(flag==1)//说明收到数据了 //这是第二种方法 中断法
{ //下面程序是接收到数据后再发出去
ES=0;//关闭串口
flag=0;
SBUF='1';//28;//再把数据发出去,调用发送缓冲器
while(!TI);//等待数据发完,发送时TI=0,完了TI=1
TI=0;//发送数据标志位,清零
SBUF='2';//28; //带引号的为ACI码
while(!TI); //数据发送完时,TI=1
TI=0;
SBUF='3';//28; //可以发送任意字符串
while(!TI);
TI=0;
ES=1;//再次打开串口中断
}
}
}

void ser() interrupt 4 //串口中断子函数 一旦进入串口中断,说明有数据来了
{ //也就是说数据来的时候,进入串口中断
RI=0; //有接收数据时RI=1,没有时RI=0
// P1=SBUF; //调用接收缓冲器
a=SBUF;//接收数据
flag=1;
}

仔细看下,多揣摩揣摩追问

可否留个联系方式,想稍稍请教一下。

追答

QQ962762808,我也刚学不久,请多指教,,,,

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-19
很简单的串口程序啊追问

可否给个程序看看。

相似回答