找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2348|回复: 2
收起左侧

PC与51单片机间的双向通讯问题

[复制链接]
ID:102056 发表于 2016-11-15 19:43 | 显示全部楼层 |阅读模式
QQ截图20161115193311.png
本程序实现的效果PC端是发送字符C,继电器吸和;发送字符O,继电器断开。并且单片机不断向PC发送字符a。
现在我想PC端发送字符,同时单片机把接收到的返回给PC显示,但是我不清楚是不是写要中断?#include <reg52.h>

sbit J4=P1^5;
/* ***************************************************** */
// 函数名称:UART_Init()
// 函数功能:串口初始化
// 入口参数:无
// 出口参数:无
/* ***************************************************** */
void UART_Init(void)
{   
        TMOD &= 0x0f;   // 清空定时器1      
        TMOD |= 0x20;        // 定时器1工作于方式2
        TH1 = 0xfd;                // 为定时器1赋初值
        TL1 = 0xfd;                // 等价于将波特率设置为9600
        ET1 = 0;                // 防止中断产生不必要的干扰
        TR1 = 1;                // 启动定时器1


        SCON |= 0x50;        // 串口工作于方式1,允许接收
}
/* ***************************************************** */
// 函数名称:UART_SendOneByte()
// 函数功能:发送一个字节
// 入口参数:待发送的数据(uDat)
// 出口参数:无
/* ***************************************************** */
void main(void)
{
  unsigned char X;
UART_Init();
while(1)
{
if(RI)
{
   X=SBUF;
   while(!RI);
   RI=0;
   if(X=='C')
   J4=0;
   if(X=='O')
   J4=1;


  }
  else
  {
          SBUF='a';
        while(!TI);
         TI=0;
  }






  }


}
本程序实现的效果PC端是发送字符C,继电器吸和;发送字符O,继电器断开。并且单片机不断向PC发送字符a。
现在我想PC端发送字符,同时单片机把接收到的返回给PC显示,但是我不清楚是不是写要中断?

回复

使用道具 举报

ID:102056 发表于 2016-11-15 20:14 | 显示全部楼层
#include <reg52.h>
sbit J4=P1^5;
/* ***************************************************** */
// 函数名称:UART_Init()
// 函数功能:串口初始化
// 入口参数:无
// 出口参数:无
/* ***************************************************** */
void UART_Init(void)
{   
        TMOD &= 0x0f;   // 清空定时器1      
        TMOD |= 0x20;        // 定时器1工作于方式2
        TH1 = 0xfd;                // 为定时器1赋初值
        TL1 = 0xfd;                // 等价于将波特率设置为9600
        ET1 = 0;                // 防止中断产生不必要的干扰
        TR1 = 1;                // 启动定时器1

        SCON |= 0x50;        // 串口工作于方式1,允许接收
}
/* ***************************************************** */
// 函数名称:UART_SendOneByte()
// 函数功能:发送一个字节
// 入口参数:待发送的数据(uDat)
// 出口参数:无
/* ***************************************************** */
void main(void)
{
  unsigned char X;
UART_Init();
while(1)
{
if(RI)
{
   X=SBUF;
   while(!RI);
   RI=0;
   if(X=='C')
   J4=0;
   if(X=='O')
   J4=1;

  }
  else
  {
          SBUF=X;
        while(!TI);
         TI=0;
  }




  }

}
本程序实现的效果PC端是发送字符C,继电器吸和;PC不断收到字符C。       发送字符O,继电器断开PC不断收到字符O。
想要接发次数是一致的?
QQ截图20161115200835.png
回复

使用道具 举报

ID:148140 发表于 2016-11-15 21:36 | 显示全部楼层
很给力   很  有用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表