Forums

uart中的数据接收问题

开始于 骑士香蕉 2004年1月22日
嗨,大家好!
我是Danka,我对uarts有一个小问题。我正在开发
从uart接收字符的程序。字符是
放置在一定大小的无符号字符数组中。什么
我想做的就是接收字符,直到
字符数组达到其限制或直到不再有其他字符为止
收到。然后程序进入一个子程序来解析数据。
到目前为止,这是我的代码的一部分:

#include“ io8515v.h”
.
.
#define BUFFER 110 // char数组的最大大小
.
.
//全局变量
int rx_size = 0;
无符号字符rx_data [BUFFER]; //保存来自uart的数据
...
#pragma interrupt_handler rx_recieve:iv_UART_RX
...
无效rx_receive(void)
{
rx_data [rx_size] = getchar();
如果((x_size>=BUFFER) && !(USR & 80)){
parse_data(rx_data,rx_size);
rx_size = 0;
}
}

我正在发送0x1e 0x00 0x0c 0x02 0x00 0x01 0x00 0x32 0x08字符
从我的电脑到stk500 uart。但是真正发生的是
我必须在发送之前几次发送上述字符
例程进入parse_data子例程,我只收到一个char
数组仅填充0x01。有人可以帮我吗
这个?非常感谢你们!



丹卡
您无需增加rx_size即可将后续字符放入
下一个rx_data []数组元素。
尝试类似的东西
rx_data [rx_size ++] = getchar();

也是对(USR&80)不会给你你想要的东西,因为 soon
当您从UART(使用getchar())读取字符时,RXC标志
(0x80)将由微调清除。

要实现“直到不再收到字符”功能,
棘手的。
微型人怎么知道“没有更多的字符”了 (it
不知道未来!)。
通常,这是通过说
“如果在x毫秒内没有字符,那么我可以'相信'我不会得到任何字符
更多”或
“如果我收到了特定的字符代码'x'(例如CR / LF),则我
可以“相信”我将再也不会得到它了”,或者
“如果我得到x字符,那么我可以相信我将一无所有”
哪种方法取决于您的应用程序。

高温超导
伊凡·维诺
- - - 原始信息 - - -
来自:“ knightbanana”<emf@emf@...>
至:<avrclub@avrc...>
发送:2004年1月23日,星期五,上午11:33
主题:[AVR俱乐部]数据在uart中收到问题 > hi guys!
>我是Danka,我对uarts有一个小问题。我正在开发
>从uart接收字符的程序。字符是
>放置在一定大小的无符号字符数组中。什么
>我想做的就是接收字符,直到
>字符数组达到其限制或直到不再有其他字符为止
>收到。然后程序进入一个子程序来解析数据。
>到目前为止,这是我的代码的一部分:
>
>#include“ io8515v.h”
> .
> .
>#define BUFFER 110 // char数组的最大大小
> .
> .
> //global variables
> int rx_size=0;
>无符号字符rx_data [BUFFER]; //保存来自uart的数据
> ...
>#pragma interrupt_handler rx_recieve:iv_UART_RX
> ...
>无效rx_receive(void)
> {
>rx_data [rx_size] = getchar();
> if((x_size>=BUFFER) && !(USR & 80)){
>parse_data(rx_data,rx_size);
> rx_size=0;
> }
> }
>
>我正在发送0x1e 0x00 0x0c 0x02 0x00 0x01 0x00 0x32 0x08字符
>从我的电脑到stk500 uart。但是真正发生的是
>我必须在发送之前几次发送上述字符
>例程进入parse_data子例程,我只收到一个char
>数组仅填充0x01。有人可以帮我吗
>这个?非常感谢你们! >
>