分类: C/C++
2008-03-13 17:30:27
if(m_comm.GetPortOpen()) { m_comm.SetPortOpen(FALSE); //设置串口配置信息前先要关闭串口 } m_comm.SetCommPort(1); //Com1串行口 m_comm.SetSettings("9600,n,8,1");//设置波特率为9600bps,无奇偶校验位,数据位8位,停止位1位 m_comm.SetInputMode(1); //设置数据通讯格式为二进制数组格式 m_comm.SetRThreshold(1); //设置为每次接到一个字节数据就触发OnComm事件 if(!m_comm.GetPortOpen()) { m_comm.SetPortOpen(TRUE); } m_comm.GetInput(); //清除串口输入缓冲区中残留数据 m_SendData="ATZ\r\n"; //调制解调器初始化 m_comm.SetOutput(COleVariant(m_SendData));二.接收数据
Sleep(500); //视各厂家modem而定。不加则数据接受不全 VARIANT m_input; char *str,*str1; int k,nEvent,i,len,m; CString str2; m_ReceiveData=""; nEvent=m_comm.GetCommEvent(); switch(nEvent) { case 2: //收到大于RTHresshold个字符 k=m_comm.GetInBufferCount(); //接收缓冲区的字符数目 if(k>0) { m_input=m_comm.GetInput(); str=(char*)(unsigned char*)m_input.parray->pvData; } ?i=0; str1=str; while(i以上是在做工程之余写下的一点东西。VC我是初学者,有错误的地方,还请各位批评指正。例子在VC 6.0+Win2000下调试通过。Win98下测试数据接收不全。还望高手指点一二。
附:
单片机或PC机对MODEM的控制是通过设置MODEM的S寄存器和发送标准AT命令来实现的。命令行由AT或at开始,不能是At或aT。它的一般格式为“AT+指令+回车”常用的AT命令简介如下,详细的AT命令见本说明书附录。
&F 恢复出厂设置
DT××× 音频拨号, ×××表示电话号码
+++ 切换到在线命令状态
Sn=X 写S寄存器
Hn 摘机/挂机控制
n=0 挂机
n=1 摘机
S0=X X=0,不自动应答
X=1~255,振铃指定次数后自动应答
\N0 异步方式设定为0
\q0 XON\XOFF流控方式