找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

调用单片机串口2发送卡死

查看数: 3176 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-9-13 15:59

正文摘要:

本帖最后由 happy2058 于 2021-9-13 18:23 编辑 芯片是8H1K08 工作流程序,屏幕通串口1发送数据给控制板、控制板返回要显示数据给屏幕。再通过串口2发送操作数据给功能板2. 在没加入串口2部分代码前,屏幕 ...

回复

ID:734017 发表于 2021-9-13 21:51
感谢你,搞好了,原因串口2中断函数没写。我想着不接收数据,就没写了。感谢感谢。就算空函数也要加一个才行
ID:624769 发表于 2021-9-13 19:57
happy2058 发表于 2021-9-13 18:22
用是的8h1K08
串口1在最后一次发送完后T=0了。

我是说,你开了中断,只要发送完,TI = 1, 就会触发中断,只要你不 TI = 0 就会不停的进入中断。换句话说,有可能,你主程序永远没有 机会执行 TI = 0;
8H1K08 我手头焊好的没有,也没办法测试。你要是不想加标志,就先不开 串口中断。光试发送呗。
ID:734017 发表于 2021-9-13 18:22
188610329 发表于 2021-9-13 17:43
我说的中断那个, 你试了没?

用是的8h1K08
串口1在最后一次发送完后T=0了。
ID:624769 发表于 2021-9-13 17:43
happy2058 发表于 2021-9-13 17:36
也试过,卡死。所以才这行直接一点

我说的中断那个, 你试了没?  
ID:734017 发表于 2021-9-13 17:36
188610329 发表于 2021-9-13 16:58
你的:       while (S2CON==0x50);

这里应该 : while(S2CON & 0x02) !=0x02);   才对吧?

也试过,卡死。所以才这行直接一点
ID:624769 发表于 2021-9-13 17:18
最后, 你 串口1 开了中断,但是,只对RI作了处理,没有对TI 做处理, 我不知道你什么型号的单片机,不排除,死在中断里出不来的可能。一般开了中断,都会用一个 TI_Busy的标志位 写了SBUF之后,就把 TI_Busy = 1; 然后下面 就 While(TI_Busy) ; ,  中断里面加一个  
IF(TI)
{
     TI  = 0;
     TI_Busy = 0;
}
你参考一下吧。
ID:624769 发表于 2021-9-13 17:10
uchar k= 0 ;  
         do  
    {  
          S2BUF = (*(str + k));
                        
      k++;
                 while (S2CON==0x50);  
             S2CON &= ~0x02;
    }  
         while (k < strlen);
另外,这个写法……, 真的没关系么? 一般的写法好像应该:
for(k= 0 ; k<strlen;k++)
{  
          S2BUF = *(str++);
          while ((S2CON & 0x02)==0);  
          S2CON &= ~0x02;
}  

这样子么?
ID:624769 发表于 2021-9-13 16:58
你的:       while (S2CON==0x50);

这里应该 : while(S2CON & 0x02) !=0x02);   才对吧?

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

Powered by 单片机教程网

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