求51单片机与PC串行通讯C51简单小程序?(PC向单片机发送并返回接收状态控制小灯点亮,简易。是为了做实验

如题所述

#include <REG52.H>

sbit LED = P2^0;
bit Flag;
unsigned int ReData,SenData;

void main (void) {

SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON= 0x00;
TH1 = 0xFD; //baud reload value 9600、数据位8、停止位1。效验位无 (11.0592)
TL1 = 0xFD;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
LED=1;

while(1)
{

if (Flag==1)
{
SBUF=SenData; //SUBF接受/发送缓冲器
while(TI==0);
TI=0;
Flag=0;
}

}

}

void ser_int (void) interrupt 4 using 1
{

if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
ReData = SBUF; //SUBF接受/发送缓冲器
SenData=ReData;
Flag=1;
LED=0;
}
}

试下这个程序,PC发什么,它就回送什么,收到数据,点亮P2.0的LED。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-22
推荐个论坛吧

建议 去 我的领地 5d6d 的 proteus 论坛看看

那里有很多 单片机仿真实例,包括仿真图 和 源码
第2个回答  2011-09-22
//这个程序用1602显示PC发过来的字符。
/********************************************************************************************
串口初始化程序:波特率4800,(终端设置:4800,8,无,1,无)
/********************************************************************************************/
void Init_COM(void){
TMOD = 0x20; //定时器工作方式设置,定时器1方式2
SCON = 0x50; //串口工作方式1,允许串口接收
TH1 = 0xF3; //定时器初值高8位设置
TL1 = 0xF3; //定时器初值低8位设置
PCON = 0x80; //波特率倍频
TR1 = 1; //定时器启动
}

/********************************************************************************************
主程序:实现接收数据并把接收到的数据发送出去
/********************************************************************************************/
void main(){
unsigned char dat,li=0x80;
Init_COM(); //串口初始化
LCM2402_Init(); //LCM2402初始化
print(0x80," HELLO! "); //在第一行打印LOGO字符
print(0x40,"Input your words"); //在第二行打印LOGO字符
while(1){
if (RI == 1){ //接收中断标志位为1时
dat = SBUF; //接收数据 SBUF 为单片机的接收发送缓冲寄存器
RI = 0; //令接收中断标志位为0(软件清零)
SBUF = dat; //将接收的数据发送回PC
while(TI == 0);
TI = 0;
print2(li,dat); //在第一行显示串口字符串
li++;
if(li > 0x8f){
li = 0x40;
}
if(li > 0x4f && li < 0x80){
li = 0x80;
}
}
}
}
/********************************************************************************************/
相似回答