Алгоритм обмена данными:
Рассмотрим алгоритм обмена данными между двумя компьютерами с подтверждением (справедливо для SPP-режима LPT порта). Пусть первый компьютер будет передающим, а второй - принимающим.
В момент времени t0 (начало передачи) передающий компьютер (передатчик) выставляет данные для передачи (записывает их в порт 378h). Пример :
outportb (dataport,16);
Причём в каждом цикле обмена записывается один полубайт в регистр передачи 378h.
В момент времени t1 передатчик выставляет сигнал готовности (порт 378h бит 5), который означает, что данные переданы и принимающий компьютер (приёмник) может их считать из приёмного регистра 379h (бит 7 = 0).
int data= inportb ( statusport );
В момент времени t2 приёмник определяет, что поступил сигнал готовности от передатчика и данные можно считать. Приёмник считывает данные из приёмного регистра (порт 379h) и устанавливает сигнал подтверждения приёма на стороне передатчика (порт 378h бит 5). Это нужно для того, чтобы передатчик смог определить, когда можно будет посылать следующие данные. Если этого не сделать, то передатчик может послать данные в тот момент, когда приёмник их ещё не считал и это может привести к сбою передачи или приёма.
В момент времени t3 передатчик получает сигнал подтверждения приёма от приёмника и сбрасывает сигнал готовности. Это нужно для того, чтобы приёмник смог сбросить свой сигнал подтверждения. Если этого не сделать то цикл обмена будет нарушен, так как в следующем цикле обмена передатчик не будет знать принял ли приёмник данные или нет.
В момент времени t4 приёмник определяет, что сигнал готовности сброшен и сбрасывает свой сигнал подтверждения приёма. Таким образом завершается цикл обмена полубайтом - передатчик снова готов к передачи данных, а приёмник - к приёму.
В следующем цикле посылается другой полубайт - если посылался младший полубайт, то посылается старший и наоборот. В следующем за этим цикле обмена снова посылается младший полубайт и т.д.