pc.c
来自「PC机与51的通信程序」· C语言 代码 · 共 114 行
C
114 行
#define IMASKREG 0x21 //系统中断控制器
#define ICREG 0x20 //中断命令寄存器
#define EOI 0x20 //中断结束命令字
#include<stdio.h>
#include<dos.h>
unsigned int portf,port;
unsigned int m;
unsigned int n;
unsigned int portaddr;
unsigned int reg;
unsigned char b=0,iir,ier,lcr,mod,msb,lsb;
void interrupt(* vect_com)();
void init(void);
void closeinit(void);
void get(void);
void interrupt receiver(void);
void main()
{
get();
init();
while(1)
{
printf("input the number of the data you want to reccive(q to exit): ");
if(scanf("%ud",&n)!=1)
{
closeinit();
exit(1);
}
printf("send low byte......\n");
outportb(portaddr+0,(unsigned char)(n&0x00ff));
while((inportb(portaddr+2)&0x07)!=2);
printf("send hight byte......\n");
outportb(portaddr+0,(unsigned char)(n>>8));
while((inportb(portaddr+2)&0x07)!=2);
printf("begining to reccive********\n");
while(n>0);
printf("receive end********\n\n\n\n");
}
}
void get(void)
{
printf("input the port: ");
scanf("%ud",&port);
portaddr=peek(0x40,port*2);
portf=(port==0)?4:3;
}
void init(void)
{
vect_com=getvect(portf+8);
disable();
lcr=inportb(portaddr+3);
outportb(portaddr+3,0x80);
lsb=inportb(portaddr+0);
msb=inportb(portaddr+1);
outportb(portaddr+0,0x0c);
outportb(portaddr+1,0x00);
outportb(portaddr+3,0x03);
mod=inportb(portaddr+4);
outportb(portaddr+4,mod|0x08);
iir=inportb(portaddr+2);
ier=inportb(portaddr+1);
outportb(portaddr+1,0x01);
outportb(IMASKREG,inportb(IMASKREG)&(~(0x01<<portf)));
setvect(portf+8,receiver);
enable();
}
void closeinit(void)
{
disable();
outportb(portaddr+3,0x80);
outportb(portaddr+0,lsb);
outportb(portaddr+1,msb);
outportb(portaddr+3,lcr);
outportb(portaddr+4,mod);
outportb(portaddr+2,iir);
outportb(portaddr+1,ier);
outportb(IMASKREG,inportb(IMASKREG)|0x10);
enable();
setvect(portf+8,vect_com);
}
void interrupt receiver(void)
{
if(n>0)
{
if(b==0)
{
m=(m&0xff00)|(unsigned int)inportb(portaddr+0);
b=1-b;
}
else
{
m=(m&0x00ff)|((unsigned int)inportb(portaddr+0)<<8);
b=1-b;
printf("%ud\n",m);
}
n--;
}
outportb(ICREG,EOI);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?