Ngoài các cổng nối tiếp và các giao điện nối tiếp được trình bày ở phần trên, vi điều khiển PIC16F877A còn được hỗ trợ một cổng giao tiếp song song và chuẩn giao tiếp song song thông qua PORTD và PORTE. Do cổng song song chỉ hoạt động ở chế độ Slave mode nên vi điều khiển khi giao tiếp qua giao diện này sẽ chịu sự điều khiển của thiết bị bên ngoài thông qua các pin của PORTE, trong khi dữ liệu sẽ được đọc hoặc ghi theo dạng bất đồng bộ thông qua 8 pin của PORTD.
Bit điều khiển PSP là PSPMODE (TRISE<4>). PSPMODE được set sẽ thiết lập chức năng các pin của PORTE là các pin cho phép đọc dữ liệu ( ), cho phép ghi dữ liệu ( ) và pin chọn vi điều khiển ( ) phục vụ cho việc truyền nhận dữ liệu song song thông qua bus dữ liệu 8 bit của PORTD. PORTD lúc này đóng vai trò là thanh ghi chốt dữ liệu 8 bit, đồng thời tác động của thanh ghi TRISD cũng sẽ được bỏ qua do PORTD lúc này chịu sự điều khiển của các thiết bị bên ngoài. PORTE vẫn chịu sự tác động của thanh ghi TRISE, do đó cần xác lập trạng thái các pin PORTE là input bằng cách set các bit TRISE<2:0>. Ngoài ra cần đưa giá trị thích hợp các bit PCFG3:PCFG0 (thanh ghi
ADCON1<3:0>) để ấn định các pin của PORTE là các pin I/O dạng digital (PORTE còn là các pin chức năng của khối ADC).
Khi các pin và cùng ở mức thấp, dữ liệu từ bên ngoài sẽ được ghi lên PORTD. Khi một trong hai pin trên chuyển lên mức logic cao, cờ hiệu báo dữ liệu trong buffer đã đầy BIF (TRISE<7>) được set và cờ ngắt PSPIF (PIR1<7>) được set để báo hiệu kết thúc ghi dữ liệu. Bit BIF chỉ được xóa về 0 khi dữ liệu vừa nhận được ở PORTD được đọc vào. Bit báo hiệu dữ liệu nhận được trong buffer bị tràn IBOV (TRISE<5>) sẽ được set khi vi điều khiển nhận tiếp dữ liệu tiếp theo trong khi chưa đọc vào dữ liệu đã nhận được trước đó. Khi các pin và cùng ở mức logic thấp, bit báo hiệu buffer truyền dữ liệu đã đầy BOF (TRISE<6>) sẽ được xóa ngay lập tức để báo hiệu PORTD đã sẵn sàng cho quá trình đọc dữ liệu. Khi một trong hai pin trên chuyển sang mức logic cao, cờ ngắt PSPIF
Hình 2.38 Sơ đồ khối của PORTD và PORTE khi hoạt động ở chế độ PSP Slave
mode.
sẽ được set để báo hiệu quá trình đọc dữ liệu hoàn tất. Bit BOF vẫn được giữ ở mức logic 0 cho đến khi dữ liệu tiếp theo được đưa vào PORTD.
Cần chú ý là ngắt SSPIF được điều khiển bởi bit PSPIE (PIE1<7>) và phải được xóa bằng chương trình.
Các thanh ghi liên quan đến PSP bao gồm:
Thanh ghi PORTD (địa chỉ 08h): chứa dữ liệu cần đọc hoặc ghi. Thanh ghi PORTE (địa chỉ 09h): chứa giá trị các pin PORTE.
Thanh ghi TRISE (địa chỉ 89h): chứa các bit điều khiển PORTE và PSP. Thanh ghi PIR1 (địa chỉ 0Ch): chứa cờ ngắt PSPIF.
Thanh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt PSP.
Thanh ghi ADCON1 (địa chỉ 9Fh): điều khiển khối ADC tại PORTE. Chi tiết về các thanh ghi sẽ được trình bày cụ thể ở phụ lục 2.