| Регистр | Bit | ||||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
| LI1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00Н |
| LI2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 10H |
| LI3 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20Н |
| LI4 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 30H |
| LI5 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 40Н |
| LI6 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 50H |
| LI7 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 60H |
| LI8 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 70H |
| LI9 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 80H |
| LI10 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 90H |
| LI11 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | A0H |
| LI12 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | В0Н |
| LI13 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | C0H |
| LI14 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | D0Н |
| LI15 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | E0H |
| LI16 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0H |
| Регистр | Bit | ||||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
| CR1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00H |
| CR2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 02H |
| CR3 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04H |
| CR4 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0EH |
| ICR | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06H |
| TSR | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 08H |
| PSR | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0AH |
| ESR | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0CH |
Рис. 1.10. Адреса внутренних регистров линейных интерфейсов.
Затем производится запись в ОЗУ данных состояний части битов внутренних регистров линейных интерфейсов. Данные располагаются в заранее оговоренной техническим заданием области памяти 40Н – 7FН в заданном порядке. Распределение памяти ОЗУ данных процессора показано на рисунке 1.11. Нужные биты выбираются из внутренних регистров линейных интерфейсов, таблица которых приведены на рисунке 1.12. Например, для занесения бита AIS в 1‑й бит ячейки памяти 40Н, его нужно считать из 2‑го бита регистра PSRLI1. Порядок сохраняется для всей карты по возрастанию следующий: PSR, TSR, CR2, CR1.
| Линейный интерфейс | Адрес регистра в ОЗУ | Bit | |||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
| L1 1 | 40 Н | DFMO | AIS | LOS | |||||
| 41 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 42 Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 43 Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 2 | 44 H | DFMO | AIS | LOS | |||||
| 45 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 46 Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 47 Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 3 | 48 Н | DFMO | AIS | LOS | |||||
| 49 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 4A Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 4B Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 4 | 4C Н | DFMO | AIS | LOS | |||||
| 4D Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 4E Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 4F Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 5 | 50 Н | DFMO | AIS | LOS | |||||
| 51 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 52 Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 53 Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 6 | 54 Н | DFMO | AIS | LOS | |||||
| 55 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 56 Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 57 Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 7 | 58 Н | DFMO | AIS | LOS | |||||
| 59 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 5A Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 5B Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 8 | 5C Н | DFMO | AIS | LOS | |||||
| 5D Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 5E Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 5F Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 9 | 60 Н | DFMO | AIS | LOS | |||||
| 61 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 62 Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 63 Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 10 | 64 Н | DFMO | AIS | LOS | |||||
| 65 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 66 Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 67 Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 11 | 68 Н | DFMO | AIS | LOS | |||||
| 69 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 6A Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 6B Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 12 | 6C Н | DFMO | AIS | LOS | |||||
| 6D Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 6E Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 6F Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 13 | 70 Н | DFMO | AIS | LOS | |||||
| 71 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 72 Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 73 Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 14 | 74 Н | DFMO | AIS | LOS | |||||
| 75 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 76 Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 77 Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 15 | 78 Н | DFMO | AIS | LOS | |||||
| 79 Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 7A Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 7B Н | ES4 | ES3 | ES2 | ES1 | |||||
| L1 16 | 7C Н | DFMO | AIS | LOS | |||||
| 7D Н | FL | TQRSS | ESOVR | ESUNF | TDFMO | TAIS | TLOS | ||
| 7E Н | ЕРАТ1 | EPAT0 | ETAOS | EQZMON | ERLOOP | ELLOOP | EALOOP | ||
| 7F Н | ES4 | ES3 | ES2 | ES1 | |||||
Рис. 1.11. Распределение памяти ОЗУ данных процессора.
Потом инициализируется последовательный порт Р3 на прием. Инициализируется таймер, выбор 1‑го таймера, перевод его в третий режим работы, загрузка константы скорости в таймер для 9600 Бод, разрешение работы таймера. Инициализация последовательного порта проходит следующим образом: порт устанавливается в режим 9‑бит с программируемой скоростью, устанавливается адрес для записи принятых значений, выбирается номера канала, идет разрешение приёма сообщений с взведённым 9‑м битом, разрешение работы приёмопередатчика, разрешение прерываний от приёмопередатчика, общее разрешение прерываний, сброс бита разрешения приёма. После этого выполняется основной цикл программы: ожидание прерывания либо от любого из линейных интерфейсов с переходом на подпрограмму перезаписи карты памяти части битов внутренних регистров линейных интерфейсов, либо от последовательного порта с переходом на подпрограмму связи с внешней ПЭВМ через последовательный порт.
Подпрограмма перезаписи карты памяти части битов внутренних регистров линейных интерфейсов состоит из четырех последовательных вызовов подпрограмм RDPSR, RDTSR, DRCR2 и RDCR1 с предварительным занесением в регистр R1 соответствующих адресов регистров, используя таблицу, приведенную на рисунке 1.10. Выполнение подпрограммы происходит в режиме маскирования прерываний. После перезаписи карты памяти снимаются все флаги прерываний линейных интерфейсов и происходит выход из подпрограммы.
Подпрограмма связи с внешней ПЭВМ через последовательный порт вызывается при появлении прерывания от последовательного порта. Она также с запрещения всех прерываний. Инициализируется прием и прослушивается порт на приход старт байта. В случае его получения происходит инициализация чтения данных из памяти. Считается контрольная сумма для передачи бита четности и происходит поблочная передача данных. Для передачи всех 64 байт требуется 64 сеанса связи. Такая организация работы выбрана не случайно. В разделе, где упоминалось об основах асинхронной последовательной связи, приводились причины, по которым данный способ взаимодействия внешней ПЭВМ с последовательным портом является оптимальным. При втором сеансе связи приема старт байта не происходит. Это говорит о продолжении уже начатой передачи данных. Смотрится, является ли этот байт признаком передачи последнего кусочка данных. В этом случае считается контрольная сумма и выполнение подпрограммы прекращается. Иначе мы продолжаем поблочно читать данные из памяти и передавать их внешней ПЭВМ через последовательный порт.
1.7.3 Тестирование и отладка программы
После окончания этапа программирования, т.е. собственно процесса написания программы, проводится ее проверка для обнаружения и исправления возможных ошибок. На эмуляторе микропроцессора АТ89С51 проверяется корректность кода программы по содержимому различных регистров процессора. В контрольных точках программы, выбранных для удобства после каждого логически законченного куска кода, мы смотрим содержимое регистра R7. Внесенные в программу отладочные строки для контроля ее пошагового выполнения позволяют своевременно выявлять неточности реализации общего алгоритма изделия ТС16Е1. Применение модульного принципа тестирования программы существенно облегчает этот процесс.