PC机与PIC单片机串行通讯的实现

[09-12 17:53:55]   来源:http://www.88dzw.com  单片机学习   阅读:8383

文章摘要: dcb.BaudRate=9600; //设置波特率 dcb.ByteSze=8; dcb.StopBits=onestopbit; dcb.fBinary=TRUE; //二进制通讯格式 dcb.fPar北y:FALSE; SetCommState(Hcom,&dcb) //串口参数配置 第3步,启动一个辅助线程,用于串口事件的处理。这里用他来监视串口状态,主线程则可专心进行数据处理。 HCo

PC机与PIC单片机串行通讯的实现,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com
dcb.BaudRate=9600; //设置波特率
dcb.ByteSze=8;
dcb.StopBits=onestopbit;
dcb.fBinary=TRUE; //二进制通讯格式
dcb.fPar北y:FALSE;
SetCommState(Hcom,&dcb) //串口参数配置

第3步,启动一个辅助线程,用于串口事件的处理。这里用他来监视串口状态,主线程则可专心进行数据处理。

HCommWatchThread =CreateThread ((LPSECURITY_ATTRIBUTES) NULL, (LPTHEARD_ START - ROUTINE) CommWatchPROC, GetSafeHwnd ( ),&dwThreadID);
ASSERT(hCommWatchThread! =NULL);

第4步,要为辅助线程写一个全局函数,主要完成数据接收的工作。

UNIT CommWatchProc(HWND hSendWnd)
{DWORD dwEvtMask=0;
SetCommMask(hCom,EV_RXCHAR︱EV_ _TXEMPTY);
//有哪些串口事件需要监视
WaitCommEvent(hCom,&dwEvMask,Os);
//等待串口通讯事件的发生
If(dwEvtMask&EV_RXCHAR)= =EV_RXCHAR)
//缓冲区中有数据到达
{COMSTART ComStari;
DWORD dwLenlgth;
ClearCommError(hCom,&dwErrorFlags,&ComStart);
DwLength=ComStat.cbInQuei ; //输入缓冲区有多少数据
If(dwLenlTth>0)
{BOOL fReadStari
fReadStat = =ReadFile (hCom, 1pBuffer,dwLength,
&dwBytesRead,,&Read_OS(npTTYInfO));
//读数据因为使用1pOverlapped结构,ReadFile()立即返回
FALSE;
If(! fReadStat)
{if(GetLastError()= =ERROR_IO_PENDIN)
{while (! GetOverLappedReault (hCom,&READ_OS
(opTTYInfo),&dwNytesRead,TRUE)
{dWError=GetlastError();
if(dwError==ERROR_IO_INCOMPLETE)
CONTINUE; //缓冲区数据没有读完,继续
……}
∷ PostMessage (( HWND ) hSendWnd, WM
NOTIFYPROCESS,0,0); //通知主线程,串口接到数据}

第5步,在主线程中发送下行命令:

BOOL f WriteStat;
Char szBuffer[count];
//准备好发送的数据,放在szBuffer[]中
FWrirteStar=WriteFile(hCom,szBuffer,dwbytesToWrite,
&dwBytesWritten&WRITE_OS(npTTYInof));
int err=GetLastError();
if(!fWriteStat){if(GetLastError()= =ERROR_IO_PENDING)
{while (! GetOverlappedResult (hCom,&WRITE OS
(npTTYInfO),&dwBytesWritten,true))
{dwError=GetLasrError();
if(dwError= =ERROR_IO_INCOMPLETE)
{dwBytesSent+=dwbytesWritten;
continue;))}}

3 PIC"C711单片机串行通讯的实现

本文以单片机对温度传感器DSl820进行数据采集为例,实现单片机与PC机的通讯。限于篇幅,给出传送一个DSl820信号到串口的主要部分程序:

A2 EQU 2 //RA2接收数据端
A1 EQU 1 //RAl发送数据
RCVREG EQU 26
R-COUNT EQU 27 //接收数据计数器
T-COUNT EQU 28 //发送数据计数器
MSB EQU 7
NUM EQU 6B //设置下位机序号67
NUM-ADDR EQU 2A //存储本机号码的地址
SEN-CODE EQU 39 //传感器信号存放地址

上一页  [1] [2] [3]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行