精华内容
下载资源
问答
  • #include "tchar.h"#include int main(){/*****************************打开串口*************************************/HANDLE hCom;//全局变量,串口句柄hCom = CreateFile(_T("COM3"),//COM3口GENERIC_READ | ...

    #include "tchar.h"

    #include int main()

    {

    /*****************************打开串口*************************************/

    HANDLE hCom;//全局变量,串口句柄

    hCom = CreateFile(_T("COM3"),//COM3口

    GENERIC_READ | GENERIC_WRITE,//允许读和写

    0,//独占方式

    NULL,

    OPEN_EXISTING,//打开而不是创建

    0,//同步方式

    //FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERAPPLE,//重叠方式

    NULL);

    if(hCom == (HANDLE)-1)

    {

    printf("打开COM失败!");

    return 0;

    }

    /****************配置串口***************/

    SetupComm(hCom, 20480, 20480);//输入缓冲区和输出缓冲区的大小都是20480

    COMMTIMEOUTS TimeOuts;

    TimeOuts.ReadIntervalTimeout = 1000;//设定读超时

    TimeOuts.ReadTotalTimeoutMultiplier = 500;

    TimeOuts.ReadTotalTimeoutConstant = 5000;

    TimeOuts.WriteTotalTimeoutMultiplier = 500;//设定写超时

    TimeOuts.WriteTotalTimeoutConstant = 2000;

    SetCommTimeouts(hCom, &TimeOuts);//设置超时

    DCB dcb;

    GetCommState(hCom, &dcb);

    dcb.BaudRate = 115200;//波特率为115200

    dcb.ByteSize = 8;//每个字节有8位

    dcb.Parity = NOPARITY;//无奇偶校验位

    dcb.StopBits = TWOSTOPBITS;//两个停止位

    dcb.fParity = FALSE;

    dcb.fNull = FALSE;

    SetCommState(hCom, &dcb);

    PurgeComm(hCom, PURGE_TXCLEAR|PURGE_RXCLEAR);//在读写串口之前清空缓冲区

    /********同步写串口********/

    int i;

    unsigned char sendData[256] = {0};//写入串口缓存区的数组

    for(i=0; i<16; i++)

    {

    sendData[i] = i;

    }

    DWORD dwWriteLen = 0;

    if(!WriteFile(hCom, sendData, 16, &dwWriteLen, NULL))

    {

    printf("串口发送数据失败!

    ");

    }

    printf("串口发送数据成功!

    ");

    printf("发送的数据为:

    ");

    for(i=0; i<16; i++)

    {

    printf("%02X ", sendData[i]);

    }

    printf("

    ");

    /***********关闭串口***********/

    CloseHandle(hCom);

    std::cout << "Hello World!

    ";

    return 0;

    }

    运行效果:

    3f288ee285423cc6e29fa526842ca321.png

    配套VS2017工程下载地址:https://download.csdn.net/download/qinrenzhi/10774388

    展开全文
  • 本代码使用C语言实现串口数据发送、接收,代码带详细注解,便于初学者理解,只需要编译就可直接使用。
  • 在当今,流行的编程软件种类繁多,它们编程方便、易于维护,但是在与硬件直接打交道和编制系统软件时却...这是因为通讯的各个计算机CPU速度不一样(这会导致“错帧”)以及发送发送数据速度比接收机接收速度快(这会导...

    在当今,流行的编程软件种类繁多,它们编程方便、易于维护,但是在与硬件直接打交道和编制系统软件时却束手无策,于是C语言就有了用武之地。C语言作为汇编语言与高级语言之间的一种过渡语言,兼有汇编语言的高效和高级语言的方便。

    在通讯中,为了保证行运安全可靠,标准的串行口必须具有许多握手信号和状态信息。这是因为通讯的各个计算机CPU速度不一样(这会导致“错帧”)以及发送机发送数据速度比接收机接收速度快(这会导致“过冲”)。为解决这个问题,我们采用一个简单的握手信号,即发送机每次仅发送半个字节(低4位)

    的数据,而另外半个字节(高4位)则用来传送信息。我们可以对信息位(高4位)进行如下简单的编码:

    0H:发送的是新的半个字节数据

    1H:重新发送上次传送错误的数据

    2H:文件名结束

    3H:文件结束

    这样,每当发送机发送一个字节以后,就等待接受机发回送信号,这回送信号就是发送机发送过来的那个字节。发送机接收到回送信号后,把它与刚发送的字节相比较,如果相同,就发送新的半个字节,否则就重新发送。新数据与旧数据通过信息位来区分。下面就是用C语言编写控制串行口的程序。

    #include "dos.h"

    #include "stdlib.h"

    #include "stdio.h"

    #define PORT 0

    void SendFile(char *fname); /* 发送文件*/

    void Send(int s); /*发送一个字节*/

    void SendFileName(char *fname); /*发送文件名*/

    void ReceiveFile(); /*接收文件*/

    void GetFileName(char *f); /*接收文件名*/

    void InitPort(int port,unsigned char para); /*初始化端口*/

    void SendPort(int port,char c); /*端口发送*/

    int ReadPort(int port); /*读端口字节*/

    int CheckState(int port); /*检查端口状态*/

    int Receive(int port,int *G); /*接收一个字节*/

    main(int argc,char *argv[])

    {

    if(argc<2){

    printf("Please input R(receive) or S(sent) parametre:");

    exit(1);

    }

    InitPort(PORT,231);

    if(*argv[1]==''''S'''') /*检查选择的有效性*/

    SendFile(argv[2]);

    else if(*argv[1]==''''R'''')

    ReceiveFile();

    else{

    printf("Error parament.Please input again.");

    exit(1);

    }

    }

    void SendFile(char *fname)

    {

    FILE *fp;

    int ch,s;

    if((fp=fopen(fname,"rb"))==NULL)

    {

    printf("Can''''t open the file.\n");

    exit(1);

    }

    SendFileName(fname);

    do{

    ch=(int)getc(fp);

    if(ferror(fp)){

    printf("Error reading file.\n");

    break;

    }

    s=ch%16; /*取文件中一个字节的低4位*/

    Send(s);

    s=ch/16; /*取文件中一个字节的高4位*/

    Send(s);

    }while(!feof(fp));

    s=46; /*发送文件结束信息*/

    Send(s);

    Send(s);

    fclose(fp);

    }

    void Send(s)

    int s;

    {

    int G;

    SendPort(PORT,s);

    G=ReadPort(PORT); /*等待握手信号*/

    if(s!=G)

    s=s+16;

    do{

    SendPort(PORT,s);

    G=ReadPort(PORT);/*等待握手信号*/

    }while(s!=G);

    }

    void SendFileName(fname)

    char *fname;

    {

    int s,ch;

    printf("Now transmit the file.Please wait...");

    while(*fname){

    ch=(int)fname++;

    s=ch%16; /*取文件名中一个字节的低4位*/

    Send(s);

    s=ch/16;

    Send(s); /*取文件名中一个字节的低4位*/

    }

    s=32; /*发送文件名结束标志*/

    Send(s);

    Send(s);

    }

    void ReceiveFile(){

    FILE *fp;

    char ch;

    int G1,G2,G3;

    char fname[15];

    GetFileName(fname);

    printf("Receiving file %s.\n",fname);

    remove(fname);

    if((fp=fopen(fname,"wb"))==NULL)

    {

    printf("Can''''t open output file.\n");

    exit(1);

    }

    /*循环为检测每次接受的数据是否为新数据,如果不是,*/

    /*则用此次接收的数据覆盖上次接收的数据*/

    G1=ReadPort(PORT);

    G2=Receive(PORT,&G1);

    do{

    G3=Receive(PORT,&G2);

    ch=(char)(G1%16+G2*16);/*恢复分开的数据,组合高4位和低4位*/

    putc(ch,fp);

    if(ferror(fp)){

    printf("\nError writing file.");

    exit(1);

    }

    G2=Receive(PORT,&G3);

    G1=G3;

    }while(G1/16!=48);

    printf("\nTransmit finished.");

    fclose(fp);

    }

    int Receive(port,G)

    int port,*G;

    {

    int GM;

    SendPort(port,*G);

    GM=ReadPort(port);

    if(GM/16==0)

    return GM;

    else if(GM/16==1){

    do{

    *G=GM;

    SendPort(port,GM);

    GM=ReadPort(port);

    }while(GM/16==1);

    }

    return GM;

    }

    void GetFileName(char *f)

    {

    int G1,G2,G3;

    char ch;

    G1=ReadPort(PORT);

    G2=ReadPort(PORT);

    do{

    G3=Receive(PORT,&G3);

    ch=(char)(G1%16+G2/16);

    *f=ch;

    *f++;

    G2=Receive(PORT,&G3);

    G1=G3;

    }while(G1/16!=32);

    printf("File name transmit finished.\n");

    }

    void InitPort(port,para)

    int port;

    unsigned char para;

    {

    union REGS reg;

    reg.x.dx=port;

    reg.h.ah=0;

    reg.h.al=para;

    int86(0x14,?,?);

    }

    void SendPort(port,c)

    int port;

    char c;

    {

    union REGS reg;

    reg.x.dx=port;

    reg.h.al=c;

    reg.h.ah=1;

    int86(0x14,?,?);

    if(reg.h.ah&128){

    printf("\nSend mistakes!");

    exit(1);

    }

    }

    int ReadPort(port)

    int port;

    {

    union REGS reg;

    while(!(CheckState(port)&256)){

    if(kbhit()){/*如端口长期无数据可人为终止等待*/

    printf("Press any key to exit.");

    getch();

    exit(1);

    }

    }

    reg.x.dx=port;

    reg.h.ah=2;

    int86(0x14,?,?);

    if(reg.h.ah&128){

    printf("\nRead mistake!");

    exit(1);

    }

    return reg.h.al;

    }

    int CheckState(port)

    int port;

    {

    union REGS reg;

    reg.x.dx=port;

    reg.h.ah=3;

    int86(0x14,?,?);

    return reg.x.ax;

    }在当今,流行的编程软件种类繁多,它们编程方便、易于维护,但是在与硬

    件直接打交道和编制系统软件时却束手无策,于是C语言就有了用武之地。C语言

    作为汇编语言与高级语言之间的一种过渡语言,兼有汇编语言的高效和高级语言

    的方便。

    在通讯中,为了保证行运安全可靠,标准的串行口必须具有许多握手信号和

    状态信息。这是因为通讯的各个计算机CPU速度不一样(这会导致“错帧”)以

    及发送机发送数据速度比接收机接收速度快(这会导致“过冲”)。为解决这个

    问题,我们采用一个简单的握手信号,即发送机每次仅发送半个字节(低4位)

    的数据,而另外半个字节(高4位)则用来传送信息。我们可以对信息位(高4位)

    进行如下简单的编码:

    0H:发送的是新的半个字节数据

    1H:重新发送上次传送错误的数据

    2H:文件名结束

    3H:文件结束

    这样,每当发送机发送一个字节以后,就等待接受机发回送信号,这回送信号就

    是发送机发送过来的那个字节。发送机接收到回送信号后,把它与刚发送的字节

    相比较,如果相同,就发送新的半个字节,否则就重新发送。新数据与旧数据通

    过信息位来区分。下面就是用C语言编写控制串行口的程序。

    #include "dos.h"

    #include "stdlib.h"

    #include "stdio.h"

    #define PORT 0

    void SendFile(char *fname); /* 发送文件*/

    void Send(int s); /*发送一个字节*/

    void SendFileName(char *fname); /*发送文件名*/

    void ReceiveFile(); /*接收文件*/

    void GetFileName(char *f); /*接收文件名*/

    void InitPort(int port,unsigned char para); /*初始化端口*/

    void SendPort(int port,char c); /*端口发送*/

    int ReadPort(int port); /*读端口字节*/

    int CheckState(int port); /*检查端口状态*/

    int Receive(int port,int *G); /*接收一个字节*/

    main(int argc,char *argv[])

    {

    if(argc<2){

    printf("Please input R(receive) or S(sent) parametre:");

    exit(1);

    }

    InitPort(PORT,231);

    if(*argv[1]==''''S'''') /*检查选择的有效性*/

    SendFile(argv[2]);

    else if(*argv[1]==''''R'''')

    ReceiveFile();

    else{

    printf("Error parament.Please input again.");

    exit(1);

    }

    }

    void SendFile(char *fname)

    {

    FILE *fp;

    int ch,s;

    if((fp=fopen(fname,"rb"))==NULL)

    {

    printf("Can''''t open the file.\n");

    exit(1);

    }

    SendFileName(fname);

    do{

    ch=(int)getc(fp);

    if(ferror(fp)){

    printf("Error reading file.\n");

    break;

    }

    s=ch%16; /*取文件中一个字节的低4位*/

    Send(s);

    s=ch/16; /*取文件中一个字节的高4位*/

    Send(s);

    }while(!feof(fp));

    s=46; /*发送文件结束信息*/

    Send(s);

    Send(s);

    fclose(fp);

    }

    void Send(s)

    int s;

    {

    int G;

    SendPort(PORT,s);

    G=ReadPort(PORT); /*等待握手信号*/

    if(s!=G)

    s=s+16;

    do{

    SendPort(PORT,s);

    G=ReadPort(PORT);/*等待握手信号*/

    }while(s!=G);

    }

    void SendFileName(fname)

    char *fname;

    {

    int s,ch;

    printf("Now transmit the file.Please wait...");

    while(*fname){

    ch=(int)fname++;

    s=ch%16; /*取文件名中一个字节的低4位*/

    Send(s);

    s=ch/16;

    Send(s); /*取文件名中一个字节的低4位*/

    }

    s=32; /*发送文件名结束标志*/

    Send(s);

    Send(s);

    }

    void ReceiveFile(){

    FILE *fp;

    char ch;

    int G1,G2,G3;

    char fname[15];

    GetFileName(fname);

    printf("Receiving file %s.\n",fname);

    remove(fname);

    if((fp=fopen(fname,"wb"))==NULL)

    {

    printf("Can''''t open output file.\n");

    exit(1);

    }

    /*循环为检测每次接受的数据是否为新数据,如果不是,*/

    /*则用此次接收的数据覆盖上次接收的数据*/

    G1=ReadPort(PORT);

    G2=Receive(PORT,&G1);

    do{

    G3=Receive(PORT,&G2);

    ch=(char)(G1%16+G2*16);/*恢复分开的数据,组合高4位和低4位*/

    putc(ch,fp);

    if(ferror(fp)){

    printf("\nError writing file.");

    exit(1);

    }

    G2=Receive(PORT,&G3);

    G1=G3;

    }while(G1/16!=48);

    printf("\nTransmit finished.");

    fclose(fp);

    }

    int Receive(port,G)

    int port,*G;

    {

    int GM;

    SendPort(port,*G);

    GM=ReadPort(port);

    if(GM/16==0)

    return GM;

    else if(GM/16==1){

    do{

    *G=GM;

    SendPort(port,GM);

    GM=ReadPort(port);

    }while(GM/16==1);

    }

    return GM;

    }

    void GetFileName(char *f)

    {

    int G1,G2,G3;

    char ch;

    G1=ReadPort(PORT);

    G2=ReadPort(PORT);

    do{

    G3=Receive(PORT,&G3);

    ch=(char)(G1%16+G2/16);

    *f=ch;

    *f++;

    G2=Receive(PORT,&G3);

    G1=G3;

    }while(G1/16!=32);

    printf("File name transmit finished.\n");

    }

    void InitPort(port,para)

    int port;

    unsigned char para;

    {

    union REGS reg;

    reg.x.dx=port;

    reg.h.ah=0;

    reg.h.al=para;

    int86(0x14,?,?);

    }

    void SendPort(port,c)

    int port;

    char c;

    {

    union REGS reg;

    reg.x.dx=port;

    reg.h.al=c;

    reg.h.ah=1;

    int86(0x14,?,?);

    if(reg.h.ah&128){

    printf("\nSend mistakes!");

    exit(1);

    }

    }

    int ReadPort(port)

    int port;

    {

    union REGS reg;

    while(!(CheckState(port)&256)){

    if(kbhit()){/*如端口长期无数据可人为终止等待*/

    printf("Press any key to exit.");

    getch();

    exit(1);

    }

    }

    reg.x.dx=port;

    reg.h.ah=2;

    int86(0x14,?,?);

    if(reg.h.ah&128){

    printf("\nRead mistake!");

    exit(1);

    }

    return reg.h.al;

    }

    int CheckState(port)

    int port;

    {

    union REGS reg;

    reg.x.dx=port;

    reg.h.ah=3;

    int86(0x14,?,?);

    return reg.x.ax;

    }

    展开全文
  • 程序用于51单片机的串口通信发送程序,波特率为9600,
  • ht46ru232 串口接收、发送程序 C语言 ht46ru232 串口接收、发送程序 C语言
  • 串口接受和发送数据--C语言代码,非常好用,代码简单,有注释,方便理解
  • C语言编写串口程序

    2021-05-19 11:37:34
    在当今,流行的编程软件种类繁多,它们编程方便、易于维护,但是在与硬件直接打交道和编制系统软件时却...这是因为通讯的各个计算机CPU速度不一样(这会导致“错帧”)以及发送发送数据速度比接收机接收速度快(这会导...

    在当今,流行的编程软件种类繁多,它们编程方便、易于维护,但是在与硬

    件直接打交道和编制系统软件时却束手无策,于是C语言就有了用武之地。C语言

    作为汇编语言与高级语言之间的一种过渡语言,兼有汇编语言的高效和高级语言

    的方便。

    在通讯中,为了保证行运安全可靠,标准的串行口必须具有许多握手信号和

    状态信息。这是因为通讯的各个计算机CPU速度不一样(这会导致“错帧”)以

    及发送机发送数据速度比接收机接收速度快(这会导致“过冲”)。为解决这个

    问题,我们采用一个简单的握手信号,即发送机每次仅发送半个字节(低4位)

    的数据,而另外半个字节(高4位)则用来传送信息。我们可以对信息位(高4位)

    进行如下简单的编码:

    0H:发送的是新的半个字节数据

    1H:重新发送上次传送错误的数据

    2H:文件名结束

    3H:文件结束

    这样,每当发送机发送一个字节以后,就等待接受机发回送信号,这回送信号就

    是发送机发送过来的那个字节。发送机接收到回送信号后,把它与刚发送的字节

    相比较,如果相同,就发送新的半个字节,否则就重新发送。新数据与旧数据通

    过信息位来区分。下面就是用C语言编写控制串行口的程序。

    #include "dos.h"

    #include "stdlib.h"

    #include "stdio.h"

    #define PORT 0

    void SendFile(char *fname); /* 发送文件*/

    void Send(int s); /*发送一个字节*/

    void SendFileName(char *fname); /*发送文件名*/

    void ReceiveFile(); /*接收文件*/

    void GetFileName(char *f); /*接收文件名*/

    void InitPort(int port,unsigned char para); /*初始化端口*/

    void SendPort(int port,char c); /*端口发送*/

    int ReadPort(int port); /*读端口字节*/

    int CheckState(int port); /*检查端口状态*/

    int Receive(int port,int *G); /*接收一个字节*/

    main(int argc,char *argv[])

    {

    if(argc<2){

    printf("Please input R(receive) or S(sent) parametre:");

    exit(1);

    }

    InitPort(PORT,231);

    if(*argv[1]==''''S'''') /*检查选择的有效性*/

    SendFile(argv[2]);

    else if(*argv[1]==''''R'''')

    ReceiveFile();

    else{

    printf("Error parament.Please input again.");

    exit(1);

    }

    }

    void SendFile(char *fname)

    {

    FILE *fp;

    int ch,s;

    if((fp=fopen(fname,"rb"))==NULL)

    {

    printf("Can''''t open the file.\n");

    exit(1);

    }

    SendFileName(fname);

    do{

    ch=(int)getc(fp);

    if(ferror(fp)){

    printf("Error reading file.\n");

    break;

    }

    s=ch%16; /*取文件中一个字节的低4位*/

    Send(s);

    s=ch/16; /*取文件中一个字节的高4位*/

    Send(s);

    }while(!feof(fp));

    s=46; /*发送文件结束信息*/

    Send(s);

    Send(s);

    fclose(fp);

    }

    void Send(s)

    int s;

    {

    int G;

    SendPort(PORT,s);

    G=ReadPort(PORT); /*等待握手信号*/

    if(s!=G)

    s=s+16;

    do{

    SendPort(PORT,s);

    G=ReadPort(PORT);/*等待握手信号*/

    }while(s!=G);

    }

    void SendFileName(fname)

    char *fname;

    {

    int s,ch;

    printf("Now transmit the file.Please wait...");

    while(*fname){

    ch=(int)fname++;

    s=ch%16; /*取文件名中一个字节的低4位*/

    Send(s);

    s=ch/16;

    Send(s); /*取文件名中一个字节的低4位*/

    }

    s=32; /*发送文件名结束标志*/

    Send(s);

    Send(s);

    }

    void ReceiveFile(){

    FILE *fp;

    char ch;

    int G1,G2,G3;

    char fname[15];

    GetFileName(fname);

    printf("Receiving file %s.\n",fname);

    remove(fname);

    if((fp=fopen(fname,"wb"))==NULL)

    {

    printf("Can''''t open output file.\n");

    exit(1);

    }

    /*循环为检测每次接受的数据是否为新数据,如果不是,*/

    /*则用此次接收的数据覆盖上次接收的数据*/

    G1=ReadPort(PORT);

    G2=Receive(PORT,&G1);

    do{

    G3=Receive(PORT,&G2);

    ch=(char)(G1%16+G2*16);/*恢复分开的数据,组合高4位和低4位*/

    putc(ch,fp);

    if(ferror(fp)){

    printf("\nError writing file.");

    exit(1);

    }

    G2=Receive(PORT,&G3);

    G1=G3;

    }while(G1/16!=48);

    printf("\nTransmit finished.");

    fclose(fp);

    }

    int Receive(port,G)

    int port,*G;

    {

    int GM;

    SendPort(port,*G);

    GM=ReadPort(port);

    if(GM/16==0)

    return GM;

    else if(GM/16==1){

    do{

    *G=GM;

    SendPort(port,GM);

    GM=ReadPort(port);

    }while(GM/16==1);

    }

    return GM;

    }

    void GetFileName(char *f)

    {

    int G1,G2,G3;

    char ch;

    G1=ReadPort(PORT);

    G2=ReadPort(PORT);

    do{

    G3=Receive(PORT,&G3);

    ch=(char)(G1%16+G2/16);

    *f=ch;

    *f++;

    G2=Receive(PORT,&G3);

    G1=G3;

    }while(G1/16!=32);

    printf("File name transmit finished.\n");

    }

    void InitPort(port,para)

    int port;

    unsigned char para;

    {

    union REGS reg;

    reg.x.dx=port;

    reg.h.ah=0;

    reg.h.al=para;

    int86(0x14,®,®);

    }

    void SendPort(port,c)

    int port;

    char c;

    {

    union REGS reg;

    reg.x.dx=port;

    reg.h.al=c;

    reg.h.ah=1;

    int86(0x14,®,®);

    if(reg.h.ah&128){

    printf("\nSend mistakes!");

    exit(1);

    }

    }

    int ReadPort(port)

    int port;

    {

    union REGS reg;

    while(!(CheckState(port)&256)){

    if(kbhit()){/*如端口长期无数据可人为终止等待*/

    printf("Press any key to exit.");

    getch();

    exit(1);

    }

    }

    reg.x.dx=port;

    reg.h.ah=2;

    int86(0x14,®,®);

    if(reg.h.ah&128){

    printf("\nRead mistake!");

    exit(1);

    }

    return reg.h.al;

    }

    int CheckState(port)

    int port;

    {

    union REGS reg;

    reg.x.dx=port;

    reg.h.ah=3;

    int86(0x14,®,®);

    return reg.x.ax;

    }

    展开全文
  • keil 51 单片机C语言串口发送和接收程序 STC-ISP// 9600 N 8 1 keil 51 单片机C语言串口发送和接收程序 STC-ISP// 9600 N 8 1
  • 串口调试助手C语言程序串口调试助手源程序及编程详细过程作者:龚建伟? 2001.6.20可以任意转载,但必须注明作者和说明来自,不得作为商用目次:1.建立项目??2.在项目中插入MSComm控件?3.利用ClassWizard定义...

    串口调试助手C语言源程序

    串口调试助手源程序

    及编程详细过程

    作者:龚建伟? 2001.6.20

    可以任意转载,但必须注明作者和说明来自,不得作为商用

    目次:

    1.建立项目??

    2.在项目中插入MSComm控件?

    3.利用ClassWizard定义CMSComm类控制变量

    4.在对话框中添加控件??

    5.添加串口事件消息处理函数OnComm()

    6.打开和设置串口参数

    7.发送数据

    ??? 在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月,在全国各地累计下载量近5000人次,在近200多个电子邮件中,20多人提供了使用测试意见,更有50多位朋友提出要串口调试助手的源代码,为了答谢谢朋友们的支持,公开推出我最初用VC控件MSComm编写串口通信程序的源代码,并写出详细的编程过程,姑且叫串口调试助手源程序V1.0或VC串口通讯源程序吧,我相信,如果你用VC编程,那么有了这个代码,就可以轻而易举地完成串口编程任务了。(也许本文过于详细,高手就不用看)

    开始吧:

    1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点);

    2.在项目中插入MSComm控件?? 选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。 选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了),

    这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。

    3.利用ClassWizard定义CMSComm类控制对象? 打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES()? #include "mscomm.h"? //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。

    4.在对话框中添加控件? 向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。别忘记了将接收编辑框的Properties->Styles中把Miltiline和Vertical Scroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。

    再打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类, 为IDC_EDIT_RXDATA添加CString变量m_strRXData, 为IDC_EDIT_TXDATA添加CString变量m_strTXData。说明: m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。

    ?????? 休息一会吧?我们天天与电脑打交道,要注意保重,我现在在单杠上做引体向上可以来40次,可我都32了,佩服吗?。。。。。。好了,再接着来,下面是关键了:

    5.添加串口事件消息处理函数OnComm() 打开ClassWizard->Message Maps,选择类CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm,(好记而已)OK。

    ?这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在OnComm()函数加入相应的处理代码就能实现自已想要的功能了。请你在函数中加入如下代码:

    void CSCommTestDlg::OnComm()?{??? // TOD

    展开全文
  • VS2017平台下最简洁的基于C语言开发的串口发送程序测试代码,修改简单灵活,方便用于各种串口调试。VS2017平台下最简洁的基于C语言开发的串口发送程序测试代码,修改简单灵活,方便用于各种串口调试。
  • 串口调试助手C语言程序串口调试助手源程序及编程详细过程作者:龚建伟 2001.6.20可以任意转载,但必须注明作者和说明来自http://doc.xuehai.net,不得作为商用目次:1.建立项目2.在项目中插入MSComm控件3.利用...
  • C语言串口发送数据

    千次阅读 2019-11-20 11:08:48
    //控制模式,保证程序不会成为端口的占有者 termios_new.c_cflag |= CREAD; //控制模式,使能端口读取输入的数据 // 控制模式,flow control fctl = pportinfo->fctl; switch (fctl) { case '0': { ...
  • 描述0前言串行通信在通讯领域被广泛应用,标准的RS232接口已成为计算机、外设、交换机和许多通讯设备的标准接口。虽然近年来随着USB口的日趋流行,RS232接口串口作为一种传统的串口通信口有被取代的趋势。然而由于它...
  • 普通电脑或者单片机可以通过RS232串口与GPRS模块相连,通过AT指令控制GPRS模块实现各种基于GSM的通信功能。 本代码通过gprs模块发送短消息分为两种方式: 1. 以文本方式发送短信; 2. 以PDU模式发送短信;
  • void JieShou(void) //接收函数,每4次调用接收... (JieShou_D==0)) //串行开始位到来{DingShiJiShu=0; //开始定时计数KaiShi=1;JieShou_T=0xffff; //接收临时寄存器置全1}else if((KaiShi==1) && (DingShiJ...
  • #include//C51通用串口收发数据C语言程序模块#define uchar unsigned char#define uint unsigned intuchar shu;bit i;sbit led1=P0^0;void delayms(uint xms) //1ms;{uint i,j;for(i=xms;i>0;i--)for(j=110;j>...
  • 摘要:串口通信是一种广泛使用且实用的通信方式,介绍RS232串行通信的联结方式,研究利用c语言编程实现RS232串行通信的过程。结合实际应用,在约定双方串行通信协议的基础上,运用C语言开发的串行通信软件,实现了...
  • else if (RI == 1) // 如果RI=1,则说明中断是由发送完成引发的 { RI = 0; } ES = 1; } void ADC_Init() { P1ASF = 0xff; //Open 8 channels ADC function ADC_RES = 0; //Clear previous result ADC_...
  • 我之前的一篇博客讲解了怎么使用虚拟串口串口调试助手:虚拟串口模拟器和串口调试助手使用教程,这次我们在此基础上继续来使用虚拟串口周期发送和接收功能。 我们知道,在Windows的操作系统上,将串口(通信设备)...
  • 串口通信是一种广泛使用且实用的通信方式,介绍RS232串行通信的联结方式,研究利用c语言编程实现RS232串行通信的过程。结合实际应用,在约定双方串行通信协议的基础上,运用C语言开发的串行通信软件,实现了企业生产...
  • 半双工:数据可以向两个方向传输,任何同一时刻只能朝同一方向传输 全双工:数据可以同时向两个方向传输 1.2 串口通信标准 RS232 (电子工业协议EIA) - 目前最常用的’串行接口标准‘ 规定了’电气特性‘: 逻辑 0 ...
  • } //串口发送程序 void send(uchar se) { SBUF=se; //发送数据 while(TI == 0); TI = 0; } //串口接收程序 uchar receive(void) { re=SBUF; //接收数据 while(RI==0); RI=0; return re; } //串口初始化 void sinti...
  • 通过pc端的c++语言编程实现与单片机的通讯,可用于pc端c++处理程序后给单片机发送一个trigger指令的情况。 使用方法: 1.将contest.cpp中的代码加入需要的程序中 2.将PCB板上UART1的IO口通过usb转TTL工具与电脑的...
  • C语言利用串口实现两套电脑的聊天,可以在DOS里面运行,一台电脑需要用串口助手软件接收数据,另一台利用DOS运行程序,通过串口连接两台电脑
  • 固件库二、STM32串口通信 一、比较基于寄存器与基于固件库编程方式差异 1.寄存器 寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。 2.固件库 固件库就是一个...
  • 求一个单片机串口通信程序 悬赏分:50 | 解决时间:2011-9-19 22:39 |求一个PC与单片机串口通信的程序,要求如下:1、如果在电脑上发送以$开始的字符串,则将整个字符串原样返回(字符串长度不是固定的)。2、如果接收...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,732
精华内容 5,092
关键字:

串口发送程序c语言

c语言 订阅
友情链接: JFET.rar