计算机的兄弟们,有谁知道怎么写C或者C++跟RS232串口通讯的程序
可以提供这方面的教程资料或者代码吗?>VB的也可以~`
急用~~谢谢~~
[ Last edited by qqkevin on 2004-5-18 at 03:32 PM ] c或c++的没试过,vb和c++builder的试过和plc通讯,无非就两种,一种是用api,一种是用mscomm,其中c++builder我就是用api的,比起vb还是有点麻烦,我记得delphi里面还有个这样的组件。用mscomm就可以了,满大街的书都是,msdn里面也有说明,好象宏格和我们学校建立了宏格模块教学点,宏格模块那里就有教程的,范逸之写的,基本上最早的vb和rs232的书也是他写的。因为太懒而且你是公的我这里懒得把东西主要代码贴出来,不难的,有心看三四天都搞定的了。
真正应用的rs232通讯是必须要设定采样频率的,这就要时间计算,vb里或c++builder里时钟最高精度只有50毫秒远不能满足,所以建议用一个计算从开机到现在的记数api,是千分一秒级的,忘了什么名字了,记得单词里有个count那样的字样的。还有我不是读计算机的,不知道计算机的还有什么招,先帮忙答一下我提出的那个贴吧,急啊啊!!!!!
[ Last edited by 步进电机 on 2004-5-18 at 10:15 PM ] 今天刚刚答辨回来(《计算机接口与通讯》课程设计)。
我用的是c语言做的用RS232C进行两机通讯。
用C语言要用到inportb(端口);outportb(端口,值);两个方法进行端口访问。
可以用查询和中断的方法进行访问。
如果用控件的话,到图书馆找一下关于串口通信的编程方面的书,有很详细的介绍的。不过要想了解底层的执行的话,建议用c或汇编。 晕~
楼上的
可以给CODE给我看看好吗`~
我觉得用VB的控件进行还是比较方便的`~(计算机的串口) 核心代码无非是查询串口的状态寄存器。
发送时用查询实现,
核心代码如下
do{
ch=getchar();
do{
flag = inportb(0x3fd);
flag = flag&0x20; /*测试发送保持寄存器是否为空*/
}while(flag==0);
outportb(0x3f8,ch);
}while(ch!=\'@\');
接收方用中断实现,核心代码如下:
mode = getvect(0x0b);
disable(); /*关中断*/
outportb(0x2fc,0x0b); /*out2,dtr,rts信号有效*/
outportb(0x2f9,0x01); /*允许接收中断*/
t = inportb(0x21);
t = t&0xf7; /* t & 1111 0111 ,开放IRQ3,即COM2的中断请求*/
outportb(0x21,t);
setvect(0x0b,char_proc);
enable(); /*开中断*/
while(flag){}
setvect(0x0b,mode);
中断服务程序如下:
void interrupt far char_proc(){
buf = inportb(03f8);
if(strcmp(buf,\'@\')==0)
flag=0;
putchar(buf);
outportb(0x20,0x20);
}
就可以进行字符的发送与接收了。
页:
[1]