Главная » Bascom-8051, Basic, Железо » Структура текста программы Bascom-8051

0

Bascom  не  предъявляет  строгих  требований  к  расположению  функциональных   модулей   в  тексте программы.  Единственное  требование  (во  многих  случаях  тоже  необязательное)  заключается  в  следующем: объявление программного объекта должно  предшествовать его использованию, т.е. быть выше по тексту. Для удобства программирования  лучше применять одинаковую схему построения программ. Это очень удобно, так как   позволяет  сохранять преемственность  и обеспечить  более простую трансформацию  одной программы  в другую. Кроме того, необходимость дисассемблирования скомпилированных программ требует применения такой структуры расположения модулей, которая дает возможность облегчить поиск интересующего фрагмента. Ниже, в виде таблицы, приведена рекомендуемая схема, отвечающая этим критериям.

Назначение

Комментарии

Заголовок

Комментарии,  содержащие  идентифицирующие  сведения  о      программе:

принадлежность изделию, номер версии, дату и место создания,  имя  автора, его телефоны  и  местонахождение,  версии  компилятора,  модель  процессора,  способ отладки (и как это  отражено в программе) и все то, что невозможно  узнать из

последующего текста.

Определить модель

процессора

Записать   имя   файла,   определяющего   набор   (имена)   регистров   с   помощью

директивы $REFILE. Это можно и не делать

Модель памяти

Если используется процессор с памятью более 2 КБайт это место  для  директивы

“$large”.

Установка начального

значения распределения памяти

При  необходимости  директивой  $IRAMSTART=&H[adres] можно   установить начальное значение распределения внутренней  памяти. Рекомендуется только для очень опытных пользователей!!!

Определение

переменных

Блок определения переменных оформляется в порядке возрастания  их  длины: Bit,

Byte, Word, Integer, Long, Single, String, Array. Переменные,  определяемые  во внешней  памяти  и  EEPROM,  оформляются  отдельными  блоками.  Для  удобства рекомендуется применять имена  переменных начинать с буквы, обозначающей ее тип,  например:   B_art, B_ovr – битовые, R_dat, R_cnt – байтовые, W_adr – двухбайтовые, I_data – двухбайтовые со знаком, L_bd – четырехбайтовые со знаком, F_frq – числа с плавающей точкой, S_inbuf – символьные , A_mes –  массивы, P_clk, P_osnd – порты.

Объявление процедур

Определение  имен  подпрограмм,  которые  будут  использоваться  как  процедуры

(новые функции).

Определение имен

портов

Блок определения имен линий управления всеми физическими   устройствами,

подключенных к портам микроконтроллера. Здесь же должен быть объявлен тип и способ   подключения   индикатора.   Если,   что-то   из   необходимых   параметров подключения    не    будет    объявлено,    то    компилятор    использует    значения, установленные в окнах меню “Options” – “Compiler”.

Определение стека

При   необходимости   директивой   “$Nosp” запрещается      автоматически устанавливать  стек  вслед  за  блоком  переменных.   Применение  это  директивы требует добавления оператора установки стека SP=&H[adress].

Отмена автоматической

настройки периферии

При  необходимости  запретить  автоматическую  настройку  внутренних  устройств

микроконтроллера следует применить директиву $NOINIT, после которой одним из способов,   предусмотренных   Bascom,   производится   загрузка   параметров   всех используемых управляющих регистров.

Настройка периферии

Объявление частоты кварцевого резонатора, скорости и режима последовательного

канала, режима счетчиков, режима и длительности сторожевого таймера. Если, что- то из необходимых параметров конфигурации не  будет объявлено, то компилятор использует   значения,   установленные   в   окнах   меню   “Options”   –   “Compiler”. Разрешить  счетчик, тактирующий последовательный канал. При необходимости  в этом блоке осуществляют перенаправление ввода-вывода.

Настройка прерываний

Объявление используемых прерываний и имен программ обработки  прерываний

(векторов).  Задание   типа   прерываний   и   приоритетов.   Разрешение   отдельных прерываний   и   общее   разрешение.   Инициализировать   и   разрешить   счетчики, вызывающие прерывания (задать начальное значение, период или частоту).

Установить порты

Установить выходные линии микроконтроллера, в исходное и безопасное состояние

для окружающей схемы. Привести подключенные устройства и исходное состояние. Примерно   в   этом   месте   компилятор    вставляет   программу   инициализации символьного  модуля  (LCD).  Чтобы  завершить  инициализацию  индикатора,  этот

блок   нужно   завершить  командой   Cls.   В  этом  же   блоке  можно   произвести

определение изображения дополнительных символов (до оператора Cls).

Вывести первое

сообщение

Индицировать   стартовое   приветствие,   например,   номер   версии    программы,

сообщающее о том, что процессор успешно стартовал.

Произвести

тестирование

Проводится проверка исправности чего-либо важного, например, данных EEPROM.

В случае обнаружении ошибки выводится сообщение

Инициализировать

переменные

Установить значение регистров таким образом, чтобы основная  программа начала

работать   правильно.   Т.к.   исполнение   предыдущих   операций    может   занять значительное  время,  то  иногда  разрешение  некоторых  (или  всех)  прерываний  и запуск счетчиков (или одного  из счетчиков) переносится в конец данного блока. Иногда   полезно   очистить   всю   память   перед   применением.   Этой   операцией обнуляются все будующие переменные.

Основная программа

Главная программа и ее ветви. Описывается  построение главного цикла программы,

в котором происходит ожидание событий, и ветви отработки поступающих событий

-  приход  данных  их  различных  источников   (АЦП,   последовательного канала, клавиатуры,  срабатывании  аварийных   датчиков).  По   результатам   обработки поступающих  данных  в  главной программе  активизируются программы  вывода

данных (на индикатор, в  последовательный канал) и управления  физическими

объектами (включение реле, загрузка ЦАП, запись данных). Чтобы придать главной программе компактный вид, повторяющиеся  и функционально законченные модули оформляются в виде подпрограмм.

Подпрограммы

обработки прерываний

Обычно небольшой по объему модуль для быстрой реакции на события, и поэтому

критичный   к   времени   исполнения    и   количеству    используемых    ресурсов. Программы  обработки  прерываний, в  первую  очередь,  пишутся  на  ассемблере. Данные  из  программ  прерывания передаются  главной программе  через  общие регистры.

Подпрограммы и

процедуры

Небольшие  автономные  модули,  в    которых  содержатся     неоднократно

повторяющиеся действия. Управление подпрограммами    осуществляются    их вызовом с переменными параметрами. Процедуры оформляются почти также как и подпрограммы. Добавляется лишь объявление подставляемых переменных, которые определяют   функциональная   зависимость  процедуры,   и   отличие   от   простой подпрограммы.

Таблицы констант

Непосредственные  данные,   используемые   для   управления    программой   или

объектами,  и  для  обработки  данных.  Они  должны  быть   расположены  после исполняемого кода, чтобы не затруднять процесс возможного дисассемблирования.

Метка программы

Это  также  непосредственные данные,  но  в   текстовом виде,  содержащие  номер

версии, дату создания, принадлежность изделию. Даже если в законченном изделии программа закрывается битами секретности, то  на этапе программирования очень удобно иметь видимые идентификаторы внутри файла исполняемого кода.

Источник: М.Л.Кулиш, СПРАВОЧНИК ПО ПРОГРАММИРОВАНИЮ BASCOM-8051, Краснодар 2001

По теме:

  • Комментарии