AVR串口如何发送INT型数据

xmrforever 2012-06-29 03:07:53
static char uartchar[]={0};
static int uartint=1000;
itoa(uartint,uartchar);
put_s(uartchar);//发送字符串

void put_s(unsigned char *ptr)
{
while (*ptr)
{
USART_Transmit(*ptr++);
}
}

程序有问题吗?没有数据出来,请大神指教

我用的是mega8 8M晶振 9600波特率
...全文
410 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjtea 2012-07-13
  • 打赏
  • 举报
回复
需要做两件事情:
1)将整形数变换成多个字符;
2)发送字符时,判断一下,前一个字符已经发送完毕?

尽可能使用AVR提供的标准函数,而不是使用普通的标准C函数。
lbing7 2012-07-13
  • 打赏
  • 举报
回复
我倒觉得不转成ASCII直接发数字的二进制比较给力

这样,通信简单,反正发的是数字,那在PC端进行还原的时候二进制也比ASCII好处理
  • 打赏
  • 举报
回复
while (*ptr)
会达不到你的要求的。
还是加其它判断,如大于确定值。
skertone 2012-07-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
static char uartchar[]={0};
static int uartint=1000;
itoa(uartint,uartchar);
put_s(uartchar);//发送字符串

void put_s(unsigned char *ptr)
{
while (*ptr) <<<<<<< 如果你不把整形转成 字串 这样搞可不行
{
USART_T……
[/Quote]

错了,原来有调用 itoa(uartint,uartchar);

uartchar 空间不够

static char uartchar[10]={0};
skertone 2012-07-12
  • 打赏
  • 举报
回复
static char uartchar[]={0};
static int uartint=1000;
itoa(uartint,uartchar);
put_s(uartchar);//发送字符串

void put_s(unsigned char *ptr)
{
while (*ptr) <<<<<<< 如果你不把整形转成 字串 这样搞可不行
{
USART_Transmit(*ptr++);
}
}



// 用下面函数吧, 一个int 对应 2-4字节
void put_int(int value)
{
char i = sizeof(int);
unsinged char *ptr=&value;

while(i--)
USART_Transmit(*ptr++);
}



put_
myzhaobin 2012-07-03
  • 打赏
  • 举报
回复
其实上面的代码依然解决不了所有问题,建议你还是修改put_s()吧
myzhaobin 2012-07-03
  • 打赏
  • 举报
回复
另外,如果我没猜错的话你是想通过串口发送int型数据的吧?用四个字节的通信数据量来传输两字节大小数据,有点得不偿失吧……
试一下下面的处理代码:
unsigned int uartint = 0x1234;
unsigned char uartchar[] = {0,0,0};
uartchar[0] = ((unsigned char*) &uartint)[0];
uartchar[1] = ((unsigned char*) &uartint)[1];
put_s(uartchar); // 传输后数据存储结构取决于实际大小端存储方式。

myzhaobin 2012-07-03
  • 打赏
  • 举报
回复
看上去,好像是你的串口发送有问题。你再验证一下,确认单字节发送没问题? 另外不得不说的是,你这程序的隐患。内存溢出问题楼上已经说了。另一个问题就是字符串发送函数。万一你定义的开辟的uartchar后面紧跟着的内存单元内容非零,怎么办?顺便讨教一下itoa函数的问题。一直以来用这个函数都是三个参数传入。最后一个基数可以缺省处理?刚才试了下好像不行,不知道你是怎么处理的。求指教……
zdxin 2012-06-30
  • 打赏
  • 举报
回复
或者把{}中的0换成"00000",包括双引号在内。
图灵狗 2012-06-29
  • 打赏
  • 举报
回复
static char uartchar[]={0}相当于你的数组只有1个字节,显然装不下1000转换过来的字符,把它改大一点就可以了。

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧