giao tiep spp

Màu nền
Font chữ
Font size
Chiều cao dòng

Giao tiếp máy tính

       Card giao tiếp và công suất là phần trung gian giữa máy tính và đối tượng điều khiển, dùng để truyền thông tin từ đối tượng lên máy tính hoặc truyền tín hiệu điều khiển từ máy tính xuống đối tượng

       Muốn hệ thống như hình bên hoạt đông thì cần thiết kế cả phần cứng lẫn phần mềm. Phần cứng là các mạch giao tiếp với máy tính thông qua 1 trong các con đường: cồng Com, USB, LPT, slot card….Phần mềm(driver) được viết bằng Pascal, C, C++, Delphi...

Cổng song song( Parallel Port) là tập hợp các đường tín hiệu mà vi xử lí dùng để trao đổi dữ liệu với các thiết bị, thành phần khác. Điển hình nhất của loại giao diện này là dùng để giao tiếp với máy in, modems, keyboards và màn hình,.. Cổng song song truyền nhiều bít một lần, trong khi cổng nối tiếp chỉ truyền một bít một ở một thời điểm ( nhưng có thể truyền 2 chiều ở cùng một thời điểm).

•       Cổng song song có tên như vậy bởi chúng có 8 hàng dữ liệu 1 bit (thành 1 byte) để chuyển đồng thời qua 8 dây dẫn kết nối. Và đây là cách chuyển dữ liệu truyền thống giữa máy in với máy tính 

•       Cùng với RS-232, cổng song song được xem là “workhorse” trong giao tiếp máy tính. Hiện nay, cổng song song đã ít được sử dụng nhưng vẫn còn phổ biến vì tính khả dụng và linh hoạt

Các đặc điểm:

•       Lập trình đơn giản

•       Dễ kết nối

•       Tốc độ nhanh

•       Tính chống nhiễu kém

Cau truc:

                Cổng song song có 25 chân chia làm 3 nhóm chính:

                * Nhóm thanh ghi điều khiển: Control

                * Nhóm thanh ghi trạng thái: Status

                * Nhóm thanh ghi dữ liệu: Data

                * Các chân còn lại nối mass

Addressing

          Cổng song song chuẩn sử dụng 3 thanh ghi kề nhau, thường là 1 trong 3 loại sau:

1/ 378h, 379h, 37Ah

2/ 3BCh, 3BDh, 3BEh

3/ 278h, 279h, 27Ah

                Địa chỉ đầu tiên là Base Address, là địa chỉ của Data register, địa chỉ thứ 2 là địa chỉ của Status register, cuối cùng là địa chỉ của Control register

Data register (D0-D7) lưu giá trị để đọc dữ liệu hoặc xuất dữ liệu

Status Register:

Status register lưu giá trị logic của các bit từ S3 đến s7

Bit S0,S1,S2 không xuất hiện trên connector. Status register là thanh ghi read-only

S0: timeout. Sử dụng trong chế độ EPP

S1: không sử dụng

S2: không sử dụng

S3:  nError. Mức thấp khi máy in phát hiện lỗi

S4: Select. Mức cao khi máy in đang làm việc

S5: PaperEmpty. Mức cao khi máy in hết giấy

S6: nAck. Mức thấp khi máy in đã nhận 1 ký tự

S7: Busy. Mức thấp khi máy in không thể nhận thêm ký tự mới 

Control Register:

Control register lưu giá trị của các bit C0,C1,C2,C3

Thông thường các bit này sử dụng như là ngõ ra. Nếu muốn read thì ta bật các bit này ở mức cao

Bit C4,C5,C6,C7 không xuất hiện trên connector

C0: nStrobe .Mức thấp cho truyền dữ liệu tới máy in

C1:  AutoLF.  Mức thấp để máy in tự động xuống dòng sau(ASCII code 0Ah) mỗi khi có kí tự xuống dòng( ASCII code 0Dh)

C2: nInit. Mức thấp để khởi động máy in, clear buffer

C3: nSelectIn. Mức thấp để chọn máy in

C4: enable interrupt request. Cho phép ngắt

C5: direction control. Điều khiển hướng của Data ports. Mức 0 cho output, 1 cho input. Không dùng cho chế độ SPP

C6: không sử dụng

C7: không sử dụng

Hoat dong:

Cổng SPP có 3 chế độ làm việc:

.Compatibility mode

.Nibble mode

.Byte mode

Compatibility mode là chế độ mặc định dùng để gửi dữ liệu từ PC đến thiết bị ngoại vi. PC ghi dữ liêu lên Data port, các bit Status và Control thực hiện các bước bắt tay rồi truyền dữ liệu đi

Handshaking

Quá trình bắt tay sử dụng 3 tín hiệu như là tín hiệu bắt tay để kiểm soát việc truyền dữ liệu.

Ngõ ra Busy của thiết bị ngoại vi báo cho PC khi nó đã sẵn sàng nhận dữ liệu.Ngõ ra nStrobe của PC báo cho thiết bị ngoại vi biết 1 byte đã sẵn sàng để được đọc trên Data lines. Khi thiết bị ngoại vi đọc 1 byte, nó sẽ gửi một xung nACK để báo cho máy tính rằng byte đã được nhận.

Đầu tiên SelectIn xuống mức thấp để PC  báo cho thiết bị ngoại vi là nó muốn giao tiếp. Thiết bị ngoại vi đáp lại bằng cách đưa Select lên mức cao. PC đọc thanh ghi trạng thái và thanh ghi điều khiển xác minh xem Select ở mức cao và Busy ở mức thấp chưa.

Khi tất cả đã OK. PC viết 1 byte lên Data (D0-D7)

Sau 1 delay ít nhất 0,75 µs, PC đưa nStrobe xuống mức thấp.

Xung thường rộng 1-5 micro giây, nhưng có thể nằm trong khoảng 0,75-500 micro giây. PC giữ D0-D7 ít nhất 0,75 µs sau khi nStrobe trở lại mức cao.

Tại cạnh xuống của nStrobe thiết bị ngoại vi đọc và lưu D0-D7 và đưa Busy lên cao để báo cho máy tính không gửi byte tiếp theo. Busy nên lên mức cao trong khoảng 0,5 µs sau khi nStrobe xuống mức thấp. Khi thiết bị ngoại vi đã lưu dữ liệu nó sẽ báo cho PC biết bằng cách cho nACK xuống mức thấp.

Các máy tính có thể sử dụng NACK như một ngắt để nói cho

máy tính viết byte tiếp theo lên đường dữ liệu. Khi thiết bị ngoại vi đã sẵn sàng để nhận được một byte, nó đưa Busy xuống thấp và truyền dữ liệu mới có thể bắt đầu.

*******Nibble mode cho phép thiết bị ngoại vi truyền các byte bằng cách truyền lần lượt 4 bit song song hay truyền 1 byte trong 2 nibble.

Máy tính sẽ đọc 1 byte bằng cách đọc 4 bit của thanh ghi trạng thái 2 lần.

PC đưa nAutoLF xuống 0 để báo rằng nó đã sẵn sàng để nhập nibble(4bit) đầu tiên từ thiết bị ngoại vi.

Thiết bị ngoại vi ghi dữ liệu vào S3,S4,S5,S7 và để S6 xuống 0 để báo rằng nibble đầu tiên đã sẵn sàng để được đọc.

PC đọc 4 bit dữ liệu và đưa nAutoLF lên 1 để báo rằng nó đã nhận được 4 bit. Thiết bị ngoại vi đưa S6 lên 1.

Khi PC đã sẵn sàng đọc nibble thứ 2 nó sẽ đưa nAutoLF xuống 0.

Thiết bị ngoại vi đặt 4 bit 4-7 lên S3,S4,S5,S7 và đưa S6 xuống thấp để báo rằng nibble tiếp theo đã sẵn sàng.

PC đọc 4 bit tiếp theo rồi đưa nAutoLF lên 1 để thông báo nó đã nhận được.

Sau khi đã gửi xong 1 byte (2 nibble) thiết bị ngoại vi sẽ đặt 4 bit trạng thái như sau:

S7: 1 nếu nó bận, 0 nếu nó không bận.

S3: 0 nếu 1 byte khác đã sẵn sàng, 1 nếu không có byte nào đã sẵn sàng để gửi.

S5: 1 cho đến khi PC yêu cầu 1 transfer.

Tách 1 byte thành 2 nibble

D[0] = (D[7:0] & 1) * 0x8

D[1] = (D[7:0] & 0x2) * 0x8

D[2] = (D[7:0] & 0x4) * 0x8

D[3] = (D[7:0] & 0x8) * 0x10

D[4] = (D[7:0] & 0x10) / 2

D[5] = (D[7:0] & 0x20) / 2

D[6] = (D[7:0] & 0x40) / 2

D[7] = (D[7:0] & 0x80)

LowNibble = D[0] + D[1] + D[2] + D[3]

HighNibble = D[4] + D[5] + D[6] + D[7]

Kết hợp lại 1 byte từ 2 nibble

D[0] = (LowNibble & 0x8) / 0x8

D[1] = (LowNibble & 0x10) / 0x8

D[2] = (LowNibble & 0x20) / 0x8

D[3] = (LowNibble & 0x80) / 0x10

D[4] = (HighNibble & 0x8) * 2

D[5] = (HighNibble & 0x10) * 2

D[6] = (HighNibble & 0x20) * 2

D[7] = (HighNibble & 0x80)

ByteRead = D[0] + D[1] + D[2] + D[3] + D[4] + D[5] + D[6] + D[7]

****** Byte mode

Byte mode truyền song song 8 bit một lần từ thiết bị ngoại vi đến PC.

Thiết bị ngoại vi viết 1 byte lên data port sau đó truyền sang PC mà không phải cắt ra thành 2 nibble rồi truyền lần lượt sang PC.

Để sử dụng byte mode thì PC phải có cổng dữ liệu 2 chiều và thiết bị ngoại vi phải cho phep viết 1 byte lên data line

Handshaking

PC đưa C5 lên 1 để cho phép hoạt động cổng hai chiều.

PC đưa C1 xuống 0 để cho biết là nó đã sẵn sàng nhận dữ liệu.

Thiết bị ngoại vi ghi dữ liệu lên data line D0-D7 và đưa S6 xuống 0.

PC đọc D0-D7 và đưa C1 lên 1. PC đưa C0 xuống 0 cùng lúc hoặc sau khi C1 lên 1.

Thiết bị ngoại vi đặt các bit trạng thái như sau:

S7: 1 nếu nó đang bận, 0 nếu không bận.

S3: 0 nếu có 1 byte khác đã sẵn sàng được gửi, 1 nếu không có byte nào sẵn sàng được gửi.

Thiết bị ngoại vi đưa S6 lên 1

PC đưa C0 lên 1 để báo rằng 1 byte đã được nhận

*******ECP - Extended Capabilities Port :

*        Được thiết kế bởi Hewlett Packard và Microsoft

*        Sử dụng phần cứng bổ sung để tạo ra các tín hiệu bắt tay giống như EPP, chạy ở tốc độ như nhau so với EPP

*        Sử dụng một bộ đệm FIFO để gửi/ nhận dữ liệu.

*        ECP có tính năng real time data compression, sử dụng Run Length Encoding để đạt tỷ lệ nén dữ liệu 64:1

Đặc trưng phần cứng ECP:

*        HostAck và PeriphAck chỉ ra các tín hiệu trên dòng dữ liệu là dữ liệu hay lệnh. Nếu chúng ở mức cao, dữ liệu được đặt trên data lines (pin 2-7).

*        Một chu kỳ lệnh có thể là RLE count hoặc một địa chỉ. Điều này được xác định bởi bit 7 của Data lines

RLE - Run Length Encoding::::

*        Giao thức ECP bao gồm một trình nén đơn giản gọi là Run Length Encoding. Nó có thể hỗ trợ nén tối đa 64:1 bằng cách gửi byte duy nhất lặp đi lặp lại và sao chép một trong những byte.

Ví dụ nếu muốn gửi một chuỗi 25 “A”, số byte bằng 24 sẽ được gửi đầu tiên, tiếp sau là các byte “A”. Các thiết bị ngoại vi nhận Count Length Run sẽ mở rộng các byte tiếp theo.

**RLE - Run Length Encoding   :

*        Giao thức ECP bao gồm một trình nén đơn giản gọi là Run Length Encoding. Nó có thể hỗ trợ nén tối đa 64:1 bằng cách gửi byte duy nhất lặp đi lặp lại và sao chép một trong những byte.

Ví dụ nếu muốn gửi một chuỗi 25 “A”, số byte bằng 24 sẽ được gửi đầu tiên, tiếp sau là các byte “A”. Các thiết bị ngoại vi nhận Count Length Run sẽ mở rộng các byte tiếp theo.

** Các thanh ghi trong ECP:

ECP's Extended Control Register (ECR):

*        Thanh ghi quan trọng nhất đối với ECP là ECR. Thanh ghi này thiết lập chế độ cho ECP, thêm trạng thái cho FIFO.

ECP's Extended Control Register (ECR):

*        3 bit quan trọng nhất của Extended Control Register sẽ lựa chọn chế độ hoạt động. Có 7 chế độ hoạt động

*        Khi cổng được thiết lập để hoạt động trong chế độ tiêu chuẩn, nó sẽ mang chức năng như một cổng SPP không truyền dữ liệu 2 chiều.

*                        Các bit khác của ECR cũng đóng vai trò quan trọng trong hoạt động của ECP port.

*        ECP Interrupt Bit (bit 4) cho phép sử dụng ngắt

*        DMA Enable Bit (bit 3) cho phép sử dụng bộ nhớ truy cập trực tiếp

*        ECP Service Bit (bit 2) cho thấy một yêu cầu gián đoạn được bắt đầu, nếu có bit này sẽ lên 1.

*        FIFO Full (bit 1) và FIFO Empty (bit 0) hiển thị trạng thái bộ đệm FIFO.

****** EPP - Enhanced Parallel Port

Giới thiệu:

*        Intel, Xircom & Zenith Data System

*        EPP 1.7 và EPP 1.9

*        Tốc độ truyền 500KB/s tới 2MB/s

*        Được sử dụng rộng rãi hơn ECP

Quá trình bắt tay EPP :

*        Theo trình tự thực hiện một chu kỳ truyền dữ liệu khi sử dụng EPP, ta phải theo thứ tự bắt tay EPP

*        Để khởi tạo cho một chu kỳ EPP, phần mềm chỉ cần thực hiện một thao tác vào/ra để khởi tạo cho thanh ghi EPP

Các thanh ghi trong chế độ EPP ::

*        Có một tập các thanh ghi mới, trong đó có 3 thanh ghi đã có từ chế độ SPP

*        3 thanh ghi đầu giống các thanh ghi trong tập thanh ghi của SPP và có cùng chức năng. Ta có thể đưa dữ liệu ra thanh ghi dữ liệu (base +0) như sử dụng SPP.

*        Truyền thông với một thiết bị tương thích EPP: cần gửi dữ liệu ra thanh ghi dữ liệu tại Base +4, cổng song song sẽ sinh ra các tín hiệu bắt tay cần thiết

*        Cả thanh ghi địa chỉ và dữ liệu đều có thể đọc và ghi, do đó để đọc dữ liệu từ thiết bị ta có thể sử dụng cùng một thanh ghi.

*        3 thanh ghi Base +5, Base +6, Base +7 có thể sử dụng cho các thao tác đọc/ ghi 32 bit dữ liệu nếu như cổng có hỗ trợ cho nó.

******giao tiếp với thiết bị ngoại vi :

***GIAO TIẾP PC – PRINTER:

Cổng song song thường dùng để kết nối với máy in đầu nối Centronics 34 chân.

Kết nối này sử dụng combatibility mode để truyền dữ liệu từ PC sang Printer.

**Quá trình kết nối và bắt tay

Ban đầu máy tính đua dữ liệu 8 bit ra, máy tính đọc chân Busy nếu ở mức thấp thì máy in rảnh sẽ đưa tín hiệu Strobe rộng 1µs và máy in đọc dữ liệu, đọc xong sẽ báo lại bằng Ack rộng 5µs. Nếu máy in bận thì Busy sẽ ở mức cao.

Việc giao tiếp thực hiện qua 3 thanh ghi: thanh ghi dữ liệu, thanh ghi điều khiển và thanh ghi trạng thái. Thông thường sử dụng hai địa chỉ gốc là:

378H cho LPT1

278H cho LPT2

** Giao tiếp PC – PC:

Mục đích ban đầu của cổng song song là kết nối máy tính với các thiết bị ngoại vi. Một cách sử dụng khác ngày càng trở nên thông dụng vào thập kỉ trước là kết nối máy tính với máy tính.

Giao tiếp máy tính với máy tính có thể sử dụng chế độ SPP hoặc chế độ mở rộng

** Programming:

Basic under DOS

2 môi trường lập trình Basic phổ biến chạy trên DOS là QuickBasic và QBasic

Ta có thể sử dùng câu lệnh inpout để truy xuất I/O ports

VD:

out (&h378,&hAA)

Print HEX$(inp(&h379))

**** Visual Basic for Window

Không giống như Basic, Visual Basic chạy trên Window không hỗ trợ các hàm inpout. Tuy nhiên, ta có thể sử dụng thư viện inpout32.dll, trong thư viện này có hỗ trợ các hàm inpout

Khi đó, ta sử dụng lệnh inpout bình thường

VD: out(&h378,&hAA)

***** C language

Trong C, ta có thể truy xuất parallel port bằng các hàm inp outp

VD: unsigned DataAddress = 0x378;

        int DataPort;

        DataPort = outp(DataAddress,0x378);

Unsigned StatusAddress = 0x379;

int StatusPort;

StatusPort = inp(StatusAddress);

Printf(“Status port = %Xh

”,StatusPort);

****** Assembly language

-          Ghi Aah vào data port tại địa chỉ 378h

                mov dx,378h                      ; store port address in dx

                mov al,AAh                         ;store data to write in al

                out dx,al                              ;write data in al to port address in dx

-          Đọc giá trị Status port đưa vào thanh ghi al

mov dx,379h                      ;store port address in dx

in al,dx                  ;read data at port address into al

Bạn đang đọc truyện trên: Truyen2U.Pro