dingdan258 发表于 2013-4-24 16:09:02

求助啊 单片机串口发送数组的问题

打算用单片机发送一个数组recevie,应该怎么做啊:
#include<STC15F2K.H>
#define uchar unsigned char
#define uint unsigned int
uchar n=0;
uchar receive;
uchar n;
uchar m;
void UartInit(void)                //9600bps@11.0592MHz
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设定定时器1为16位自动重装方式
        TL1 = 0xE0;                //设定定时初值
        TH1 = 0xFE;                //设定定时初值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
        EA=1;
        ES=1;
}
void delayms(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
void uart_send(receive)
{
   uchar i;
   ES=0;
   for(i=0;i<8;i++)
   {
      SBUF=receive;

   while(!TI);
   TI=0;
   }
   ES=1;
}
void uart_rec() interrupt 4
{
   

   if(RI)
   {
      receive=SBUF;
          n++;
          if(n==7)
          {
             ES=0;
           }
             RI=0;
        }
}
void main()
{
   
   UartInit();
   
   while(1)
   {
   P0=receive;
       P1=receive;
       delayms(4000);
   P0=receive;
       P1=receive;
       delayms(4000);
   P0=receive;
       P1=receive;
       delayms(4000);
   P0=receive;
       P1=receive;
       delayms(4000);
       if(n==7)
          {
                  uart_send(receive);
                }
                n=0;
       }
}
我这个程序是当单片机收到8个字节的数据,放到数组中,然后从串口发送出去,有做过这个的朋友吗,哪个地方错了啊。

dingdan258 发表于 2013-4-24 16:10:32

比如发送7F 80 01 11 65 82 一组数(不是字符串),不是逐个发送!而是一次性发送51串口可以实现吗
提问者采纳
检举| 2012-12-18 12:16
那是肯定是不行的……51的串口发送的原理是一个字节一个字节的发送,数组是必须要通过转换成一个个数据发送的。举个例子啊:
假如你的发送单个字节的函数为:void senddata_uart(uchar cdd)

那么发送数组可以是:
void sendstring_uart(const uchar *dd)
{
    while((*dd)!=0)
    {
      senddata_uart(*dd);
      dd++;
    }
}
这样就行了。。。。。不知道你听明白了吗?

百度上的,必须用指针吗?

lcw_swust 发表于 2013-4-24 17:11:15

uart_send(receive);
uart_send(receive);
uart_send(receive);
uart_send(receive);
uart_send(receive);
uart_send(receive);
uart_send(receive);
uart_send(receive);
或者
for(i=0;i<8;i++)uart_send(receive);

tanguicaicai 发表于 2013-4-24 17:21:37

肯定的一个数据的发送了,串口本身就是一位一位的发送。

lidar 发表于 2013-4-24 19:10:18

串口就是一个字节一个字节发的,不一定用指针的

dingdan258 发表于 2013-4-25 07:50:48

lcw_swust 发表于 2013-4-24 17:11 static/image/common/back.gif
uart_send(receive);
uart_send(receive);
uart_send(receive);


兄弟给看看,我那个发送函数写的格式有问题吗?主要是函数的参数问题,呵呵,C语言不过关啊。

lcw_swust 发表于 2013-4-25 08:59:40

dingdan258 发表于 2013-4-25 07:50 static/image/common/back.gif
兄弟给看看,我那个发送函数写的格式有问题吗?主要是函数的参数问题,呵呵,C语言不过关啊。 ...

哪个函数有问题?

dingdan258 发表于 2013-4-25 14:21:07

void uart_send(receive)
这种写法对吗?

lcw_swust 发表于 2013-4-26 17:24:44

dingdan258 发表于 2013-4-25 14:21 static/image/common/back.gif
void uart_send(receive)
这种写法对吗?

不对,定义函数时,扩号内需定义变量,引用函数时,扩号内才是直接给变量
可写成void uart_send(uchar*receive)

dingdan258 发表于 2013-4-27 08:14:34

lcw_swust 发表于 2013-4-26 17:24 static/image/common/back.gif
不对,定义函数时,扩号内需定义变量,引用函数时,扩号内才是直接给变量
可写成void uart_send(uchar* ...

receive是个数组,呵呵,应该怎么写啊,定义发送函数的时候,后面调用的时候,这个格式是怎么样的呢?

lcw_swust 发表于 2013-4-27 09:00:00

本帖最后由 lcw_swust 于 2013-4-27 09:01 编辑

dingdan258 发表于 2013-4-27 08:14 static/image/common/back.gif
receive是个数组,呵呵,应该怎么写啊,定义发送函数的时候,后面调用的时候,这个格式是怎么样的呢? ...

4种办法
1.void uart_send(receive)改成void uart_send(void),调用时这样写:uart_send();
2.void uart_send(receive)改成void uart_send(uchar *receive),若是有问题,将receive用其它名字代替(如void uart_send(uchar *p)...SBUF=p;..),调用时这样写:uart_send(receive);
3.百度
4.找本C语言的书看看函数以及参数的传递

dingdan258 发表于 2013-4-27 12:23:58

lcw_swust 发表于 2013-4-27 09:00 static/image/common/back.gif
4种办法
1.void uart_send(receive)改成void uart_send(void),调用时这样写:uart_send();
2.void uart_s ...

谢谢啊,呵呵,我再练练。。。。。。。。{:lol:}

389704844 发表于 2013-4-27 15:39:36

{:sad:}{:sad:}{:smile:}{:smile:}

benqme 发表于 2013-4-27 16:05:55

看看在说

xinhoujue 发表于 2014-7-2 21:53:01

我也是这个问题
页: [1]
查看完整版本: 求助啊 单片机串口发送数组的问题