MỤC LỤC
CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI 1
CHƯƠNG 2 CẤU TRÚC KĨ THUẬT CỦA CÁC LOẠI GIAO DIỆN 4
A.CẤU TRÚC GIAO DIÊN SONG SONG LPT
1.Giới thiệu chung về giao diện LPT 4
2.Cấu trúc giao diện LPT chuẩn Standard 4
2.1.Cấu trúc -Chức năng 4
2.2.Thông số kĩ thuật 8
3.Một số chuẩn khác của giao diện LPT 8
3.1.Chuẩn Bi-direction 8
3.2.Chuẩn EPP 8
3.3.Chuẩn ECP 10
B.CẤU TRÚC GIAO DIỆN NỐI TIẾP RS-232(COM)
1.Giới thiệu chung về giao diện RS-232 14
2.Cấu trúc giao diện RS-232 14
2.1.Cấu trúc-Chức năng 14
2.2.Thông số kĩ thuật 15
3.Phương thức truyền thông trong RS-232 16
4.Các thanh ghi trong giao diện RS-232 17
C HƯƠNG 3 LẬP TRèNH CHO CÁC LOẠI GIAO DIỆN 22
A.LẬP TRèNH TRAO ĐỔI DỮ LIỆUCHO LPT
1.Thủ thuật phần cứng 22
2.Lập trỡnh 22
2.1.Giải thuật 24
2.2.Công cụ lập trỡnh 25
2.3.Mó hoá chương trỡnh 25
B.LẬP TRèNH TRAO ĐỔI DỮ LIỆU CHO RS-232
1.Thủ thuật phần cứng 29
2.Lập trỡnh 29
2.1.giải thuật 29
2.2.Mó hoá chương trỡnh 29
C.LẬP TRèNH CHO CHỨC NĂNG CHAT GIỮA HAI MÁY
1.Giải thuật 32
2.Lập trỡnh 33
CHƯƠNG 4 KẾT LUẬN HƯỚNG PHÁT TRIỂN
1.Kết quả đạt được-Hướng phát triển 35
2.Hướng dẫn sử dụng chương trỡnh 37
3.Kết luận 38
PHỤ LỤC
1.Code chương trỡnh 39
2.Tài liệu tham khảo 56
57 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1712 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Giao tiếp máy tính qua các cổng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ứng điện ỏp của bộ đệm truyền(Slew rate) phải đạt lớn hơn 30v trờn một micrụ giõy.
Cỏp truyền của RS-232 cho phộp dài hơn LPT nhưng khụng được quỏ dài
3.Phương thức truyền thụng
3.1 Phương thức truyền tuần tự cỏc bit dữ liệu
Khỏc với giao diện song song việc truyền cỏc bit dữ liệu được truyền đồng thời,trong giao diện nối tiếp cỏc bit dữ liệu được truyền tuần tự.Về phương diện kỹ thuật phương phỏp truyền tuần tự cú hai cỏch là truyền đồng bộ(Synchronous) và truyền khụng đồng bộ(Ansynchronous).Chuẩn RS-232 sử dụng phương phỏp truyền khụng đồng bộ.
Hỡnh 2.2.Truyền đồng bộ
Hỡnh 2.3.Truyền khụng đồng bộ
Như đó thấy trờn hỡnh minh hoạ,phương phỏp truyền khụng đồng bộ tự tạo ra xung đồng hồ cho mỡnh bằng cỏch đưa vào cỏc bit đỏnh dấu bắt đầu và kết thỳc một Byte dữ liệu.Bộ truyền gửi một bit Start=0 cho bộ nhận để bỏo một quỏ trỡnh truyền một Byte dữ liệu mới,tiếp đú bộ truyền truyền tuần tự cỏc bit dữ liệu dưới dạng mó ASCII,rồi đến một bit chẵn lẻ và kết thỳc là một bit 1,1.5 hoặc 2 bit mức cao để bỏo dừng 1 Byte.Chớnh vỡ đặc trưng của phương phỏp này nờn cả bộ truyền và bộ nhận phải được đặt ở cựng một khoảng thời gian bit
3.2 Tốc độ Baud
Như ta đề cập ở phần trờn trong một chu kỡ truyền tuần tự một Byte dữ liệu ngoài cỏc bit mang dữ liệu thỡ quỏ trỡnh truyền cần phải sử dụng thờm cỏc bit như:Bitkhởi đầu,bit kết thỳc, bit chẵn lẻ …chớnh vỡ thế tốc độ truyền cỏc bit khỏc với tốc độ truyền một Byte dữ liệu.
Vớ dụ:Ta dựng thờm 3 bit thi nếu ta truyền 10 kớ tự trong 1giõy nghĩa là ta truyền được 110 bit trong một giõy nhưng nếu ta chỉ tớnh theo số bit dữ liẹu truyền được thỡ chỉ là 80bit trong một giõy
Để phõn biệt giữa hai tốc độ này người ta đưa ra khỏi niệm tốc độ Baud là tốc độ liờn quan đến tốc độ mà cỏc phần tử mó hoỏ dữ liệu được sử dụng để diễn tả cỏc bit được truyền.
Lỳc đú ta cú thể tớnh được thời gian chờ giành cho mỗi bit trờn luụng truyền theo cụng thức sau:
Khoảng thời cho mỗi bit=1/tốc độ baud [s]
Như vậy nếu tốc độ baud càng cao thỡ thời gian chờ bit càng bộ dẫn đến khả năng bị chồng bit càng cao.
4.Cỏc thanh ghi của chuẩn RS-232
Đối với việc lập trỡnh giao tiếp truy xuất qua cổng thỡ một điều then chốt là nắm rừ địa chỉ cỏc thanh ghi và sơ đồ cỏc bit tương ứng giữa cỏc bit trờn cỏc thanh ghi và cỏc chõn trờn đầu nối.
RS-232 cú phương thức giao tiếp giữ liệu hoan toàn khỏc LPT nờn số lượng cỏc thanh ghi cũng như chức năng cỏc thanh ghi của RS-232 hoàn toàn khỏc của LPT.Trong cỏch đỏnh địa chỉ thỡ thường được đỏnh theo địa chỉ lệch so với địa chỉ cơ sở.Dưới đõy là địa chỉ cơ sở cho 4 cổng COM(Nếu như trờn bo mạch cú đủ)
Name
Address
IRQ
COM 1
3F8
4
COM 2
2F8
3
COM 3
3E8
4
COM 4
2E8
3
Bảng2.10. Địa chỉ cơ sở cỏc cổng Com
Trong chuẩn RS-232 cú tất cả 9 thanh ghi với địa chỉ và tờn gọi quốc tế được đưa ra dưới đõy:
Base Address
DLAB
Read/Write
Abr.
Register Name
+ 0
=0
Write
-
Transmitter Holding Buffer
=0
Read
-
Receiver Buffer
=1
Read/Write
-
Divisor Latch Low Byte
+ 1
=0
Read/Write
IER
Interrupt Enable Register
=1
Read/Write
-
Divisor Latch High Byte
+ 2
-
Read
IIR
Interrupt Identification Register
-
Write
FCR
FIFO Control Register
+ 3
-
Read/Write
LCR
Line Control Register
+ 4
-
Read/Write
MCR
Modem Control Register
+ 5
-
Read
LSR
Line Status Register
+ 6
-
Read
MSR
Modem Status Register
+ 7
-
Read/Write
-
Scratch Register
Bảng 2.11.Địa chỉ cỏc thanh ghi tớnh theo Base add
Chức năng của cỏc thanh ghi và cỏc bit trờn chỳng được nờu ra dưới đõy.Ta giữ nguyờn phần thuật ngữ tiếng anh để diễn đạt được trọn vẹn ý nghĩa, đối với chức năng nào liờn quan đến phần lập trỡnh ta sẽ giải thớch rừ hơn ở phần sau
Bit
Notes
Bit 7
Reserved
Bit 6
Reserved
Bit 5
Enables Low Power Mode (16750)
Bit 4
Enables Sleep Mode (16750)
Bit 3
Enable Modem Status Interrupt
Bit 2
Enable Receiver Line Status Interrupt
Bit 1
Enable Transmitter Holding Register Empty Interrupt
Bit 0
Enable Received Data Available Interrupt
Bảng 2.11.Interrupt Enable Register (IER)-Thanh ghi cho phộp ngắt
Bit
Notes
Bits 6 and 7
Bit 6
Bit 7
0
0
No FIFO
0
1
FIFO Enabled but Unusable
1
1
FIFO Enabled
Bit 5
64 Byte Fifo Enabled (16750 only)
Bit 4
Reserved
Bit 3
0
Reserved on 8250, 16450
1
16550 Time-out Interrupt Pending
Bits 1 and 2
Bit 2
Bit 1
0
0
Modem Status Interrupt
0
1
Transmitter Holding Register Empty Interrupt
1
0
Received Data Available Interrupt
1
1
Receiver Line Status Interrupt
Bit 0
0
Interrupt Pending
1
No Interrupt Pending
Bảng 2.12.Interrupt Identification Register (IIR)-Thanh ghi nhận dạng ngắt
Bits 6 and 7
Bit 7
Bit 6
Interrupt Trigger Level
0
0
1 Byte
0
1
4 Bytes
1
0
8 Bytes
1
1
14 Bytes
Bit 5
Enable 64 Byte FIFO (16750 only)
Bit 4
Reserved
Bit 3
DMA Mode Select. Change status of RXRDY & TXRDY pins from mode 1 to mode 2.
Bit 2
Clear Transmit FIFO
Bit 1
Clear Receive FIFO
Bit 0
Enable FIFO's
Bảng 2.13.First In / First Out Control Register (FCR)
Bit 7
1
Divisor Latch Access Bit
0
Access to Receiver buffer, Transmitter buffer & Interrupt Enable Register
Bit 6
Set Break Enable
Bits 3, 4 And 5
Bit 5
Bit 4
Bit 3
Parity Select
X
X
0
No Parity
0
0
1
Odd Parity
0
1
1
Even Parity
1
0
1
High Parity (Sticky)
1
1
1
Low Parity (Sticky)
Bit 2
Length of Stop Bit
0
One Stop Bit
1
2 Stop bits for words of length 6,7 or 8 bits or 1.5 Stop Bits for Word lengths of 5 bits.
Bits 0 And 1
Bit 1
Bit 0
Word Length
0
0
5 Bits
0
1
6 Bits
1
0
7 Bits
1
1
8 Bits
Bảng 2.14.Line Control Register (LCR)-Thanh ghi điều khiển đườngtruyền
Bit
Notes
Bit 7
Error in Received FIFO
Bit 6
Empty Data Holding Registers
Bit 5
Empty Transmitter Holding Register
Bit 4
Break Interrupt
Bit 3
Framing Error
Bit 2
Parity Error
Bit 1
Overrun Error
Bit 0
Data Ready
Bảng 2.15.Line Status Register (LSR)-Thanh ghi trạng thỏi đường truyền
Bit
Notes
Bit 7
Reserved
Bit 6
Reserved
Bit 5
Autoflow Control Enabled (16750 only)
Bit 4
LoopBack Mode
Bit 3
Aux Output 2
Bit 2
Aux Output 1
Bit 1
Force Request to Send
Bit 0
Force Data Terminal Ready
Bảng 2.16.Modem Control Register (MCR)-Thanh ghi điều khiển modem
Bit
Notes
Bit 7
Carrier Detect
Bit 6
Ring Indicator
Bit 5
Data Set Ready
Bit 4
Clear To Send
Bit 3
Delta Data Carrier Detect
Bit 2
Trailing Edge Ring Indicator
Bit 1
Delta Data Set Ready
Bit 0
Delta Clear to Send
Bảng 2.17.Modem Status Register (MSR)-Thanh ghi trạng thỏi modem
CHƯƠNG 3
LẬP TRèNH CHO CÁC GIAO DIỆN
A.LẬP TRèNH CHO GIAO DIỆN LPT
Như đó giới thiệu về cỏc chuẩn của giao diện LPT,Trong cỏc chế độ EPP,ECP,Bi-direction hỗ trợ đường truyền hai hướng trờn 8 chõn Data rất thuận tiện cho việc lập trỡnh.Ta cú thể trao đổi một lần 8 bit qua đương Data,song ta thấy rằng khụng phải bo mạch nào cũng hỗ trợ đủ hết cỏc chuẩn,Chỉ cú chuẩn Standard là chuẩn chung cú trờn tất cảc cỏc bo mạch.Vỡ thế để đảm bảo tớnh tương thớch cho mọi mỏy tớnh của phần mềm ta sẽ lựa chọn lập trỡnh cho cổng LPT ở chế độ Standard.
1. Thủ thuật phần cứng
Để giao tiếp mỏy tớnh với mỏy tớnh thỡ phải đảm bảo cho mỏy cả hai kkhả năng là truyền và nhận tớn hiệu.Mặt khỏc ta thấy rằng trong chế độ Standard
Thi 8 đưũng truyền Data,4 chõn Control chỉ là đường truyền dữ liệu một hướng(xuất ra),con 5 chõn trang thỏi(khối Status) thỡ cú khả năng nhận vào.Trong thực tế việc giao tiếp hai mỏy tớnh chỉ cần kiểm soỏt đựoc dũng dữ liệu vào,ra nờn ta khụng cần sử dụng hết cỏc chõn trạng thỏi cho mục đớch kiểm soỏt dữ liệu.Ta quyết định sẽ sử dụng bốn chõn trang thỏi để phục vụ cho việc nhận dữ liệu cũn một chõn cũn lại dựng cho quỏ trỡnh bắt tay giữa hai mỏy(Shake hand).Ta nối 4 chõn ứng vúi 4 bit cao nhất trờn thanh ghi trạng thỏi(11,10,12,13) ở một đầu cỏp truyền vào 4 chõn ứng với 4 bit thấp nhất của thanh ghi dữ liệu (2,3,4,5) ở đầu kia của cỏp truyền.Cũn chõn 15(Error) đựoc nối vào chõn 1(Strobe) trờn khối Control.
Bằng cỏch đấu lại cỏp truyền như trờn trong mỗi chu kỡ trao đổi dữ liệu ta cú thể trao đổi được 4bit .Đặc biệt nhờ ta sử dụng 2chõn Strobe(Control) và Error(Status) làm tớn hiệu bắt tay nờn tạo ra được sự bắt tay ”phần cứng” gữa cỏc chu kỡ truyền nờn sẽ trỏnh được việc “Chồng bit”giữa cỏc chu ki trao đổi dữ liệu
Trong khi thực hiện đấu nối lại cỏp truyền ta đó thực hiện đấu nối đối xứng, do đú nú cho phộp ta thực hiện truyền và nhận với cựng một đầu cỏp mà khụng phải thực hiện cắm lại cỏp khi thay đổi chức năng của mỏy.Như vậy vúi cỏch đấu cỏp như trờn ta đó tạo được một cỏp truyền hai chiều và ta khụng cần phải phõn biệt vai trũ Master,Slave theo cỏp truyền.Trong phần lập trỡnh ta chỉ quy định Master và Slave là để biểu thị mỏy đú đang truyền dữ liệu(Transformer) hay đang nhậnh dữ liệu(Reciever) chứ khụng hề mang một ý nghĩa nào khỏc.
Hỡnh 3.1.Sơ đồ đấu lại cỏp truyền
2. Lập trỡnh
2.1 giải thuật
Để tạo ra một chu kỡ truyền dữ liệu cú bắt tay phần cứng ta cú thể tiến hành theo cỏch truyền “hỏi đỏp giữa hai mỏy tớnh”.Ta quy ước mỏy truyền dữ liệu là mỏy Master,mỏy nhận dữ liệu là mỏy Slave:
2.2 Cụng cụ lập trỡnh
Ngụn ngữ lập trỡnh ta lựa chọn là ngụn ngữ lập trỡnh C.Đõy là một ngụn ngữ lập trỡnh hướng chức năng,khỏ dễ sử dụng và nú hỗ trợ việc lập trỡnh hệ thống tốt,là một ngụn ngữ đuợc lụa chọn nhiều cho việc lập trỡnh hệ thống và điều khiển.
Giao diện LPT thực hiện giao tiếp trực tiếp qua cỏc thanh ghi do đú khi thực hiện giao tiếp với mỏy tớnh thực chất ta thực hiện việc truy xuất vào cỏc thanh ghi để vào ra dữ liệu.Trong Ngụn ngữ lập trỡnh C hỗ trợ hai hàm cơ bản để truy xuất cỏc thanh ghi được xay dựng trong thư viện DOS.h:
-Hàm xuất một Byte lờn thanh ghi
void outportb(int portid,unsigned char value);
-Hàm đọc một Byte từ thanh ghi
unsigned char Inportb(int portid);
Trong đú cỏc đối:
-Portid là địa chỉ thanh ghi cần truy xuất
-Value là giỏ trị của Byte dữ liệu cần xuất lờn thanh ghi
Cụ thể cỏc thanh ghi mà ta sẽ truy xuất là:Thanh gi dữ liệuDataport(0x378h)
,thanh ghi trạng thỏi Status port(0x379h),thanh ghi điều khiển Control port
(0x3Ah).
Do trong quỏ trỡnh trao đổi dữ liệu ta phải liờn tục xử lớ cỏc bit nờn cỏc thủ thuật xử lớ bit là cần thiết.Trong C hỗ trợ ta một số toỏn tử xử lớ cỏc bit:
Phộp toỏn
í nghĩa
Vớ dụ
&
Phộp và(AND) theo Bit
a&b
|
Phộp hoặc(OR) theo Bit
a|b
^
Phộp loại trừ(XOR) theo Bit
a^b
<<
Dịch trỏi
a<<4
>>
dịch phải
a>>4
~
Lấy phần bự theo Bit
A~
2.3 Mó hoỏ chương trỡnh
Trờn cơ sở cỏc chu trỡnh truyền và nhận dữ liệu cơ bản ta sẽ thực hiện việc trao đổi dữ liệu giữa hai mỏy tớnh với dữ liệu là cỏc Byte,để minh hoạ cho quỏ trỡnh trao đổi này ta thục hiện trao đổi 1 File text(.txt)
Ta xử lý cỏc yờu cầu trờn bằng cỏc hàm ta xõy dựng cỏc hàm cỏ bản sau:
a)Xử lý bắt tay trong quỏ trỡnh truyền
Chu kỡ truyền
1.Mỏy Master kiểm tra chõn Error của Status port Error=1 =>Slave free
tems=inportb(sport) &8;
while(tems!=8)
tems=inportb(sport)&8;
2.Mỏy Master gửi dữ liệu
outportb(dport,nibble)
3.Mỏy Master gửi tớn hiệu bỏo cú dữ liệu xuất Strobe=1
temc=inportb(cprt)|1;
outportb(cport,temc) ;
4.Mỏy Master chờ tớn hiệu bỏo đó nhận Nibble từ Slave Error=0
tems=inportb(sport)&8;
while(tems!=0)
tems=inportb(sport)&8;
5.Mỏy Master hỏi Slave cú nhận tiếp khụng đưa Strobe=0
temc=inportb(cport) &14;
outportb(cport,temc);
Chu kỡ nhận
1.Mỏy Slave kiểm tra Error của Status port.Errorr=1 =>đó cú dữ liệu
tems=inportb(sport)&8;
while(tems!=8)
tems=inportb(sport)&8;
2.Mỏy Slave nhận dữ liệu.Do chõn Busy bị đảo nờn ta phải đảo lại bit cao nhất trờn Nibble nhận được.
tem =inportb(sport)^128;
Nibble=tem>>4;
3.Mỏy Slave bỏo đó nhận được dữ liệu,đưa Strobe=0;
temc=inportb(cport)&14;
outportb(cport,temc);
4.Mỏy Slave đợi tớn hiệu hỏi tiếp tục nhậnStrobe=0
tems=inportb(sport)&8;
while(tems!=0)
tems=inportb(sport)&8;
5.Mỏy Slave bỏo tiếp tục nhận đưa Strobe=1
temc=inportb(cport)|1;
outportb(cport,temc)
b)Hàm truyền một Byte cho mỏy Slave
void translpt(unsigned char c);
Để thực hiện hàm này do cỏch đấu nối cỏp truyền chỉ cho phộp mỗi lần truyền nhận 4 bit nờn ta phải tiến hành băm 1byte thành 4 bit cao và 4 bit thấp.Để truyền được qua 4 bit thấp trờn Data port ta phải biến cả hai thành 4 bit thấp,với quy ước là Nibble[0] =4bit cao bị đẩy và Nibble[1]=4bit thấp Nibble[0]=c>>4;Nibble[1]=c&15;
Ta sử dụng một vũng lặp 2 chu kỡ để truyền liờn tiếp 2 Nibble này
For(i=0;i<2;i++)
{truyền Nibble[i];}
c)Hàm nhận một Byte từ Status port
int receivelpt();
Do mỏy Master gửi 1Byte dưới dạng 2 Nibble trong hai chu kỡ của một vũng lặp nờn để nhận được Byte này ta sử dụng 1 vũng lặp hai chu kỡ để nhận liờn tiếp 2 Nibble sau đú ghộp lại
For (i=0;i<1;i++)
{Nhận Nibble[i];}
Byte=(Nibble[0]<<4)|Nibble[1];
d)Hàm truyền và nhận File
Trờn cơ sở hai hàm Translpt();và Receivelpt(); ta tiến hành truyền một File và nhận một File bằng cỏc hàm sau:
Void transfile()
{
while((c=getc(fp))!=EOF)
translpt(c);
trans(26) ;//truyền ký tự kết thỳc
}
Void receivefile()
{
While(c!=26)
c=receivelpt();
fputc(c,fp)//ghi len file
}
Tong quỏ trỡnh truyền nhận này ta sử dụng thờm một kớ tự phụ ngoài cỏc kớ tự của File làm dấu hiệu bỏo kết thỳc cho mỏy Slave là kớ tự c=26.Sở dĩ ta dựng kớ tự này vỡ trong hệ soan thảo văn bản của C,Pascal thi nú được dựng làm kớ tự kết thỳc File cũn trong DOS thỡ khụng cú kớ tự này trờn văn bản(mó kết thuc EOF=-1).Do đú trong khi ta cũn đọc File text khụng bao giờ ta gặp kớ tự này,ta sẽ dựng nú làm kớ tụ bổ sung bỏo hiệu kết thỳc quỏ trỡnh
B.LẬP TRèNH CHO GIAO DIỆN RS-232
1.Thủ thuật phần cứng
Tương tự như trong giao tiếp qua cổng LPT, đối với RS-232 ta cũng sử dụng thủ thuật bắt tay phần cứng bằng cỏch đấu lại cỏp truyền.Thực tế ta cú thể thực hiện giao tiếp giữa hai mỏy theo phương thức khụng cần bắt tay phần cứng giữa hai mỏy mà chỉ cần đặt hai mỏy ở cựng tốc độ Baud và thực hiện giao tiếp theo phương thức “Modem rỗng”,tuy nhiờn phương thức giao tiếp này khụng tối ưu nú cú thể gay nờn sự “chồng Bit” của cỏc Byte giữa cỏc lần giao tiếp.Ta đấu chõn RD của mỏy này vào chõn TD của mỏy kia để cú thể truyền nhận giữ liệu giữa hai mỏy, đấu CTS của mỏy này vào RTS của mỏy kia để tạo tớn hiệu bắt tay.
Sơ đồ đấu lại cỏp truyền
2.Lập trỡnh
2.1.Giải thuật
Để trỏnh sự chồng bit xảy ra ta sẽ sử dụng thủ thuật bắt tay phần cứng với giải thuật hỏi đỏp tương tự như đối với LPT.
2.2.Chương trỡnh
a)Xử lý bắt tay trong quỏ trỡnh truyền
Chu kỡ truyền
1.Mỏy Master kiểm tra chõn CTS.CTS=1 =>Slave free
CTS=inportb(STM) &16;
while(CTS!=16)
CTS=inportb(STM)&8;
2.Mỏy Master gửi dữ liệu
send_character(c);
3.Mỏy Master gửi tớn hiệu bỏo cú dữ liệu xuất RTS=1
RTS=inportb(CTM)|2;
outportb(CTM,RTS) ;
4.Mỏy Master chờ tớn hiệu bỏo đó nhận từ Slave CTS=0
CTS=inportb(STM)&16;
while(CTS!=0)
CTS=inportb(STM)&16;
5.Mỏy Master hỏi Slave cú nhận tiếp khụng đưa RTS=0
RTS=inportb(CTM)&253;
outportb(CTM,RTS);
Chu kỡ nhận
1.Mỏy Slave kiểm tra CTS tren STM.CTS=1 =>đó cú dữ liệu
CTS=inportb(STM)&16;
while(CTS!=16)
CTS=inportb(STM)&16;
2.Mỏy Slave nhận dữ liệu
get_character();
3.Mỏy Slave bỏo đó nhận được dữ liệu,đưa RTS=0;
RTS=inportb(CTM)&253;
outportb(CTM,RTS);
4.Mỏy Slave đợi tớn hiệu hỏi tiếp tục nhậnCTS=0
CTS=inportb(STM)&16;
while(CTS!=0)
CTS=inportb(STM)&16;
5.Mỏy Slave bỏo tiếp tục nhận đưa RTS=1
RTS=inportb(CTM)|2;
outportb(CTM,RTS) ;
b)Hàm cài đặt tốc độ Baud cho cổng
void setup_serial();
Với hàm này ta cú thể đặt lại tốc độ Baud với lựa chọn của ngưồi dựng,tuy nhiờn do ta tiến hành bắt tay phần cứng nờn việc cài đặt này khụng cũn mang nhiều ý nghĩa.Ta sẽ cài đặt mặc định Baud rate=9600 cho cả hai mỏy để đảm bảo thời gian bit trựng nhau
c)Hàm truyền và nhận cỏc kớ tự trờn bộ đệm
void send_character();
int get_character();
Do đặc trưng của RS-232 là truyền dữ liệu tuần tự nờn ta khụng thể truyền ngay một Byte hoặc nhận ngay một Byte.Ta tiến hành kiểm tra “Parity error bit” cho việc bắt đầu nhận và “Data ready bit” cho việc bắt đầu truyền 1 Byte
d)Hàm truyền và nhận một kớ tự giữa Master và Slave
void transcom(int c);
int receivecom();
e)Hàm truyền và nhận File
void send_file();
Truyền một File đọc từ Master sang Slave cộng với kớ tự bỏo kết thỳc 26
Void receive_ file ();
Nhận cỏc kớ tự từ Master và ghi vào một File trờn Slave
C.LẬP TRèNH CHO CHỨC NĂNG CHAT GIỮA HAI MÁY
1.Giải thuật
Trờn cơ sở cỏc chu kỡ truyền nhận qua cỏc cổng ta cú được giải thuật cho chức năng cho phộp 2 mỏy tớnh chỏt với nhau qua cỏc cổng.
2.lập trỡnh
với giải thuật trờn cho phộp chỳng ta go tcỏc kớ tự từ bàn phớm và gửi sang mỏy bờn kia qua cỏc cổng,tương tự như chương trỡnh chat để thực hiện giải thuật này ta thực hiện bằng cỏc hàm sau:
TấN HÀM
CHỨC NĂNG
Void chatlpt()
Chat qua cổng LPT
Void chatcom()
Chat qua cổng COM
Void sendchat()
Gửi một cõu thoại qua cổng LPT
Bấm Enter để kết thỳc
Void sendchatc()
Gửi một cõu thoại qua cổng COM Bấm Enter để kết thỳc
Void recievechat()
Nhận một cõu thoại qua cổng LPT
Void recievechatc()
Nhận một cõu thoại qua cổng COM
Void masterchat()
Chat qua LPT với vai trũ Master . Bấm Escape để kết thỳc
Void masterchatc()
Chat qua COM với vai trũ Master . Bấm Escape để kết thỳc
Void slavechat()
Chat qua LPT với vai trũ Slave . Bấm Escape để kết thỳc
Void slavechat()
Chat qua LPT với vai trũ Slave . Bấm Escape để kết thỳc
CHƯƠNG4
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI
1.Kết quả-hướng phỏt triển
1.1.kết quả đạt được
Sau một thời gian ngắn thực hiện đề tài chỳng em đó thu được những kết quả nhất định.Trước hết là những hiểu biết sõu hơn về lập trỡnh hệ thống bằng ngụn ngữ C,những hiểu biết về cấu trỳc của hai loại cổng LPT và COM.Xõy dựng được giải thuật giao tiếp giữa hai mỏy tớnh qua hai loại cổng trờn với sự bắt tay phần cứng khỏ tối ưu,trỏnh được mọi rắc rối của việc chồng bit dữ liệu mà cỏc giải thuật khụng cú bắt tay phần cứng khụng thể cú được.
Trờn cơ sở cỏc hiểu biết và giải thuật trờn chỳng em đó xõy dựng được chương trỡnh “Giao tiếp mỏy tớnh qua cổng”.Chương trỡnh đó đạt được yờu cầu về việc truyền nhận dữ liệu giữa hai mỏy tớnh mà cụ thể là cỏc File text(.txt).Với giải thuật truyền củ ta thỡ chương trỡnh thỡ cú thể phỏt triển để truyền nhận một Byte(kiểu char) ,2Byte(Kiểu int) hoặc là nByte bất kỡ trong một chu kỡ truyền nhận.Do đú chương trỡnh cú thể truyền dữ liệu bất kỡ miễn sao ta cú thể mó hoỏ dữ liệu thành cỏc bit nhị phõn.Ngoài ra,chương trỡnh cũn cú một tiện ớch nữa là cho phộp “chat” giữa hai may thụng qua cỏc cổng.
Do thời gian gấp rỳt nờn chương trỡnh này chỉ là một chương trỡnh cú tớnh minh hoạ cho kĩ thuật truyền dữ liệu qua cổng nờn nú cũn cú rất nhiều hạn chế,nú chưa phải là mụt chương trỡnh ứng dụng thực sự
1.2.Hướng phỏt triển
Về chương trỡnh cụ thể là chương trỡnh giao tiếp mỏy tớnh đó nờu ở trờn thỡ ta cú thể viết lại trờn cỏc ngụn ngữ như Visual Basic,Visual C... để biến nú thành một chương trỡnh ứng dụng thực sự cú thể chạy trong mụi trường Window
Trờn cơ sở những hiểu biết về cấu trỳc cỏc loại cổng cũng như cỏc phương thức truyờn dữ liệu khỏc nhau ,chỳng em đó cú một vốn kiến thức nhất định về giao tiếp giữa mỏy tớnh và thiết bị ngoại vi nờn cú thể ứng dụng rất nhiều vào chuyờn ngành điện tử của mỡnh.Ta cú thể sử dụng mỏy tớnh như một nguồn tớn hiệu điều khiển thiết bị,hay là biến mỏy tớnh thành một trung tõm xử lớ tớn hiệu...Từ đú ta cú thể xõy dưng cỏc hờ thống điện tử thụng minh dưới sự trợ giỳp của mỏy tớnh vớ dụ như hệ thống nhõn và xử lý tớn hiệu điều khiển từ đường dõy điện thoại để điều khiển thiết bị từ xa,hay là một hệ thống điều khiển từ xa cho mỏy tớnh,biến mỏy tớnh thành cỏc mỏy đo lường vớ dụ như một mỏy Oscillo,khối xử lý tớn hiệu số...
2.Hướng dẫn sử dụng chương trỡnh
2.1.Yờu cầu cấu hỡnh
Để 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 L để chọn chat qua LPT,ấn C để chọn chat qua COM.
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.
PHỤ LỤC
PROGRAM CODE
#include
#include
#include
#include
#include
#include
#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();
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(tolow
Các file đính kèm theo tài liệu này:
- 24794.doc