–PAGE_BREAK–Рис. 4. Алгоритм программы «Монитор»
Программа «Монитор» принимает от ПК код выполняемой операции, декодирует его и запускает соответствующую подпрограмму.
Подпрограмма приема одного байта данных ожидает прихода информации, проверяет правильность данных и заносит принятый байт в регистр R0. Если данные были приняты не верно, то подпрограмма приема одного байта данных заносит в регистр R4 нулевое значение.
В случае не верно принятого кода операции микроконтроллер предлагает ПК повторно передать команду.
Рис. 5. Алгоритм декодирования кода операции в программе «Монитор»
После выполнения выбранной подпрограммы, программа «Монитор» снова переходит к режиму ожидания очередного кода операции.
Алгоритм выбора подпрограммы показан на рисунке 5.
В программе «Монитор» зарезервированы следующие коды операций:
¨ 01
h — подпрограмма 1 – подпрограмма запуска программы пользователя в режиме реального времени;
¨ 02
h – подпрограмма 2 – подпрограмма запуска программы пользователя в пошаговом режиме;
¨ 03
h – подпрограмма 3 – подпрограмма записи программы пользователя в память программ МК;
¨ 04
h – подпрограмма 4 – подпрограмма записи информации в программно – доступные узлы МК;
¨ 0
5
h – подпрограмма
5 – подпрограмма чтения из памяти программ МК;
¨ 0
6
h – подпрограмма
6 – подпрограмма чтения программно – доступных узлов МК;
¨ другие – подпрограмма
7 – зарезервированные коды операций для запуска подпрограмм пользователя.
2.3.2.2 Подпрограмма запуска программы пользователя в режиме реального времени
Перед запуском программы пользователя, микроконтроллер принимает из ПК адрес начала программы и сохраняет его в регистре DPTR.
Для приема адреса используется подпрограмма приема двух байтов информации.
Алгоритм запуска программы пользователя в режиме реального времени представлен на рисунке 6.
Рис. 6. Алгоритм запуска программы пользователя в режиме реального времени.
Рис. 7. Алгоритм программы приема двух байтов информации.
Для приема байта информации, подпрограмма использует алгоритм приема одного байта данных. Ошибка приема проверяется по содержимому регистра R4.
Значение первого принятого байта сохраняется в регистре DPL.
Прием второго байта адреса программы пользователя из ПК аналогичен приему первого байта, с той лишь разницей, что его значение сохраняется в регистре DPH.
В случае возникновения ошибки подпрограмма завершает свою работу, оставляя без изменения содержимое регистра R4.
Подпрограмма запуска программы пользователя в режиме реального времени проверяет правильность принятия адреса по регистру R4. В случае возникновения ошибки передает в ПК код 0Fh. После чего возвращается в программу «Монитор»
Непосредственно перед запуском программы пользователя необходимо изменить рабочий БАНК памяти данных МК на БАНК 0.
Алгоритм программы приема двух байтов информации представлен на рисунке 7.
2.3.2.3 Подпрограмма запуска программы пользователя в пошаговом режиме
На этапе отладки прикладной программы очень удобным для разработчика оказывается режим пошагового (покомандного) исполнения программ. Этот режим можно организовать, используя систему прерываний микроконтроллера.
Внешний запрос прерывания не будет обслужен до тех пор, пока обслуживается прерывание с равным приоритетом. Этот запрос будет воспринят лишь после того, как будет выполнена одна команда после команды возврата из подпрограммы. Иными словами, однажды вызвав подпрограмму обслуживания прерывания, вызвать ее вновь невозможно до тех пор, пока хотя бы одна команда основной программы не будет исполнена.
Для использования этого свойства системы прерываний микроконтроллера можно запрограммировать одно из внешних прерываний (например, INT0) на обслуживание пошагового режима работы.
Рис. 8. Аппаратная реализация пошагового режима выполнения программы пользователя.
При реализации этого режима можно воспользоваться двумя способами:
ü На выводINT0 подавать сигнал от кнопки «ШАГ», и микроконтроллер по сигналу INT0=0 вызовет подпрограмму обслуживания внешнего прерывания.
ü Предусмотреть возможность программного изменения состояния уровня сигнала на выводе INT0, используя один из свободных выводов порта Р2.
Второй способ является наиболее удобным, т.к. позволяет организовать пошаговый режим непосредственно на ПК. Кроме того первый способ требует больших материальных вложений для устранения дребезга контактов от кнопки «ШАГ».
После того, как адрес программы пользователя будет принят и проверен, подпрограмма выдаст активный сигнал на вход P3.2.По этому сигналу микроконтроллер перейдет в режим обработки прерывания INT0. До того, как будет выполнена первая команда в программе пользователя, основная программа должна выполнить две команды (выставить сигнал INT0=0 и запустить программу пользователя). Поэтому в подпрограмме обработки прерывания необходим счетчик пропущенных шагов. Этот счетчик можно будет использовать для выполнения блока команд в режиме пошагового исполнения программы пользователя.
Алгоритм запуска программы пользователя в пошаговом режиме представлен на рисунке 9.
Рис. 9. Алгоритм выполнения программы пользователя в пошаговом режиме.
Подпрограмма обработки прерывания INT0 аналогична программе «Монитор». В начале программы выполняется первоначальная установка:
¨ сохраняется содержимое аккумулятора, слова состояния программы и регистра DPTR в стеке;
¨ устанавливается БАНК 2, как активный банк памяти данных микроконтроллера;
¨ в регистр R4 записывается количество допустимых ошибок.
После выполнения первоначальной установки, микроконтроллер проверяет содержимое регистра R3. Этот регистр выполняет роль счетчика пропущенных шагов программы. Если счетчик не равен нулю, то подпрограмма восстанавливает содержимое аккумулятора, слова состояния программы, DPTR и выходит из режима обработки прерывания, для выполнения следующего шага программы пользователя.
Алгоритм программы обработки прерывания INT0 показан на рисунке 10.
Рис.
10. Алгоритм программы обработки прерывания
INT0.
Если счетчик был равен нулю, тогда микроконтроллер переходит в режим приема кода операции от ПК.
Алгоритм дешифрации кода операции в программе обработки прерывания INT0 аналогичен алгоритму дешифрации кода операции в программе «Монитор». Здесь предусмотрены следующие коды операций:
¨ 01h – чтение памяти программ МК;
¨ 02h – запись информации в программно – доступные узлы МК;
¨ 03h – запись в память программ МК;
¨ 04h – выдача кода следующей команды;
¨ 05
h
– выполнение блока команд программы пользователя;
¨ 06h – выполнение программы в режиме реального времени;
¨ 07h – останов программы;
¨ 08h – выполнение следующего шага программы;
¨ другие
– выполнение программ пользователя.
Большая часть подпрограмм, выбираемых пользователем в пошаговом режиме, аналогична подпрограммам, выбираемым в программе «Монитор».
Если значение регистра R5, при выходе из подпрограммы будет нулевым, то будет выполнен следующий шаг основной программы.
Для выполнения останова программы, достаточно перевести состояние сигнала на выходе P2.5 в нулевое состояние и в стеке подменить адрес следующей команды на адрес начала программы «Монитор».
Для того чтобы перевести программу пользователя из пошагового режима, в выполнение программы в режиме реального времени необходимо установить состояние сигнала P2.5 в нулевое состояние.
Алгоритм декодирования кода операции представлен на рисунке 11.
Рис. 11. Алгоритм декодирования кода операции в пошаговом режиме работы программы пользователя.
Для выдачи кода следующей команды необходимо считать 3 байта информации из памяти программ. Начальный адрес следующей команды можно взять из указателя стека.
2.3.2.4 Подпрограмма записи программы пользователя в память программ микроконтроллера.
В начале работы подпрограмма принимает количество передаваемых байтовиз ПК. Для этого используется подпрограмма приема двух байтов информации. После ее выполнения данные необходимо перенести в счетчик количества принятых байтов. Функцию счетчика выполняют регистры R1 и R2.
Алгоритм записи программы пользователя в память программ микроконтроллера представлен на рисунке 12.
Рис. 12. Алгоритм подпрограммы записи программы пользователя в памяти программ микроконтроллера.
После того, как количество принимаемых байтов будет принято, необходимо принять адрес вершины принимаемого массива информации.
После этого становится возможным прием самой программы пользователя и запись ее в память программ микроконтроллера.
Алгоритм приема данных представлен на рисунке 13.
Рис. 13. Алгоритм приема данных в подпрограмме записи программы пользователя в память МК.
Адрес следующего байта программы содержится в регистре DPTR. После каждого принятого байта данных процедура проверяет правильность завершения подпрограммы приема одного байта данных, записывает его по адресу, указанному в регистре DPTR, увеличивает значение этого регистра и уменьшает счетчик принятых байтов.
После этого процедура проверяет счетчик принятых байтов программы пользователя и, в случае его обнуления, завершает процесс принятия данных.
2.3.2.5 Подпрограмма записи информации в программно – доступные узлы микроконтроллера
Подпрограмма записи информации в программно – доступные узлы микроконтроллера аналогична процедуре записи программы пользователя. Разница заключается в том, что для записи информации в программно – доступные узлы используется однобайтовая адресация, а при записи в память программ используется двухбайтовая адресация.
Алгоритм записи информации в программно – доступные узлы микроконтроллера представлен на рисунке 14.
Рис. 14. Алгоритм записи информации в программно – доступные узлы микроконтроллера.
Адрес принимаемых данных находится в регистре R1.
2.3.2.6 Подпрограмма чтения из памяти программ микроконтроллера
Память программ микроконтроллера имеет емкость в 2К байт. При чтении памяти программ микроконтроллера в ПК необходимо передать все 2К данных. Для обращения к памяти программ микроконтроллера, необходимо иметь два байта адреса.
В качестве указателя адреса ячейки памяти, подлежащей передачи в ПК, и счетчика передаваемых байтов данных используется регистр DPTR.Для пересылки байта информации в МК используется подпрограмма выдачи одного байта данных.
Для реализации этой процедуры необходимо, чтобы байт данных, подлежащий выдачи в ПК, находился в аккумуляторе.
Алгоритм подпрограммы чтения из памяти программ микроконтроллера представлен на рисунке 15.
Рис. 15. Алгоритм подпрограммы чтения памяти программ микроконтроллера.
После выдачи каждого байта информации, процедура проверяет правильность переданной информации.
Максимальный адрес памяти программ микроконтроллера – 07FFh.
2.3.2.7 Подпрограмма чтения информации программно – доступных узлов микроконтроллера
Данная подпрограмма аналогична процедуре чтения памяти программ микроконтроллера. Разница заключается в том, что для адресации к программно – доступным узлам МК необходим однобайтовый адрес, а для обращения к памяти программ – двухбайтовый.
Алгоритм подпрограммы чтения из программно – доступных узлов микроконтроллера представлен на рисунке 16.
Рис. 16. Алгоритм подпрограммы чтения из программно – доступных узлов микроконтроллера.
В качестве счетчика и указателя адреса передаваемых данных используется регистр R1. Максимально допустимый адрес — FFh.
2.3.2.8 Подпрограмма выдачи ошибки в ПК
В качестве кода ошибки выбран код 0Fh.
Процедура выдачи ошибки использует подпрограмму выдачи одного байта. Поэтому, перед запуском этой процедуры, код ошибки необходимо поместить в аккумулятор.
В связи с тем, что для сигнализации ошибки все процедуры используют регистр R4, перед запуском подпрограммы выдачи одного байта данных содержимое регистра R4 необходимо сохранить. Для этой цели используется регистр R7.
Перед завершением подпрограммы значение регистра R4 необходимо восстановить.
Алгоритм подпрограммы выдачи ошибки представлен на рисунке 17.
Рис. 17. Алгоритм подпрограммы выдачи ошибки в ПК.
2.3.2.9 Подпрограмма выдачи одного байта информации
Алгоритм подпрограммы выдачи одного байта информации в ПК представлен на рисунке 18.
Рис. 18. Алгоритм подпрограммы выдачи одного байта информации в ПК.
Подпрограмма передает данные находящиеся в аккумуляторе в последовательный порт вывода. В начале работы процедура переносит бит четности в буфер последовательного порта, задает значения счетчиков ошибок и ожиданий, и ожидает, пока буфер порта будет свободен. Как только последовательный порт будет готов к пересылке информации, программа начнет проверять готовность ПК к приему данных.
Если ПК будет не готов к приему информации долгое время, то процедура завершит свою работу с занесением в регистр R4 кода 00h, символизирующего ошибку передачи данных.
Как только ПК будет готов к приему данных подпрограмма передаст содержимое аккумулятора в последовательный порт. Подождет, пока порт не будет готов к передаче следующего байта данных и запустит подпрограмму задержки, для того, чтобы ПК успел проверить переданную информацию и, в случае ошибки, выдал бы запрос на повторную передачу данных.
Если ПК выставит сигнал ошибки переданной информации, подпрограмма будет пытаться передать эту информацию еще раз. Этот процесс будет повторяться, до тех пор, пока не обнулится счетчик ошибок.
Если счетчик ошибок будет равен нулю, процедура завершит свою работу с ошибкой.
В качестве сигнала готовности ПК, и сигнала ошибки переданной информации используется сигнал на входе P2.7.
2.3.2.10 Подпрограмма приема одного байта информации.
В начале работы, подпрограмма задает счетчик ошибок, счетчик тактов ожидания и разрешает передачу информации из ПК в микроконтроллер.
После этого подпрограмма ожидает приема информации, проверяет ее и, если данные приняты верно, сохраняет результат в регистре R0.
В случае возникновения ошибок, микроконтроллер передает в ПК сообщение об ошибке и предлагает повторить передачу.
Алгоритм подпрограммы приема одного байта информации представлен на рисунке 19.
Рис. 19. Алгоритм подпрограммы приема одного байта информации.
В случае многократного повторения ошибок, подпрограмма завершает свою работу и выставляет в регистре R4 код 00h, символизирующий ошибочность принятых данных.
Если от ПК долгое время не будет передана информация, подпрограмма также завершит свою работу и выставит в регистре R4 код 00h, символизирующий ошибочность принятых данных.
В качестве счетчика времени ожидания используется регистр R6.
ЗАКЛЮЧЕНИЕ
В работе была рассмотрена организация обмена информацией между персональным компьютером и микроконтроллером семейства MCS-51 фирмыIntel. Была разработана, на уровне структурной схемы, аппаратная часть сопряжения микроконтроллера с портами персонального компьютера, а также схема подключения внешней памяти программ к микроконтроллеру. Разработано, на уровне алгоритмов, программное обеспечение микроконтроллера.
На основе проделанной работы можно создать установку, позволяющую автоматизировать процесс программирования микроконтроллерной системы. Данную установку можно применять в качестве лабораторной установки для изучения курса «Микропроцессоры» и в качестве программируемого управляющего элемента более сложной системы.
СПИСОК ИСПОЛЬЗОВАНОЙ ЛИТЕРАТУРЫ
1. «Однокристальные микроЭВМ» справочник / Бобрыкин А.В., Липовецкий Г.П. и др. / Москва / 1994 г.
2. «Проектирование цифровых устройств на однокристальных микроконтроллерах» / Сташин В.В., Урусов А.В., Мологонцева О.Ф. / Москва, «Энергоатомиздат» / 1990 г.
3. «Лабораторная установка на базе микроконтроллера MCS-51 по курсу микропроцессоры и микропроцессорные системы» работа на соискание академической степени бакалавра / Баринов Р. / Рига, РАУ / 1998 г.
4. «1996 IC Master for Windows» / компакт диск / © Copyright Heart business puplishinc.
5. «STANDART IBM PC. Устройство, установка, техническое обслуживание и ремонт персонального компьютера» справочник / Кишинев / 1991 г.
6. «Модемы и факс-модемы. Программирование для MS-DOS иWindows» / А.В. Фролов, Г.В. Фролов / Москва / «Диалог-Мифи» / 1995 г.
ПРИЛОЖЕНИЯ
продолжение
–PAGE_BREAK–