51串口通讯程序

[复制链接]
626|7
手机看帖
扫描二维码
随时随地手机跟帖
hrg13579|  楼主 | 2018-1-9 15:46 | 显示全部楼层 |阅读模式
本帖最后由 hrg13579 于 2018-1-9 15:48 编辑

#include<reg52.h>
unsigned int a;
void main()
{
    TMOD=0x20;        //设置定时器工作方式 1
    TH1=0xfd;           //设置定时器1初值
    TL1=0xfd;
    TR1=1;           //开启定时器1
    REN=1;   //启动串行口接收数据
    SM0=0;        //设置串行口工作方式为1
    SM1=1;
    while(1)
    {
        while(RI)        //查询法,当串行口检测到有数据接收时,硬件自动让RI置1,开始向CPU申请中断。再把收到的数据通过SBUF赋给P1
         {
              RI=0;  // 本程序无需申请中断操作,软件置RI=0,让其取消中断,执行P1=SBUF语句。如不取消则RI一直向CPU申请中断而不执行下面语句
              P1=SBUF; //把收到的串口端数据赋给P1
              for(a=0;a<10;a++)
              {                       
                  SBUF=P1;
              }
         }
    }
}
我现在要实现,PC发一条,单片机回10条。可是现在是发1条回1条。这个code有啥问题啊?

相关帖子

bioger2| | 2018-1-9 15:55 | 显示全部楼层
你这个发送没有判断发送状态吧。得等上一帧数据发送完成后再发送第二帧吧

使用特权

评论回复
hrg13579|  楼主 | 2018-1-9 16:02 | 显示全部楼层
bioger2 发表于 2018-1-9 15:55
你这个发送没有判断发送状态吧。得等上一帧数据发送完成后再发送第二帧吧 ...

要怎么改呢?

使用特权

评论回复
ayb_ice| | 2018-1-9 16:36 | 显示全部楼层

while(1)
{
        if (RI)        //查询法,当串行口检测到有数据接收时,硬件自动让RI置1,开始向CPU申请中断。再把收到的数据通过SBUF赋给P1
        {
                RI=0;  // 本程序无需申请中断操作,软件置RI=0,让其取消中断,执行P1=SBUF语句。如不取消则RI一直向CPU申请中断而不执行下面语句
                P1=SBUF; //把收到的串口端数据赋给P1
                TI = 0;
                for(a=0;a<10;a++)
                {                       
                        SBUF=P1;
                        while (!TI);
                        TI = 0;
                }
        }
}

使用特权

评论回复
hrg13579|  楼主 | 2018-1-9 16:42 | 显示全部楼层
ayb_ice 发表于 2018-1-9 16:36
while(1)
{
        if (RI)        //查询法,当串行口检测到有数据接收时,硬件自动让RI置1,开始向CPU申请中 ...

哈哈,按你改的code可以了

使用特权

评论回复
cainiao_123| | 2018-1-9 17:18 | 显示全部楼层

串口发送数据需要时间

使用特权

评论回复
bioger2| | 2018-1-10 08:20 | 显示全部楼层
基础知识要好好看看啊

使用特权

评论回复
zqx1000| | 2018-4-10 21:20 | 显示全部楼层
kankan

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

300

主题

587

帖子

4

粉丝