2.Hướng dẫn sử dụng chương trình

Một phần của tài liệu Giao tiếp máy tính qua các cổng (Trang 37 - 57)

Để có thể chạy được chương trình giao tiếp máy tính qua cổng ta cần phải có môi trương DOS thật.Môi trường DOS thật này ta có thể tạo bằng cách boot trực tiếp từ đĩa,hoặc chạy trên nền DOS có sẵn trên Window98.Ta phải lựa chọn môi trường làm việc cho chương trình như vậy vì để xây dựng chương trình này ta dã sử dụng các hàm :inportb();ouportb() của thư viện DOS.h các hàm này chỉ chạy dược trong môi trường DOS thật.

2.2.Hướng dấn sử dụng chương trình

Giao diện của chương trình rất đơn giản,người dùng có thể quan sát trên đó để thao tác rất dẽ dàng

-Chọn giao tiếp bằng COM ấn C -Chọn giao tiếp bằng LPT ấn L -Chọn chức năng chat ấn T

Trong chức năng trao đổi File giữ liệu

-Chọn vai trò Master để tuyền ấn M -Chọn vai trò Slave để nhận ấn R

Bạn cần phải nhạp đúng phím chức năng.Nếu một máy đã chọn chức năng Master thì máy còn lại phải chọn chức năng Slave.

-khi chương trình hoạt động có các yêu cần hiển thị rõ ràng người dùng có thể thao tác theo các yêu cầu đó ví dụ như một số yêu cầu sau:

Báo lỗi khi bạn nhập phím chức năng sai.Bạn ấn C để nhập lại và phím bất kì để thoát.

Yêu cầu nhập tên File để lưu trữ dữ liệu nhận được

Yêu cầu nhập tên File cần truyền.Tên File cần truyền bao gồm cả đường dẫn cụ thể đến File đó.

Nếu Bạn nhập tên một File không tồn tại học lỗi ...thì máy báo và yêu cầu bạn nhập lại.Bạn hãy ấn C để nhập lại và phím bất kì để thoát.

-Trong chức năng chat yêu ccầu người dùng chọn cổng để chat và vai trò trong cuộc nói chuyện là Master hay Slave.Thực chất cách chọn này chỉ là để quyết định ai sẽ chat trước(Master sẽ chat trước).Ban cần phải nhập đúng phím chức năng và thực hiện đúng vai trò trong cuộc chat của mình.

Bạn ấn M để chọn chức năng Master,ấn S để chọn chức năng Slave.Nếu một người đã chọn Master thì người còn lại phải chọn Slave.

Còn một số chức năng khác của chương trình không thể liệt kê hết ra đây, bạn có thể thao tác theo các Menu rất trực quan trong chương trình.

3.Kết luận

Trong một thời gian ngắn đồng thời phải tìm hiểu nhiều vấn đề như ngôn ngữ lập trình,cấu trúc máy tính...nên trong thời gian thực hiện đề tài này chúng em đã gặp không ít khó khăn.Tuy nhiên, với sự giúp đỡ tận tình của thầy giáo hướng dấn cùng với sự trợ giúp đắc lực của Internet với nguồn tài liệu tiếng anh phong phú,các kinh nghiệm học hỏi trên các diễn đàn đã giúp chúng em hoàn thành đề tài này.

Qua đề tài này ngoài những hiểu biết về ngôn ngữ lập trình C,chúng em đã trang bị cho mình một vốn kiến thức nhất định về cấu trúc máy tính đặc biệt là các loại cổng giao tiếp,nhưngx kĩ năng về dịch thuật,tra cứu tìm kiếm các tài liệu...Chúng em xin cảm ơn thầy giáo hướng dẫn cùng tất cả những ngưòi bạn đã giúp chúng em hoàn thành đề tài này.

PROGRAM CODE #include<conio.h> #include<alloc.h> #include<process.h> #include<dos.h> #include<stdio.h> #include<ctype.h> #define dport 0x378

#define sport dport+1

#define cport dport+2

#define COM1BASE 0x3f8

#define COM2BASE 0x2f8

#define TXDATA COM1BASE

#define LCR COM1BASE+3

#define LSR COM1BASE+5

#define CTM COM1BASE+4

#define STM COM1BASE+6

typedef struct list1 {

int value;

struct list1 *next; }list; list *p,*fpl; int temc,tems,testm,tests,c,charac,i,k,nibble,hnibble,lnibble,byte,cts,rts; int nibblet[2];nibbler[2];stop[2]; long j,count; char fn[50],fnr[50],fnt[50]; FILE *fp,*fpt,*fpr; void translpt(); void transdata(); (adsbygoogle = window.adsbygoogle || []).push({});

void trans_character(int c);

int recieve_character(); void receivelpt(); int receivechar(); int receivecharac(); void receivecom(); void receivedata();

void readfile(char fn[50]);

void send_file();

void receive_file();

void setup_serial();

void send_character(int ch);

int get_character();

void transcom(int c);

void receive(); void menuchat(); void menuchatcom(); void menuchatlpt(); void menu(); void menucom(); void menulpt(); void comchat(); void lptchat();

void sendchat(); void sendchatc(); void recievechat(); void recievechatc(); void masterchat(); void masterchatc(); void slavechat(); void slavechatc(); void chat(); void LPT(); void COM(); void main() { clrscr(); menu(); redomain:fflush(stdin); switch(tolower(getch())) { case 'l':LPT(); case 'c':COM(); case 't':chat(); default: {

printf("\nBAN DA NHAP SAI PHIM CHUC NANG-HAY AN C DE NHAP LAI"); if(tolower(getch())=='c') goto redomain; else exit(1); } } //getch(); } /*---*/ /*---chuong trinh chinhLPT---*/ //Do truyen theo che do Nibble(dung 4 chan status de nhan du lieu vao) //nen moi lan truyen ta chi truyen duoc 4 bit.Khi truyen mot tep Text //ta chia mot ki tu=1Byte thanh 2 Nibble va truyen lien tiep 2 Nibble //Ben may Slave cung nhan lien tiep 2 Nibble va ghep lai thanh 1Byte

void LPT() {

clrscr(); menulpt();

redomainlpt:fflush(stdin);

switch(tolower(getch()))//Bien moi ki tu ve dang ki tu thuong {

case 'r':receivedata();

case 't':transdata();

default://Kiem soat loi bam nham phim {

printf("\nBAN DA NHAP SAI PHIM CHUC NANG-HAY AN C DE NHAP LAI"); if(tolower(getch())=='c') goto redomainlpt; else exit(1); } } getch();

exit(0); }

/*---Ham truyen du lieu hoan chinh---*/

void transdata() {

translpt();

printf("\nBan co muon doc File vua nhan khong\n<C/K>\n"); fflush(stdin); switch(tolower(getch())) { case 'c': readfile(fnt); default:exit(1); } }//End of Transdata

/*---Ham truyen ki tu duoc doc tu File qua Dataport---*/

void translpt() {

clrscr();

//Doc ten File tu ban phim

redo:printf("\nNhap ten File ban muon gui:\n"); gets(fnt); (adsbygoogle = window.adsbygoogle || []).push({});

fpt=fopen(fnt,"rt");

if(fpt==NULL) {

printf("\nFile khong truy nhap duoc");

printf("\nBan co muon doc File khac khong\n(C/K)\n"); fflush(stdin);

switch(tolower(getch())) {

case'c':goto redo; case'k':exit(1); }//end switch }//end if

//Bat dau doc ki tu tu File de truyen temc=inportb(cport);

temc=temc|1; //Strobe=1

outportb(cport,temc);//bat tay luc ban dau dua erro of slave=0

printf("\nDang cho truyen du lieu---\n");

while((c=getc(fpt))!=EOF)//Chua ket thuc File {

printf("%c",c); trans_character(c);

}//End While chu trinh truyen Nibble chinh fclose(fpt);//Dong File vua truyen

//Truyen them ki tu 26 de bao ket thuc truyen

//Ta chon ki tu 26 lam ki tu ket thuc truyen vi khi doc tep //neu gap ki tu 26 hoac cuoi tep thi ta moi nhan duoc

//ma EOF do do trong tep MASTER dang truyen khong the //co ki tu 26 Chi khi nao ket thuc tep moi co

trans_character(26);

//Reset lai sport cua may slave de phuc vu cho qua trinh truyen lan sau temc=inportb(cport);

temc=temc|1; //Strobe=1

outportb(cport,temc);//reset Slave dua erro of Slave =0

printf("\nDa truyen xong---\n"); }//end of translpt

void trans_character(int c) {

nibblet[0]=c>>4;//Nibble cao nibblet[1]=c&15;//Nibble thap

for(i=0;i<2;i++)//Truyen lien tiep 2 Nibble cua 1 byte {

temc=inportb(cport);

temc=temc&14; //strobe=0 tems=inportb(sport);

tems=tems&8;

while(tems!=8) //cho nhan tin hieu free tu may slave {

tems=inportb(sport); tems=tems&8;

} (adsbygoogle = window.adsbygoogle || []).push({});

outportb(dport,nibblet[i]);//gui nibble

outportb(cport,temc);//gui tin hieu bao co nibble dua erro of slave=1 temc=inportb(cport);

temc=temc|1;

tems=inportb(sport); tems=tems&8;

while(tems!=0)//cho nhan tin hieu bao da nhan dc nibble cua may slave {

tems=inportb(sport); tems=tems&8;

}

outportb(cport,temc);//hoi co tiep tuc nhan nibble hay khong }//End of for

}//End trans_character

/*---Ham nhan du lieu hoan chinh---*/

void receivedata() {

receivelpt();

printf("\nBan co muon doc File vua nhan khong\n<C/K>\n"); fflush(stdin); switch(tolower(getch())) { case 'c': readfile(fnr); default:exit(1); } }//End of Receivedata

/*---Ham nhan du lieu tu Status port va ghi vao File---*/

void receivelpt() {

clrscr();

//Doc ten File luu tru du lieu nhan duoc tu ban phim

redo1:printf("\nBan hay nhap ten File luu tru du lieu vua nhan\n"); fflush(stdin);

gets(fnr);

fpr=fopen(fnr,"wt");

if(fpr==NULL) {

printf("\nLoi khong ghi duoc");

printf("\nBan co muon luu vao File khac khhong\n<C/K>\n"); fflush(stdin);

switch(tolower(getch())) {

case 'c':goto redo1; case 'k':exit(1); } }//End of if temc=inportb(cport); temc=temc&14;

outportb(cport,temc); //bat tay ban dau charac=100;

printf("\ndang cho nhan du lieu---\n");

while(charac!=26)

//Chua gap ki tu 26 bao ket thuc tu may Master thi tiep tuc nhan //Ta chon ki tu 26 lam ki tu ket thuc truyen vi khi doc tep //neu gap ki tu 26 hoac cuoi tep thi ta moi nhan duoc

//ma EOF do do trong tep MASTER dang truyen khong the //co ki tu 26 Chi khi nao ket thuc tep moi co (adsbygoogle = window.adsbygoogle || []).push({});

{

charac=recieve_character();

fputc(charac,fpr); //Ghi Byte nay vao File

printf("%c",charac); //In len man hinh khi tu vua nhan duoc

}//End while xong chu trinh nhan du lieu tu Sport va ghi vao File fclose(fpr);//Dong File vua luu tru

temc=inportb(cport);

temc=temc|1; //Strobe=1=>Dat lai Error of slave=0

outportb(cport,temc); //Reset lai Master printf("\nDa nhan xong du lieu---\n"); }//end of receive

/*---Ham nhan mot ki tu tu may Master---*/

int recieve_character() {

charac=100;

for(i=0;i<2;i++) //Nhan lien tiep 2 Nibble sau do ghep lai thanh Byte

{

temc=inportb(cport);

temc=temc|1; // strobe=1 tems=inportb(sport);

tems=tems&8; //kiem tra Error=1?

while(tems!=8) //cho nhan tin hieu bao co Nibble {

tems=inportb(sport); tems=tems&8;

} //Da co Nibble

tems=inportb(sport); //doc 5 bit cao tu sport

tems=tems^128; //dao bit cao nhat vi chan vao ung voi bit nay bi dao

nibbler[i]=tems>>4; //day 5 bit cao cua sport thanh 4 bit thap outportb(cport,temc); //gui tin hieu bao da nhan duoc nibble

temc=inportb(cport);

temc=temc&14; //dua Strobe ve khong tems=inportb(sport);

tems=tems&8; //Kiem tra bit thu 5 ten sport<- >chan Error

while(tems!=0) //cho nhan tin hieu hoi nhan nibble {

tems=inport(sport); tems=tems&8;

} //end while

outportb(cport,temc); //gui tin hieu bao tiep tuc nhan }//End of for

hnibble=nibbler[0]<<4; //Day 4 bit thap nhan tu Sport thanh cao (adsbygoogle = window.adsbygoogle || []).push({});

lnibble=nibbler[1];

byte=hnibble|lnibble; //Ket hop 2 bit thanh mot Byte

return byte; //tra gia tri cua ham ve Byte vua nhan duoc

}//End of receive_character

/*---*/ /*---Chuong trinh chinh giao tiep qua cong COM---*/ //Chuong trinh nay truyen nhan lan luot cac ki tu gia hai may

//Trong qua trinh truyen giua cac ki tu thi co su bat tay"hoi-dap" //Chinh nho co su bat tay nay ma tranh duoc viec chong bit

//Tuong tu chuong trinh LPT ta chon ki tu 26 lam dau hieu ket thuc

void COM() { clrscr(); setup_serial(); menucom(); redomaincom:fflush(stdin); switch(tolower(getch())) { case 'r':receive_file(); case 't':send_file(); //case 's':set_baurate(); default: {

printf("\nBAN DA NHAP SAI PHIM CHUC NANG - HAY AN C DE NHAP LAI\n"); if(tolower(getch())=='c')

goto redomaincom; }

}

getch();

}//End main Com

/*---Ham cai dat toc do cho cong com---*/ //Voi ham nay ta co the dat toc do Baud rate bat ki cho cong com

//Tuy nhien do ta trao doi co bat tay nen viec cai dat khong can thiet lam

//Ta chon mot che do mac dinh la Baud rate=9600 <=>so chia=12=0x0c

void setup_serial() { outportb(LCR,0x80); outportb(TXDATA,0x0c); outportb(TXDATA+1,0x00); outportb(LCR,0x0a); }//End setup

/*---Ham gui mot ki tu ra thanh ghi TXDATA---*/

void send_character(int ch) {

char status; do

{

} while (status!=0x40); outportb(TXDATA,ch); }//End send_character

/*---Ham gui mot ki tu cho may SLAVE qua thanh ghi TXDATA---*/

void transcom(int c) {

cts=inportb(STM)&16;

rts=inportb(CTM)&253;//Dua rts=0

outportb(CTM,rts); //Bat tay ban dau

while(cts!=16) //cts=0 may Slave chua Free cts=inportb(STM)&16;

send_character(c); //Truyen ki tu len bo dem rts=inportb(CTM)|2; //Dua rts=1

outportb(CTM,rts); //Bao da co Data cts=inportb(STM)&16; (adsbygoogle = window.adsbygoogle || []).push({});

rts=inportb(CTM)&253;//Dua rts=0

while(cts!=0) //cts=1 may Slave chua bao nhan duoc data cts=inport(STM)&16;

outportb(CTM,rts); //Hoi co nhan tiep khong }//End transcom

/*---Ham nhan mot ki tu tu thanh ghi TXDATA---*/

int get_character() { int status; do { status=inportb(LSR)&0x01; }while(status!=0x01); return(inportb(TXDATA)); }

/*---Ham nhan mot ki tu tu may Master---*/

int recievechar() {

cts=inportb(STM)&16;

rts=inportb(CTM)|2; //Dat rts=1

outportb(CTM,rts); //Bao da san sang nhan

while(cts!=16) //cts=0 may Master chua gui data den cts=inportb(STM)&16;

c=get_character(); //Nhan ki tu tu bo dem cts=inportb(STM)&16;

rts=inportb(CTM)&253;//Dat rts=0

outportb(CTM,rts); //Bao da nhan duoc data

while(cts!=0)//cts=1 chua nhan duoc tin hieu hoi lai cua Master cts=inportb(STM)&16;

return c; //tra ham ve gia tri ki tu vua nhan duoc }//End receivechar

/*---Ham nhan ki tu tu may MASTER va ghi vao File---*/

void receivecom() {

//Doc ten File luu tru du lieu nhan duoc tu ban phim

redo1:printf("\nBan hay nhap ten File luu tru du lieu vua nhan\n"); fflush(stdin);

gets(fnr);

fpr=fopen(fnr,"wt");

if(fpr==NULL) {

printf("\nBan co muon luu vao File khac khhong\n<C/K>\n"); fflush(stdin);

switch(tolower(getch())) {

case 'c':goto redo1; default:exit(1); }

}//End of if

printf("\nDang cho nhan du lieu---\n"); c=0;

//Nhan ki tu qua COM va ghi vao File

while((c=recievechar())!=26)//Chua gap ki tu ket thuc (adsbygoogle = window.adsbygoogle || []).push({});

printf("%c",c); //In ki tu vua nhan duoc de minh hoa fputc(c,fpr); //Ghi ki tu nhan duoc vao File

fclose(fpr);

printf("\nDa nhan xong du lieu---\n"); }//End receivecom

/*---Ham gui mot File hoan chinh qua cong COM---*/

void send_file() { int c; FILE *fpt; char fnt[50]; clrscr();

//Doc ten File tu ban phim

redo:printf("\nNhap ten File ban muon gui:\n"); gets(fnt);

fpt=fopen(fnt,"rt");

if(fpt==NULL) {

printf("\nFile khong truy nhap duoc");

printf("\nBan co muon doc File khac khong\n(C/K)\n"); switch(getch())

{

case'c':goto redo; default:exit(1); }//end switch } //end if

printf("\nDang cho truyen du lieu---\n"); //Doc ki tu tren file va truyen qua COM

while((c=getc(fpt))!=EOF) {

transcom(c);

printf("%c",c);//in len man hinh de minh hoa }

transcom(26);//Truyen ki tu bao hieu ket thuc

printf("\nDa truyen xong---\n"); //Doc lai File vua gui de kiem tra

printf("\nBan co muon doc File vua nhan khong\n<C/K>\n");

Một phần của tài liệu Giao tiếp máy tính qua các cổng (Trang 37 - 57)