找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

新手疑惑 关于C51单片机串口通讯的问题,挺急的在线等

查看数: 2534 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-7-31 23:08

正文摘要:

各位好,本人由于刚刚接触51单片机,在学习串口通讯中遇到了困难, 问题是: 由串口助手输入字符串后,再返回到串口助手上的字符串却有丢失,丢失的特点为,间隔丢失。 自己的理解: 函数中有比较函数 ...

回复

ID:379876 发表于 2018-8-2 08:21
谢谢各位前辈给我的建议和热心的解答!但是我的问题是为什么会出现这样的情况以及解决方法,最佳答案只能给解决了这两个问题的人哈。大家对我编程的建议我都应用在后续程序中了,使得逻辑更加清晰了,非常感谢!
ID:381546 发表于 2018-8-1 09:39
void intSIO() interrupt 4 using 2
{
    if(TI)
    {
        TI=OFF;
        if(bSD)
        {
        if(curSND<lenSND) SBUF=bufSND[curSND++];
       else {bSD=OFF;/*mSI=0;*/}}}
      if(RI){
         RI=OFF;
          bufRCV[putRCV++]=SBUF;
            putRCV &= 0X07;}
}
ID:379876 发表于 2018-8-1 07:38
那请问将发送写入中断后,如何触发TI=1的条件呢?如果不能触发TI=1就不能将数据写入SBUF,而数据没有写入SBUF,就无法触发TI=1的条件,这是个死循环啊。。。。。。 我的理解是这样的
ID:375003 发表于 2018-8-1 01:22
象这样写.
void intSIO() interrupt 4 using 2
{
if(TI){
  TI=OFF;
  if(bSD){
   if(curSND<lenSND) SBUF=bufSND[curSND++];
   else {bSD=OFF;/*mSI=0;*/}}}
if(RI){
  RI=OFF;
  bufRCV[putRCV++]=SBUF;
  putRCV &= 0X07;}
}
ID:375003 发表于 2018-8-1 01:21
把发送也要写到中断里,不能这样写
ID:221865 发表于 2018-7-31 23:08
你的send_str函数里面已经在for循环里将i++了,然后你TI = 0;后依然i++。检查一下。
void send_str(void)                        //发送接收到的字符串
{
    u8 i;
    for(i=0; i<10; i++)
    {
        TI = 0;
        SBUF=rec[i];
        while(!TI);
        TI = 0;
    }
}

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

Powered by 单片机教程网

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