Регистр | 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. Применение модульного принципа тестирования программы существенно облегчает этот процесс.