打印

430f149怎么在中断里接收字符串

[复制链接]
1665|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lofky|  楼主 | 2013-12-23 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
// UART0 RX ISR will for exit from LPM3 in Mainloop
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{

  Rx_buffer[Rx_count++]=RXBUF0;
  if(Rx_count==50)
    Rx_count=0;
  Send_Str(Rx_buffer);

}

比如说,通过串口调试助手向单片机发送abcde,只能接收a,其他的都没有接收到,必须发a,再发b,再发c.....只能一个字节一个字节发,而不能直接发一个字符串给单片机,这是为何

总感觉有个弯子没有转过来,指点一下

相关帖子

沙发
dirtwillfly| | 2013-12-23 21:04 | 只看该作者
Send_Str(Rx_buffer)函数是什么样的?能提供下代码吗?

使用特权

评论回复
板凳
dirtwillfly| | 2013-12-23 21:08 | 只看该作者
我怀疑不是没接受到,是Send_Str(Rx_buffer)这个函数可能有问题

使用特权

评论回复
地板
fengye5340| | 2013-12-23 21:10 | 只看该作者
楼主说的这些功能在149串口上是能实现的,也不复杂,能否把完整代码上传一下

使用特权

评论回复
5
lofky|  楼主 | 2013-12-23 21:12 | 只看该作者
dirtwillfly 发表于 2013-12-23 21:08
我怀疑不是没接受到,是Send_Str(Rx_buffer)这个函数可能有问题

我仿真看了,只有Rx_buffer[0]有数据,其他没有

使用特权

评论回复
6
lofky|  楼主 | 2013-12-23 21:15 | 只看该作者
dirtwillfly 发表于 2013-12-23 21:04
Send_Str(Rx_buffer)函数是什么样的?能提供下代码吗?

485.rar (42.66 KB)

使用特权

评论回复
7
lofky|  楼主 | 2013-12-23 21:16 | 只看该作者
fengye5340 发表于 2013-12-23 21:10
楼主说的这些功能在149串口上是能实现的,也不复杂,能否把完整代码上传一下 ...

已上传,帮忙看看,总觉得绕进一个圈子了,怎么改都不行

使用特权

评论回复
8
lofky|  楼主 | 2013-12-23 21:31 | 只看该作者
想到了一个可能的原因,我用串口做的485通信,可能在没接收完,就切换成了发送模式Send_Str(Rx_buffer);从而后面的没有接收到

我改改试试

使用特权

评论回复
9
lofky|  楼主 | 2013-12-23 21:43 | 只看该作者
就是上面的原因,已修改,明天结贴给分

使用特权

评论回复
10
dirtwillfly| | 2013-12-23 21:44 | 只看该作者
应该是程序的问题。首先430f149接收a后,触发中断。而在中断服务程序中Send_Str(Rx_buffer)函数:
void Send_Str(uchar *s)
{
  while(*s!='\0')
  {
    Send_Byte(*s++);
    delay_1ms();
  }
}
引用了Send_Byte(*s++)函数:
void Send_Byte(uchar data)
{
    DE;
    TXBUF0 =data ;
    while(!(IFG1 & UTXIFG0));               //等待发送结束
    IFG1 &= ~UTXIFG0;
}
引用完这两个函数后,485芯片处于发送状态,未被重新设置为接收状态。所以不能连续接收字符

使用特权

评论回复
11
dirtwillfly| | 2013-12-23 21:45 | 只看该作者
呵呵,我打字太慢了。晚了你一分钟

使用特权

评论回复
12
lofky|  楼主 | 2013-12-23 21:51 | 只看该作者
dirtwillfly 发表于 2013-12-23 21:45
呵呵,我打字太慢了。晚了你一分钟

是的,哈哈,今天脑子迷糊了,有时候这些问题需要说出来,说着说着可能就知道自己错在哪里了

还是谢谢哈

使用特权

评论回复
13
dirtwillfly| | 2013-12-23 21:54 | 只看该作者
lofky 发表于 2013-12-23 21:51
是的,哈哈,今天脑子迷糊了,有时候这些问题需要说出来,说着说着可能就知道自己错在哪里了

还是谢谢哈 ...

:handshake是的,其实叙述的过程,也是一次整理思路的过程。

使用特权

评论回复
14
芯加芯| | 2013-12-24 15:16 | 只看该作者
学习了

使用特权

评论回复
15
shing| | 2013-12-24 17:08 | 只看该作者
void Send_Byte(uchar data)
{
    DE;
    TXBUF0 =data ;
    while(!(IFG1 & UTXIFG0));               //等待发送结束
    IFG1 &= ~UTXIFG0;
}
这里面的DE;是什么意思啊?求指教。

使用特权

评论回复
16
shing| | 2013-12-24 17:11 | 只看该作者
知道了,是我没看完整代码。

使用特权

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

本版积分规则

74

主题

546

帖子

0

粉丝