📄 001.c
字号:
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define BUFFLEN 1024
void InitCOM();
void OpenPort();
void ClosePort();
void interrupt far asyncint();
/*中断向量:用于保存中断现场*/
void interrupt(*asyncoldvect)();
unsigned char Buffer[BUFFLEN];
int buffin=0;
int buffout=0;
/*unsigned char ch;*/
/*COM1产生的硬件中断号为IQR4,对应的中断向量为为0CH*/
/*打开COM1函数*/
void OpenPort()
{
unsigned char ucTemp;
InitCOM(); /*初始化串口*/
/*读入由参数给定的中断向量值,并将它作为中断函数的远地址*/
asyncoldvect=getvect(0x0c);
disable(); /*关中断*/
inportb(0x3f8);
inportb(0x3fe);
inportb(0x3fb);
inportb(0x3fa);
outportb(0x3fc,0x08|0x0b);
ucTemp=inportb(0x21)&0xef;
outportb(0x21,ucTemp);
setvect(0x0c,asyncint);
enable();
}
/*接受数据函数*/
unsigned char read_char(void)
{
unsigned unch;
if(buffout!=buffin)
{
unch=Buffer[buffout];
buffout++;
if(buffout>=BUFFLEN)
buffout=0;
printf("%c",unch);
return(unch);
}
else
return(0xff);
}
/* send char 发送字符函数 */
void send_char(unsigned char unch)
{
while ( ((inp( 0x3f8 + 5)) & 0x40 ) == 0); /*和0x40相与 可取出D6位进行判断*/
outportb(0x3f8 , unch);
}
/*中断函数*/
void interrupt far asyncint()
{
Buffer[buffin++]=inport(0x3f8);/*读取字符到缓冲区*/
if(buffin>=BUFFLEN)
buffin=0;
outportb(0x20,0x20);
}
/*串口的初始化函数*/
void InitCOM()
{
outportb(0x3fb,0x80);/*设置波特率4800bps*/
outportb(0x3f8,0x18);
outportb(0x3f9,0x00);
outportb(0x3fb,0x0b);/*设置数据发送格式 8个数据位,一个停止位,无校验*/
outportb(0x3fc,0x08|0x0b);/*设置modem*/
outportb(0x3f9,0x01);/*设置中断允许 */
}
/*关闭串口函数*/
void ClosePort(void)
{
disable();
outportb(0x3f9,0x00);
outportb(0x3fc,0x00);
outportb(0x21,inportb((0x21)&0x10));
enable();
setvect(0x0c,asyncoldvect);
}
/*以下为主函数*/
void main()
{
unsigned char unChar;
short bExit_Flag=0;
OpenPort(); /*打开串口*/
fprintf(stdout, "\n\nReady to Receive DATA\n"
"press [ESC] to quit...\n\n");
do {
if (kbhit())
{
unChar=getch();
/* Look for an ESC key */
switch (unChar)
{
case 0x1B: /*ESC的ASCII值为27*/
bExit_Flag = 1; /* Exit program */
break;
/*You may want to handle other keys here*/
}
if(!bExit_Flag)
send_char(unChar); /*发送键入的字符*/
}
unChar = read_char(); /*从缓冲区中读数*/
if (unChar != 0xff)
{
fprintf(stdout,"%c",unChar);
}
} while (!bExit_Flag);
ClosePort(); /*关闭串口*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -