首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

AVR串口怎么发送INT型数据

2012-10-17 
AVR串口如何发送INT型数据C/C++ codestatic char uartchar[]{0}static intuartint1000itoa(uartint,ua

AVR串口如何发送INT型数据

C/C++ code
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波特率

[解决办法]
static char uartchar[]={0}相当于你的数组只有1个字节,显然装不下1000转换过来的字符,把它改大一点就可以了。
[解决办法]
或者把{}中的0换成"00000",包括双引号在内。
[解决办法]
看上去,好像是你的串口发送有问题。你再验证一下,确认单字节发送没问题? 另外不得不说的是,你这程序的隐患。内存溢出问题楼上已经说了。另一个问题就是字符串发送函数。万一你定义的开辟的uartchar后面紧跟着的内存单元内容非零,怎么办?顺便讨教一下itoa函数的问题。一直以来用这个函数都是三个参数传入。最后一个基数可以缺省处理?刚才试了下好像不行,不知道你是怎么处理的。求指教……
[解决办法]
另外,如果我没猜错的话你是想通过串口发送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); // 传输后数据存储结构取决于实际大小端存储方式。


[解决办法]
其实上面的代码依然解决不了所有问题,建议你还是修改put_s()吧
[解决办法]
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_
[解决办法]
探讨
static char uartchar[]={0};
static int uartint=1000;
itoa(uartint,uartchar);
put_s(uartchar);//发送字符串

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

[解决办法]
while (*ptr)
会达不到你的要求的。
还是加其它判断,如大于确定值。
[解决办法]
需要做两件事情:
1)将整形数变换成多个字符;
2)发送字符时,判断一下,前一个字符已经发送完毕?

尽可能使用AVR提供的标准函数,而不是使用普通的标准C函数。
[解决办法]
我倒觉得不转成ASCII直接发数字的二进制比较给力

这样,通信简单,反正发的是数字,那在PC端进行还原的时候二进制也比ASCII好处理

热点排行