c语言给串口发送一个数组,求助啊 单片机串口发送数组的问题

打算用单片机发送一个数组recevie[8],应该怎么做啊:

#include

#define uchar unsigned char

#define uint unsigned int

uchar n=0;

uchar receive[8];

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[i];

while(!TI);

TI=0;

}

ES=1;

}

void uart_rec() interrupt 4

{

if(RI)

{

receive[n]=SBUF;

n++;

if(n==7)

{

ES=0;

}

RI=0;

}

}

void main()

{

UartInit();

while(1)

{

P0=receive[0];

P1=receive[1];

delayms(4000);

P0=receive[2];

P1=receive[3];

delayms(4000);

P0=receive[4];

P1=receive[5];

delayms(4000);

P0=receive[6];

P1=receive[7];

delayms(4000);

if(n==7)

{

uart_send(receive);

}

n=0;

}

}

我这个程序是当单片机收到8个字节的数据,放到数组中,然后从串口发送出去,有做过这个的朋友吗,哪个地方错了啊。

### 回答1: 一个可以用于发送数组数据的C语言代码如下:#include <stdio.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h>int main() { int fd; int i; unsigned char array[10] = {0xAA, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xAA}; struct termios options; fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); tcgetattr(fd, &options); cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); tcsetattr(fd, TCSANOW, &options); for(i=0; i<10; i++) { write(fd, &array[i], 1); } close(fd); return 0; } ### 回答2: 下面是一个使用C语言编写的通过串口发送数组的代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> int main() { int fd; char buffer[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; // 打开串口 fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY); if (fd == -1) { perror("无法打开串口"); return 1; } // 配置串口参数 struct termios serial; memset(&serial, 0, sizeof(serial)); serial.c_cflag = B9600 | CS8 | CREAD | CLOCAL; tcsetattr(fd, TCSANOW, &serial); // 发送数据 write(fd, buffer, sizeof(buffer)); // 关闭串口 close(fd); return 0; } ``` 以上代码使用了Linux系统的串口设备文件`/dev/ttyS0`,如果你的系统上的串口设备文件命名不同,你需要根据实际情况进行修改。在实际使用时,可以根据需要修改串口参数,如波特率`B9600`等。数组`buffer`中存储了要发送的数据,使用`write`函数将数据发送串口。之后通过`close`函数关闭串口。请确保以管理员权限运行程序。记得在程序中进行错误处理,以防止出现错误情况。 ### 回答3: 下面是一段使用C语言编写的通过串口发送数组的代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> int main() { int serial_fd; char *portname = "/dev/ttyUSB0"; // 根据实际情况选择串口设备地址 int baudrate = B9600; // 波特率设置为9600bps int data_array[] = {1, 2, 3, 4, 5}; // 要发送的数据数组 int array_length = sizeof(data_array) / sizeof(int); // 数组长度 int bytes_written; serial_fd = open(portname, O_WRONLY | O_NOCTTY | O_SYNC); if (serial_fd < 0) { perror("无法打开串口"); exit(1); } struct termios tty; memset(&tty, 0, sizeof(tty)); if (tcgetattr(serial_fd, &tty) != 0) { perror("无法获取串口属性"); exit(1); } cfsetospeed(&tty, baudrate); // 设置波特率 tty.c_cflag |= (CLOCAL | CREAD); // 允许读写 tty.c_cflag &= ~CSIZE; tty.c_cflag |= CS8; // 数据位为8位 tty.c_cflag &= ~PARENB; // 无奇偶校验 tty.c_cflag &= ~CSTOPB; // 1位停止位 tty.c_cflag &= ~CRTSCTS; // 禁用硬件流控制 if (tcsetattr(serial_fd, TCSANOW, &tty) != 0) { perror("无法设置串口属性"); exit(1); } for (int i = 0; i < array_length; i++) { char data[16]; sprintf(data, "%d", data_array[i]); // 将整数转换为字符串 bytes_written = write(serial_fd, data, strlen(data)); if (bytes_written < 0) { perror("写入串口失败"); exit(1); } usleep(100000); // 延时100ms } close(serial_fd); return 0; } ``` 这段代码首先通过打开串口设备文件来获取串口文件描述符,然后设置串口属性,包括波特率、数据位、奇偶校验等等。接着使用循环将数组中的每个元素转换为字符串,并通过串口发送。代码中使用的是Linux系统上的串口设备地址和函数,如果在其他平台上运行,可能需要根据实际情况进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值