gpt4 book ai didi

c - c中使用rs-232在linux和8051单片机板之间进行串行通信

转载 作者:行者123 更新时间:2023-11-30 21:31:20 25 4
gpt4 key购买 nike

我在使用 RS-232 从 Linux 操作系统到 uc 8051 串行发送数据时遇到问题。8051设置:

波特率 = 9600;
comport = 端口1。
奇偶校验 = 无
停止位 = 1

// my code for receiving data on 8051 uc
#include <reg51.h>

unsigned char value;
int i,j;

void ini()
{
TMOD=0x20; //Timer1, mode 2, baud rate 9600 bps
TH1=0XFD;
SCON=0x50;
TR1=1;
}

void delay()
{
for(i=0;i<=1000;i++)
for (j=0;j<=300;j++);
}

void recieve()
{
unsigned char value;
while(RI==0);
value=SBUF;
P1=value;
RI=0;
}

void main()
{
while(1)
{
ini();
recieve();
}
}

// and code which run on linux is as following
#include <stdio.h> // standard input / output functions
#include <string.h> // string function definitions
#include <unistd.h> // UNIX standard function definitions
#include <fcntl.h> // File control definitions
#include <errno.h> // Error number definitions
#include <termios.h> // POSIX terminal control definitionss
#include <time.h> // time calls

int open_port(void)
{
int fd; // file description for the serial port

fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);

if (fd == -1) // if open is unsucessful
{
//perror("open_port: Unable to open /dev/ttyS0 - ");
printf("open_port: Unable to open /dev/ttyS0. \n");
}
else
{
fcntl(fd, F_SETFL, 0);
printf("port is open.\n");
}

return(fd);
} //open_port

int configure_port(int fd) // configure the port
{
struct termios port_settings; // structure to store the port settings in

cfsetispeed(&port_settings, B9600); // set baud rates
cfsetospeed(&port_settings, B9600);

port_settings.c_cflag &= ~PARENB; // set no parity, stop bits, data bits
port_settings.c_cflag &= ~CSTOPB;
port_settings.c_cflag &= ~CSIZE;
port_settings.c_cflag |= CS8;

tcsetattr(fd, TCSANOW, &port_settings); // apply the settings to the port
return(fd);

} //configure_port

int query_modem(int fd) // query modem with an AT command
{
char n;
fd_set rdfs;
struct timeval timeout;

// initialise the timeout structure
timeout.tv_sec = 10; // ten second timeout
timeout.tv_usec = 0;

// Create byte array
unsigned char send_bytes[] = { 0x00, 0xff};

write(fd, send_bytes, 2); //Send data
printf("Wrote the bytes. \n");

// do the select
n = select(fd + 1, &rdfs, NULL, NULL, &timeout);

// check if an error has occured
if(n < 0)
{
perror("select failed\n");
}
else if (n == 0)
{
puts("Timeout!");
}
else
{
printf("\nBytes detected on the port!\n");
}
return 0;
} //query_modem

int main(void)
{
int fd = open_port();
configure_port(fd);
query_modem(fd);
return(0);
} // main

但是我有问题..所以请帮助我并告诉我linux通过rs-232发送数据的格式。还接收8051微 Controller 的格式。需要 C 语言示例代码。

最佳答案

我推荐基本的故障查找

  • 确保使用正确的电缆(2 和 3 划掉,不要从握手线开始)
  • 分离设备,即将您的 Linux 机器连接到运行终端的 PC编程并尝试建立 2 路通信 - 使用 Linux/C 代码,直到实现
  • 将 8051 连接到运行终端程序的 PC ....
  • 仅当 Linux 和 8051 都适用于已知且经过验证的设备时才连接它们

如果您的 8051 代码示例代表所有代码.. 8051 将如何响应 AT.. 它只能接收。

祝你好运

关于c - c中使用rs-232在linux和8051单片机板之间进行串行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11126257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com