• 大小: 4KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-05-09
  • 语言: 其他
  • 标签: RS485  

资源简介

本资源给出了Linux下进行RS485通信的实例代码

资源截图

代码片段和文件信息

// this is a test about 485 full-duplex communication
// hardware : MAX488

#include 
#include 
#include 

#include       // open() close()
#include      // read() write()

#include     // set baud rate

#include 
#include 
#include 
#include 


#define DEVICE_TTYS “/dev/ttyS2“
#define MY_BAUD_RATE B9600

#define DATAS_CONTENT “HELLO“

#define RECEIVE_BUF_WAIT_1S 1
#define RECEIVE_BUF_WAIT_2S 2
#define RECEIVE_BUF_WAIT_3S 3
#define RECEIVE_BUF_WAIT_4S 4
#define RECEIVE_BUF_WAIT_5S 5

//------------------------------------- read datas from ttyS ------------------------------------------------
// succese return 1
// error   return 0
int read_datas_ttyS(int fd char *rcv_bufint rcv_wait)
{
        int retval;
        fd_set rfds;
        struct timeval tv;

        int retpos;

        tv.tv_sec = rcv_wait;   
        tv.tv_usec = 0;

        pos = 0; // point to rceeive buf

        while (1)
        {
                FD_ZERO(&rfds);
                FD_SET(fd &rfds);

                retval = select(fd+1  &rfds NULL NULL &tv);

                if (retval == -1)
                {
                        perror(“select()“);
                        break;
                }
                else if (retval)
                {// pan duan shi fou hai you shu ju
                        ret = read(fd rcv_buf+pos 2048);
                        pos += ret;
                        if (rcv_buf[pos-2] == ‘\r‘ && rcv_buf[pos-1] == ‘\n‘)
                        {
                                FD_ZERO(&rfds);
                                FD_SET(fd &rfds);

                                retval = select(fd+1  &rfds NULL NULL &tv);

                                if (!retval) break;// no datas break
                        }
                }
                else
                {
                 //       printf(“No data\n“);
                        break;
                }
        }

        return 1;
} // end read_datas_ttyS


//------------------------------------- send and receive datas by RS485 -------------------------------------
int func_485_transfer(int fd)
{
ssize_t ret;
char rcv_buf[1024];
int i;
        char *send_buf = DATAS_CONTENT;

bzero(rcv_bufsizeof(rcv_buf));

while(1) {
// send datas
ret = write(fdsend_bufstrlen(send_buf));
                if (ret == -1) {
                        printf (“write device %s error\n“ DEVICE_TTYS);
                        return -1;
                }
// read datas
if (read_datas_ttyS(fdrcv_bufRECEIVE_BUF_WAIT_1S)) {
printf (“%s\n“rcv_buf);
}
else {
printf (“read error\n“);
}
}

return 0;

} // end func_485_receive


//------------------------------------- init seriel port  ---------------------------------------------------
void init_ttyS(int fd)
{
        struct termios options;

        bzero(&options sizeof(options));        // clear options

        c

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3925  2005-09-12 02:47  RS485实例代码\full_488_test.c

     文件       7534  2005-09-12 02:47  RS485实例代码\full_488_test.o

     目录          0  2007-09-01 21:26  RS485实例代码

----------- ---------  ---------- -----  ----

                11459                    3


评论

共有 条评论