我写的程序不用中断接收的时候可以接收字符串

[复制链接]
239|19
手机看帖
扫描二维码
随时随地手机跟帖
wangzsa|  楼主 | 2019-10-13 16:22 | 显示全部楼层 |阅读模式
最近我在弄一个项目,其中需要一个串口通信的,但是我写的程序不用中断接收的时候可以接收字符串

使用特权

评论回复
zhuww| | 2019-10-13 16:28 | 显示全部楼层
然后呢?你是怎么应对这个的呢

使用特权

评论回复
wangzsa|  楼主 | 2019-10-13 16:31 | 显示全部楼层
但用中断后,我发觉自己不知道怎样去写接收一个字符串的代码。

使用特权

评论回复
lium| | 2019-10-13 16:35 | 显示全部楼层
没看出你本意思。。。

使用特权

评论回复
wangzsa|  楼主 | 2019-10-13 16:38 | 显示全部楼层
是要通过串口发送一个串到PC机,然后PC机正确接收后会返回“OK”两个字符。

使用特权

评论回复
langgq| | 2019-10-13 16:41 | 显示全部楼层
是不是就是接收“OK”这个串口中断接收子程序不会写?

使用特权

评论回复
wangpe| | 2019-10-13 16:45 | 显示全部楼层
你有写好的吗?帮你改一下,还是重新写啊?

使用特权

评论回复
wangzsa|  楼主 | 2019-10-13 16:47 | 显示全部楼层
我想要一个接收多个字符但不确定且在一个范围内的代码。主要是我不知道如何判断是否接收字符串完毕,所以在通过LCD屏幕显示的时候总是不知如何下手。

使用特权

评论回复
wangzsa|  楼主 | 2019-10-13 17:00 | 显示全部楼层

//------------串口中断接收----------------
void uart_interrupt() interrupt 4
{
   ES = 0;
         
   if(RI)
   {
    RI = 0;
    InStr[InStrLoc] = SBUF;
    InStrLoc++;
      
   }
   else
    TI = 0;
   ES = 1;  //允许串口中断
   return;
}
//---------------------------------------
//主函数
//-----------------------------------------  
void main()
{
int i;
lcd_disp0();
init_serialcomm(); //串口初始化
clrbit=1;   //置清屏标志位
LCD_clear();   //清屏
putnstr(InStr, sizeof(InStr)/sizeof(char));
for(i=0;i<MAXLEN;i++)
   InStr='\0';
   
while(1)
{
  delayx1ms(500);
   if(InStrLoc >= MAXLEN)
   {
    for(i=0;i<MAXLEN;i++)
    {
     LCD_write_char(InStr);
    }
    putnstr(InStr, sizeof(InStr)/sizeof(char));
    InStr[0] == '\0';
    InStrLoc = 0;
   }
}
}

使用特权

评论回复
zhanglli| | 2019-10-13 17:06 | 显示全部楼层
还是接收一个确认字符比较省事,两个麻烦点
volatile sbit OK = 0;
void Receive(void)interrupt xx using 1
{
       static sbit i = 0;
       if(RI)
       {
             if(!i)
             {
                   if(SBUF == 'O')i = 1;
             }
              else
             {
                   if(SBUF == 'K') OK = 1;//OK由主程序清零
                    i = 0;  //即使错了也置零
              }
        else
        {
         }
}

使用特权

评论回复
wangzsa|  楼主 | 2019-10-13 17:09 | 显示全部楼层

哦~~~

使用特权

评论回复
guoyt| | 2019-10-13 17:12 | 显示全部楼层
貌似RI得手工清除吧,上面的程序还要清除一下下RI

使用特权

评论回复
yufe| | 2019-10-13 17:17 | 显示全部楼层
51单片的串口通信函数网上应该不少

使用特权

评论回复
llia| | 2019-10-13 17:20 | 显示全部楼层
接收不定长的字符需用另一手段处理。

使用特权

评论回复
wangpe| | 2019-10-13 17:24 | 显示全部楼层

楼主是新手,串口驱动程序其实有几种处理方法,依不同应用场合而不同,多研究和实践就会找到适合自己的。

使用特权

评论回复
zhuww| | 2019-10-13 17:26 | 显示全部楼层
额……你应该用串口中断……

使用特权

评论回复
zhanglli| | 2019-10-13 17:30 | 显示全部楼层

自己定义个通信协议

使用特权

评论回复
lium| | 2019-10-13 17:34 | 显示全部楼层
这是通信协议的问题,和是不是中断关系不大,自己定一个协议,两端的程序都按照协议即可

使用特权

评论回复
hanwe| | 2019-10-13 17:36 | 显示全部楼层
可以在中断里继续收发。

使用特权

评论回复
wangzsa|  楼主 | 2019-10-13 17:39 | 显示全部楼层
嗯,预料中的结果,先结贴吧,多谢大家啦

使用特权

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

本版积分规则

914

主题

9040

帖子

5

粉丝