?? pc.c
字號:
#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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -