社区
C语言
帖子详情
谁能用C语言编一个串口通信的程序,急!
dfsh
2001-11-20 11:09:49
谁能用C语言编一个串口通信的程序,急!重谢!
...全文
200
5
打赏
收藏
谁能用C语言编一个串口通信的程序,急!
谁能用C语言编一个串口通信的程序,急!重谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ranata
2001-11-21
打赏
举报
回复
帮你上升!
zhaoweidf
2001-11-21
打赏
举报
回复
去中国工控网找找那上有
gigix
2001-11-21
打赏
举报
回复
找SCUM
jerry921
2001-11-21
打赏
举报
回复
dos下用bc3.1编译,慢慢看吧。
jerry921
2001-11-21
打赏
举报
回复
#include <dos.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define RXD 0
#define TXD 0
#define LSB 0
#define MSB 1
#define IER 1
#define IIR 2
#define LCR 3
#define MCR 4
#define LSR 5
#define MSR 6
#define IERV 1
#define OUT2 0x08
#define ERTS 2
#define EDTR 1
#define EMPTY 0X20
#define READY 0X30
#define ICREG 0X20
#define IMASKREG 0X21
#define EOI 0X20
#define WAITCOUNT 5000
#define BUFFLEN 2048
#define ALTE 0X12
#define ALTQ 0X10
int port;
unsigned portaddr;
unsigned portf;
unsigned int baudtable[]={0x180,0xc0,0x60,0x30,0x18,0x0c,0x06};
unsigned char paritytable[]={0x08,0x18,0x00,0x28,0x38};
unsigned char buffer[BUFFLEN];//recv buf
int buffin=0;
int buffout=0;
int incount=0;
int outcount=0;
void interrupt(*vect_com)(...);
void putb(unsigned char ch)//write a char to the recvbuf
{
int temp;
temp=buffin;
if(++buffin==BUFFLEN)
buffin=0;
if(buffin!=buffout)
buffer[buffin]=ch;
else
buffin=temp;
};
unsigned char getb()//read a char from the recvbuf
{
if(buffout!=buffin)
{
if(++buffout==BUFFLEN)
buffout=0;
return(buffer[buffout]);
}
else
return(0xff);
};
unsigned char sender(unsigned char ch)
{
/*
int wait=0;
//get the line ready signal
for(wait=0;wait<WAITCOUNT;wait++)
if((inportb(portaddr+MSR)&READY)==READY)
break;
if(wait==WAITCOUNT)
return(0);
*/
while(!(inportb(portaddr+LSR)&EMPTY));//get the place ready signal
outportb(portaddr+TXD,ch);
outcount++;
return(1);
};
void interrupt receiver(...)
{
unsigned char ch;
ch=inportb(portaddr+RXD);
putb(ch);
incount++;
outportb(ICREG,EOI);
};
void SerInit(int baud,int datab,int stopb,int parity)
{
unsigned char lcr;
disable();
outportb(portaddr+LCR,0x80);
outportb(portaddr+LSB,baudtable[--baud]&0xFF);
outportb(portaddr+MSB,baudtable[baud]>>8);
lcr=paritytable[--parity];
lcr|=datab-5;
lcr|=(stopb-1)<<1;
outportb(portaddr+LCR,lcr);
enable();
};
void SerOpen(void)
{
vect_com=getvect(portf+8);
disable();
inportb(portaddr+RXD);
inportb(portaddr+MSR);
inportb(portaddr+LSR);
inportb(portaddr+IIR);
outportb(portaddr+IER,IERV);
outportb(portaddr+MCR,OUT2|ERTS|EDTR);
outportb(IMASKREG,inportb(IMASKREG)&(~(1<<portf)));
setvect(portf+8,receiver);
enable();
};
void SerClose(void)
{
disable();
outportb(portaddr+IER,0);
outportb(portaddr+MCR,0);
outportb(IMASKREG,inportb(IMASKREG)|(1<<portf));
enable();
setvect(portf+8,vect_com);
};
void Getportaddr(int port)
{
portaddr=peek(0X40,port*2);
portf=(port==0)?4:3;
};
void CmdLineHelp()
{
printf("usage: TERMINAL com baud datab stopb parity\n");
printf("com: 1=COM1,2=COM2\n");
printf("baud: 1=300bps,2=600bps,3=1200bps,4=2400bps,5=4800bps,6=9600bps,7=19Kbps\n");
printf("datab(data bits):5,6,7,8\n");
printf("stopb(stop bits):1,2\n");
printf("parity:1=odd,2=even,3=none,4=mark,5=space\n\n");
};
int CheckArgv(int port,int baud,int datab,int stopb,int parity)
{
if(port<1||port>2)
return(1);
if(baud<1||baud>7)
return(1);
if(datab<5||datab>8)
return(1);
if(stopb<1||stopb>2)
return(1);
if(parity<1||parity>5)
return(1);
return(0);
};
void main(int argc,char *argv[])
{
unsigned char key;
char echoflag=0;
if(argc<6)
{
printf("指定的参数个数不正确.\n");
CmdLineHelp();
exit(1);
};
if(CheckArgv(atoi(argv[1]),atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5])))
{
printf("命令行参数不正确.\n");
CmdLineHelp();
exit(1);
};
port=atoi(argv[1])-1;
if(peek(0x40,port*2)==0)
{
printf("无指定的串行口.\n");
CmdLineHelp();
exit(1);
};
Getportaddr(port);
SerInit(atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));
SerOpen();
printf("ALT+E 显示开/关 ALT+Q 结束\n");
printf("OK\n");
while(1)
{
if(kbhit())
{
key=getch();
if(!key)
{
key=getch();
if(key==ALTE)
echoflag=~echoflag;
if(key==ALTQ)
break;
}
else
{
if(echoflag)
putch(key);
if(!sender(key))
printf("(Time out!)");
};
};
key=getb();
if(key!=0xff)
putch(key);
if(key=='!'&&argc>=7)
{
FILE *thandle;
printf("\nbegin to send file %s\n",argv[6]);
if((thandle=fopen(argv[6],"rb"))!=NULL)
{
int mychar;
fseek(thandle,0,SEEK_SET);
while((mychar=fgetc(thandle))!=EOF)
{
delay(1);
if(echoflag)
putch(mychar);
if(!sender(mychar))
printf("(Time out!)");
}
}
fclose(thandle);
}
};
SerClose();
printf("%d char has been received\n",incount);
printf("%d char has been sended\n",outcount);
printf("\n\nOVER\n");
exit(0);
};
C语言
实现串行通信接口
程序
论文
C语言
实现串行通信接口
程序
论文!!!! 好的论文!! 下后加分呀!!
串口通信
(内含完整的
C语言
代码)
串口通信
(内含完整的
C语言
代码)
C语言
做串口通讯
程序
C语言
做串口通讯
程序
C语言
做串口通讯
程序
两个单片机之间实现
串口通信
c语言
开发
两个单片机之间实现
串口通信
c语言
开发
51
串口通信
c语言
程序
51
串口通信
c
程序
···············
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章