免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1157 | 回复: 7
打印 上一主题 下一主题

这是一个简单串口程序,但编译不过去,谁能告诉我为什么吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-20 10:37 |只看该作者 |倒序浏览
#include "stdafx.h"
#include "stdio.h"
//#include "mscomm.h"


#define  BUFFER_SIZE 128
#define MSG(szMsg) MessageBox (NULL, szMsg , TEXT("Error", MB_OK)


HANDLE hCom;


BOOL  OpenSerial(LPCTSTR lpszPortNum);
DWORD WriteDataSerial(LPCVOID pdata, DWORD  len);
DWORD ReadDataSerial(TCHAR ReceiveBuf[BUFFER_SIZE]);
void  CloseSerial(void);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        // TODO: Place code here.

    long  LastError=ERROR_SUCCESS;


        LastError=OpenSerial("COM1";
        if(LastError!=TRUE)
        {       
           MessageBox(NULL,TEXT("open failed",TEXT("error",MB_OK);
           return  LastError;
        }
           char cmd[]={0x02,0x03,0x06,0x37,0xFE,0xC7};
    LastError=WriteDataSerial(cmd,6);
        if(LastError!=ERROR_SUCCESS)
         {
                 MessageBox(NULL,TEXT("write failed",TEXT("error",MB_OK);
                 return LastError;

         }
        char  ReceiveBuf[128];
         //memset(ReceiveBuf,0,sizeof(ReceiveBuf));
    LastError=ReadDataSerial(ReceiveBuf);

    if(LastError!=ERROR_SUCCESS)  
                {
                    MessageBox(NULL,TEXT("ReadDataSerial:read data failed",TEXT("Error", MB_OK);
                    return LastError;
                }
   
      
            
    char *ptr;
    //for(i=0;ReceiveBuf!='\0';i++)
    ptr=ReceiveBuf;
          printf("%02x",ptr);

    getchar();
        CloseSerial();
        return TRUE;
       
}
BOOL OpenSerial(LPCTSTR lpszPortNum)
{
        DCB  dcb;     
        BOOL bSuccess;
   
       
        hCom = CreateFile(  lpszPortNum,                                            GENERIC_READ|GENERIC_WRITE,                             0,                                                      NULL,                        
                            OPEN_EXISTING,                                          FILE_FLAG_OVERLAPPED,      
                            NULL);                     

        if (hCom ==INVALID_HANDLE_VALUE)
        {
                                MessageBox (NULL, TEXT("OpenSerial():CreateFile() failed, invalid handle value!", TEXT("Error", MB_OK);
                       
                return FALSE;
        }

         
        bSuccess = GetCommState(hCom, &dcb);

        if ( !bSuccess )
        {
                // Handle the error.
                MessageBox (NULL, TEXT("OpenSerial(): GetCommState() failed!"), TEXT("Error"), MB_OK);
               

                return FALSE;
        }

       
        dcb.BaudRate = CBR_9600   ;
        dcb.ByteSize = 8;
        dcb.Parity   = NOPARITY   ;
        dcb.StopBits = ONESTOPBIT ;
       
        bSuccess = SetCommState(hCom, &dcb);

        if ( ! bSuccess )
        {
                // Handle the error.
                MessageBox (NULL, TEXT("OpenSerial(): SetCommState() failed!"), TEXT("Error"), MB_OK);
               
       

                return FALSE;
        }

           //配置超时值
       COMMTIMEOUTS  CommTimeouts;
       GetCommTimeouts(hCom, &CommTimeouts);
       CommTimeouts.ReadIntervalTimeout = 500;  
       CommTimeouts.ReadTotalTimeoutMultiplier = 10;  
       CommTimeouts.ReadTotalTimeoutConstant = 10;   
       CommTimeouts.WriteTotalTimeoutMultiplier = 50;  
       CommTimeouts.WriteTotalTimeoutConstant = 100;   
       if (!SetCommTimeouts(hCom, &CommTimeouts))
       {
              //L"不能设置超时参数";
              return FALSE;
       }                 

        return TRUE ;
}

DWORD WriteDataSerial(LPCVOID pdata, DWORD  len)
{   
        DWORD dwByteswritten;
        DWORD  result;
        if(hCom==INVALID_HANDLE_VALUE ) return FALSE;
    result=WriteFile(hCom,pdata,len,&dwByteswritten,NULL);
        if (!result)
        {

           MessageBox (NULL, TEXT("WriteDataSerial(): WriteFile() failed\n"), TEXT("Error"), MB_OK);  
        return 0;
        }
        //CloseHandle(hCom);*/
        return  dwByteswritten;

}
  DWORD ReadDataSerial(TCHAR ReceiveBuf[BUFFER_SIZE])
{      
      int   iCounter=0;
      COMSTAT CommStat;
      DWORD dwError,dwBytesRead=0;
          DWORD bReadStatus;
          
      if(hCom==INVALID_HANDLE_VALUE) return FALSE;
         
      ClearCommError(hCom,&dwError,&CommStat);
          bReadStatus=ReadFile(hCom, ReceiveBuf, dwBytesRead, &dwBytesRead, NULL);
          if(dwBytesRead>;0)
          {  
                  ReceiveBuf[iCounter++]=dwBytesRead;
          
          if(iCounter == BUFFER_SIZE)
            {
              //L"接收缓冲区已满";
                                 MessageBox (NULL, TEXT("Error ReadDataSerial(): buffer full!\n"), TEXT("Error"), MB_OK);  
                  return 0;
             }
      }            

          if(!bReadStatus)
          {  
                 //MessageBox(NULL,TEXT("read failed"),TEXT("error"),MB_OK);
                  return 0;
      }
          return dwBytesRead;
}

          
          
void CloseSerial(void)
{

        CloseHandle(hCom);
       
       
}

论坛徽章:
0
2 [报告]
发表于 2005-10-20 13:30 |只看该作者

这是一个简单串口程序,但编译不过去,谁能告诉我为什么吗?

就一个代码放在这儿,既没有算法思想说明也没有程序的用途也没有什么注释
哪个高手原意回你的帖阿!??

论坛徽章:
0
3 [报告]
发表于 2005-10-20 14:14 |只看该作者

这是一个简单串口程序,但编译不过去,谁能告诉我为什么吗?

看着像Windows

论坛徽章:
0
4 [报告]
发表于 2005-10-20 15:07 |只看该作者

这是一个简单串口程序,但编译不过去,谁能告诉我为什么吗?

就是Windows下的

论坛徽章:
0
5 [报告]
发表于 2005-10-20 15:14 |只看该作者

这是一个简单串口程序,但编译不过去,谁能告诉我为什么吗?

好像你是用异步方式打开串口的, 而在readfile,writefile却没有哦使用异步方式读写,当然访问失败了!再则可能你COM1口是不是被占用了,好像COM1口系统保留,你查查你连线的串口所在的COM

论坛徽章:
0
6 [报告]
发表于 2005-10-20 17:16 |只看该作者

这是一个简单串口程序,但编译不过去,谁能告诉我为什么吗?

多谢!

论坛徽章:
0
7 [报告]
发表于 2005-10-20 17:27 |只看该作者

这是一个简单串口程序,但编译不过去,谁能告诉我为什么吗?

那前面加上全局变量(OVERLAPPED m_OverlappedRead, m_Over lappedWrite)就可以了

论坛徽章:
0
8 [报告]
发表于 2005-10-20 17:28 |只看该作者

这是一个简单串口程序,但编译不过去,谁能告诉我为什么吗?

那前面加上全局变量(OVERLAPPED m_OverlappedRead, m_Over lappedWrite)是不是可以哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP