你现在位置:首页>技术论文>数据通讯>正文
用Spcomm/MScomm串口通信的问题
日期:2008-3-17 17:07:29 来源:本站整理  
点击: 作者:未知
点击【】放大字体.
1.用Mscomm32(vb6带)在Delphi中的收发过程的代码
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

2.用Spcomm 在Delphi中的收发过程的代码
WWW_P※LCJS_CO※M-PLC-技-.术_网

我用了上面的两个控件发现Mscomm32能发送接收 可是不知道怎样将返回的数据还原成看的
WWW_P※LCJS_COM-PLC-)技.术_网

懂的数据(unicode?),我是和51单片机通讯的 谁能写出发送、接收代码将送上300分
P.L.C.技.术.网——可编程控制器技术门户

用Spcomm也是不知道怎样将返回的数据还原成看的懂的数据,另外它能否象Mscomm一样可以
WWW_P※LCJS_CO※M-PLC-技-.术_网

等到Buffer中有一定个数的字节后再收的功能呢?能否写出原代码将送上300分
WWW_P※LCJS_COM-PLC-)技.术_网

其实我看了以前关于串口的帖子 发现大家都是说一半的多 而能写全代码的少 
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

一般串行通讯用ASCII码比较多,当然也有用16进制,正好我都做过。如果是发送端不断发送,那么你可以用事件方式触发。如果是应答方式,你可以用轮询的方式来做。
plcjs.技.术_网

我以前一直是用VB写跟外围通讯的程序。所以不能提供给你delphi,不过Vb源程序和C源程序倒有
WWW_PLCJS_COM-PLC-技.术_网

C
WWW_PLCJS_COM-PLC-技.术_网

int _read_data_register(unsigned int uAddress,unsigned int number)
W1WW_P4LCJS_COM-PLC-技.术_网

{    unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
WW.W_PLCJS_COM-PLC-技.术_网

unsigned char uReceive[104];
WWW_PLCJS_COM-PLC-技.术_网

unsigned int uTmp;
WWW.PLCJS.COM——可编程控制器技术门户

unsigned int uSum;
WWcW_PLCJS_COM-PLC-技.术_网

unsigned int num;
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

long lTmp;
WWW_PLC※JS_COM-PmLC-技.术_网

int i,j;
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

if(TESTING==1)
WWW_PL※CJS_COM-PLC-技.术_网

{    for(i=0;i<number;i++)uRead_value[i]=0;
W1WW_P4LCJS_COM-PLC-技.术_网

return TRUE;
P.L.C.技.术.网——可编程控制器技术门户

}
WWW_PLCJS_COM-PLC-技.术_网

init_plc();
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

num=number*2;
WWW_P※LCJS_COM-PLC-)技.术_网

if((num/16)>=10)
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

uSend[6]=(unsigned char)(num/16+0x41-10);
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

else
WW.W_PLC※JS_C,OM-PL,C-技.术_网

uSend[6]=(unsigned char)(num/16+0x30);
WWW_PLCJS_COM-PLC-技.术_网

if((num%16)>=10)
WWW.PLCJS.COM——可编程控制器技术门户

uSend[7]=(unsigned char)((num%16)+0x41-10);
WWW_PLC※JS_COM-PmLC-技.术_网

else
WW.W_PLCJS_COM-PLC-技.术_网

uSend[7]=(unsigned char)((num%16)+0x30);
W1WW_P4LCJS_COM-PLC-技.术_网

uAddress=uAddress*2+0x1000;
WWW_PLCJS@_COM%-PLC-技.术_网

uTmp=uAddress & 0x000f;
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WW.W_PLCJS_COM-PLC-技.术_网

uTmp=(uAddress>>4) & 0x000f;
WW.W_PLCJS_COM-PLC-技.术_网

uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WWcW_PLCJS_COM-PLC-技.术_网

uTmp=(uAddress>>8) & 0x000f;
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WWW_PLCJS@_COM%-PLC-技.术_网

uTmp=(uAddress>>12)&0x000f;
plcjs.技.术_网

uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WWW_PL※CJS_COM-PLC-技.术_网

uSum=0;
WWW_PLCJS_COM-PLC-技.术_网

for(i=1;i<9;i++)
——可——编——程——控-制-器-技——术——门——户

uSum=uSum+(unsigned char)uSend[i];
W1WW_P4LCJS_COM-PLC-技.术_网

uTmp=uSum&0x000f;
WWW_PL※CJS_COM-PLC-技.术_网

uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WWW.PLCJS.COM——可编程控制器技术门户

uTmp=(uSum>>4)&0x000f;
WWW_P※LCJS_CO※M-PLC-技-.术_网

uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
P.L.C.技.术.网——可编程控制器技术门户

 /*disable();*/
P.L.C.技.术.网——可编程控制器技术门户

for(i=0;i<11;i++)
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

{    for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

{    if((inportb(STATS_PORT)&0x20)!=0)
WWW_P※LCJS_CO※M-PLC-技-.术_网

break;
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

}
WWW_P※LCJS_CO※M-PLC-技-.术_网

if(lTmp>=DELAY_TIMES)
WWW_PLC※JS_COM-PmLC-技.术_网

{
WWW_P※LCJS_COM-PLC-)技.术_网

/*enable();*/
WWW_P※LCJS_COM-PLC-)技.术_网

return(FALSE);
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

}
P.L.C.技.术.网——可编程控制器技术门户

outportb(DATA_PORT,uSend[i]);
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

}
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

disable();
WWW_PLC※JS_COM-PmLC-技.术_网

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
W1WW_P4LCJS_COM-PLC-技.术_网

{    if((inportb(STATS_PORT)&1)!=0)
WWW.PLCJS.COM——可编程控制器技术门户

break;
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

}
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

if(lTmp>=DELAY_TIMES)
WW.W_PLC※JS_C,OM-PL,C-技.术_网

{
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

enable();
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

return(FALSE);
WWW.PLCJS.COM——可编程控制器技术门户

}
WWW_PL※CJS_COM-PLC-技.术_网

uReceive[0]=inportb(DATA_PORT);
WWW_P※LCJS_CO※M-PLC-技-.术_网

if(uReceive[0]!=2)
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

{
WWW_P※LCJS_CO※M-PLC-技-.术_网

enable();
WWW_PLCJS@_COM%-PLC-技.术_网

return(FALSE);
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

}
W1WW_P4LCJS_COM-PLC-技.术_网

for(i=1;i<number*4+4;i++)
W1WW_P4LCJS_COM-PLC-技.术_网

{    for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
P.L.C.技.术.网——可编程控制器技术门户

{    if((inportb(STATS_PORT)&1)!=0)
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

break;
P.L.C.技.术.网——可编程控制器技术门户

}
WWW_PLCJS_COM-PLC-技.术_网

if(lTmp>=DELAY_TIMES)
WWW_P※LCJS_CO※M-PLC-技-.术_网

{
WW.W_PLC※JS_C,OM-PL,C-技.术_网

enable();
WWW_P※LCJS_CO※M-PLC-技-.术_网

return(FALSE);
P.L.C.技.术.网——可编程控制器技术门户

}
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

uReceive[i]=inportb(DATA_PORT);
WW.W_PLCJS_COM-PLC-技.术_网

}
WWW.PLCJS.COM——可编程控制器技术门户

enable();
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

uSum=0;
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

for(i=1;i<number*4+2;i++)
WWW_PLCJS@_COM%-PLC-技.术_网

uSum=uSum+(unsigned int)uReceive[i];
WWW_PL※CJS_COM-PLC-技.术_网

uTmp=uSum&0xf;
WW.W_PLC※JS_C,OM-PL,C-技.术_网

uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WWW_PLCJS@_COM%-PLC-技.术_网

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);
——可——编——程——控-制-器-技——术——门——户

uTmp=(uSum>>4)&0xf;
WWW_PLCJS@_COM%-PLC-技.术_网

uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WW.W_PLC※JS_C,OM-PL,C-技.术_网

W1WW_P4LCJS_COM-PLC-技.术_网

if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

for(j=0;j<number;j++)
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

{    for(i=j*4+1;i<j*4+5;i++)
WWW_PL※CJS_COM-PLC-技.术_网

uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;

本新闻共6页,当前在第11 2  3  4  5  6  
WWcW_PLCJS_COM-PLC-技.术_网

评论内容
载入中...
载入中...
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
·栏目热门排行
·站内热门排行