Варианты организации окончания передачи данных
Начало обмена в многопроцессорной системе инициируется персональным компьютером (ведущим микроконтроллером) выдачей байта адреса микроконтроллера. Затем персональный компьютер передаёт данные. Рассмотрим варианты окончания передачи данных персональным компьютером. Это необходимо для того, чтобы подготовить микроконтроллер, который принимал данные, к приёму новой адресной посылки.
Одним из вариантов является передача данных в кодах ASCII. Окончание передачи данных может заканчиваться передачей специального символа, например, символом перевода строки. Подпрограмма обработки прерывания приёмника сравнивает каждый принимаемый байт с кодом специального символа окончания передачи данных. При поступлении этого символа подпрограмма обработки прерывания устанавливает SM2 = 1. Недостатком этого способа является увеличение объёма передаваемых байтов. Например, число 255 передаётся тремя байтами (код 2, код 5, код 5). Этот способ удобен при небольшом объёме передаваемых данных.
Другим способом окончания обмена может быть длительность интервала времени после передачи последнего байта данных. Если этот интервал больше заданного, то это означает конец передачи. Этот способ удобен для передачи больших объёмов данных.
В качестве признака конца передачи используют передачу в первых байтах пакета информацию о числе передаваемых байтов. Подпрограмма обработки прерывания от приёмника ведёт подсчёт этого числа, и достижение его означает конец передачи.
Вариацией последнего способа является передача постоянного числа байтов в пакете. В этом случае заранее известно, сколько байт будет передано. Поэтому нет необходимости передавать в первых байтах информацию о количестве байтов в пакете.
Организация передачи данных от микроконтроллера к персональному компьютеру
Передача данных от микроконтроллера к персональному компьютеру должна происходить только по команде персонального компьютера. Это предотвращает одновременную передачу в моноканал данных от нескольких микроконтроллеров.
Передаче данных от микроконтроллера предшествует пересылка данных от персонального компьютера к микроконтроллеру.
Например, если обмен происходит в кодах ASCII, то включение передатчика микроконтроллера может быть инициировано персональным компьютером передачей специального символа.
Возможна организация обмена, когда любая передача данных от персонального компьютера к микроконтроллеру заканчивается передачей данных от микроконтроллера к персональному компьютеру.
Пример программирования последовательного порта
Пусть требуется принять в асинхронном режиме данные со скоростью 9600 бод и записать их во внешнюю память, начиная с ячейки 00H до 05FFH при тактовой частоте синхрогенератора микроконтроллера 11059 МГц.
jmp PROG ; Обход подпрограммы обработки прерывания от
;последовательного порта;
org 0023H ; Установка 1-ой команды подпрограммы обработки
; прерывания на вектор;
mov A, SBUF ; Начало подпрограммы обработки прерывания;
movx @DPTR, A; Пересылка байта в ячейку внешней памяти;
inc DPTR ; Увеличение адреса ячейки внешней памяти на 1;
clr RI ; Сброс флага запроса прерывания от приёмника;
reti ; Возврат из подпрограммы прерывания приёмника;
PROG:
mov TMOD, #00100000b; выбор 2-го режима работы Т/С1;
mov TH1, #FDH ; Загрузка в счётный регистр таймера T/C1 числа, ;
;определяющего скорость обмена (см. таблицу);
mov TCON, #01000000b; включение Т/С1;
mov SCON, #11010000b; Выбор 3-го режима работы последовательного
; порта (9 бит данных), установка бита
;разрешения приёма REN = 1, сброс бита RI;
mov TE, #10010000; общее и индивидуальное разрешение прерываний
; от последовательного порта (установка битов ЕА
; и ES);
DD: mov DPTR, #00H ; загрузка начального адреса ячейки внешней памяти;
SS: mov R0, DPH; ; ожидание, когда внешняя память заполнится до
cjne R0, # 05h, SS ; адреса 0500Н;
mov R0, DPL ; ожидание, когда внешняя память заполнится до
cjne R0, #FFH, SS; адреса 05FFH;
jmp DD ; повторение цикла заполнения ячеек внешней памяти
; по тем же адресам;
