Справочник по программировани BASCOM-8051 (М.Л. Кулиш, 2001). Справочник по программированию bascom8051 Краснодар 2001
Скачать 6.61 Mb.
|
===================================== Справочник по программированию «Bascom-8051» == блок нужно завершить командой Cls. В этом же блоке можно произвести определение изображения дополнительных символов (до оператора Cls). Вывести первое сообщение Индицировать стартовое приветствие, например, номер версии программы, сообщающее о том, что процессор успешно стартовал. Произвести тестирование Проводится проверка исправности чего-либо важного, например, данных EEPROM. В случае обнаружении ошибки выводится сообщение Инициализировать переменные Установить значение регистров таким образом, чтобы основная программа начала работать правильно. Т.к. исполнение предыдущих операций может занять значительное время, то иногда разрешение некоторых (или всех) прерываний и запуск счетчиков (или одного из счетчиков) переносится в конец данного блока. Иногда полезно очистить всю память перед применением. Этой операцией обнуляются все будующие переменные. Основная программа Главная программа и ее ветви. Описывается построение главного цикла программы, в котором происходит ожидание событий, и ветви отработки поступающих событий - приход данных их различных источников (АЦП, последовательного канала, клавиатуры, срабатывании аварийных датчиков). По результатам обработки поступающих данных в главной программе активизируются программы вывода данных (на индикатор, в последовательный канал) и управления физическими объектами (включение реле, загрузка ЦАП, запись данных). Чтобы придать главной программе компактный вид, повторяющиеся и функционально законченные модули оформляются в виде подпрограмм. Подпрограммы обработки прерываний Обычно небольшой по объему модуль для быстрой реакции на события, и поэтому критичный к времени исполнения и количеству используемых ресурсов. Программы обработки прерываний, в первую очередь, пишутся на ассемблере. Данные из программ прерывания передаются главной программе через общие регистры. Подпрограммы и процедуры Небольшие автономные модули, в которых содержатся неоднократно повторяющиеся действия. Управление подпрограммами осуществляются их вызовом с переменными параметрами. Процедуры оформляются почти также как и подпрограммы. Добавляется лишь объявление подставляемых переменных, которые определяют функциональная зависимость процедуры, и отличие от простой подпрограммы. Таблицы констант Непосредственные данные, используемые для управления программой или объектами, и для обработки данных. Они должны быть расположены после исполняемого кода, чтобы не затруднять процесс возможного дисассемблирования. Метка программы Это также непосредственные данные, но в текстовом виде, содержащие номер версии, дату создания, принадлежность изделию. Даже если в законченном изделии программа закрывается битами секретности, то на этапе программирования очень удобно иметь видимые идентификаторы внутри файла исполняемого кода. ============================================================================= 8-2 ===================================== Справочник по программированию «Bascom-8051» == 9. Выбор и установка типа процессора Bascom позволяет создавать программы для всех моделей процессоров семейства 8051. Установка модели процессора, используемого компилятором, производится в окне меню ”Option” - “Compiler” – “Misc”. Выбираемое из списка значение является именем одного из файлов, находящихся в директории “/BASCOM-8051”. При отсутствии необходимой модели, она может быть создана описанием внутренней регистровой структуры в виде нового файла. Файл должен содержать имена регистров и их адреса, имеющиеся в описываемой модели. Регистровый файл должен иметь несколько секций. [BIT] - битовая секция. Содержит имена и адреса специальных функциональных регистров (SFR), допускающих операции с отдельным битам. [BYTE] – байтовая секция содержит все остальные регистры SFR, обращение к которым возможно только как к байтам. [MISC] – смешанная секция содержит: - короткое имя микроконтроллера (оно записывается в файл отчета о результате компиляции); - имена дополнительных прерываний и адреса расположения их векторов. Прерывания процессора модели 8052 с именами INT0, INT1, TIMER0, TIMER1, SERIAL и TIMER2 считаются стандартными и не указываются; - начальный адрес расположения скомпилированного кода, который обычно указывается вслед за расположением последнего вектора прерывания для описываемой модели микроконтроллера; - указание о размере внутренней памяти (128 или 256 байт). Все указываемые цифровые значения записываются в шестнадцатеричном виде. Нужно сказать, что только регистровые файлы являются для компилятора источником имен внутренних регистров, действующих наравне с другими именами, определяемыми в программе пользователя. При необходимости можно изменять стандартные имена, применять другие способы их определения, исключать ненужные. В Bascom отсутствует аналогичный механизм определения стандартных имен битов SFR. Для определения последних, тех которые понадобятся в программе, нужно применять директиву Alias Ниже приведен пример содержимого такого файла для микроконтроллера типа 87C51FA. В примере для сокращения места несколько параметров записано в одну строку, но в оригинале с одной строке должен быть только один параметр. Файл 80c51fa.dat: [BIT] TCON = 88 P1 = 90 SCON = 98 IE = A8 P3 = B0 IP = B8 PSW = D0 ACC = E0 B = F0 P0 = 80 P2 = A0 T2CON = C8 [BYTE] SP = 81 DPL = 82 DPH = 83 PCON = 87 TMOD = 89 TL0 = 8A TL1 = 8B TH0 = 8C TH1 = 8D SBUF = 99 T2MOD = C9 TL2 = CC TH2 = CD RCAP2L = CA RCAP2H = CB IPH = BF CH = F9 CL = E9 CCAP0H = FA CCAP0L = EA CCAP1H = FB CCAP1L = EB CCAP2H = FC CCAP2L = EC CCAP3H = FD CCAP3L = ED CCAP4H = FE CCAP4L = EE CMOD = D9 CCAPM0 = DA CCAPM1 = DB CCAPM2 = DC CCAPM3 = DD CCAPM4 = DE SADEN = B9 SADDR = A9 [MISC] up = 8051FA PCA = 33 org = 36 IRAM = 256 В новой версии компилятора (начиная с 2.01) изменен DAT-файл. Ранее прерывание 2B всегда использовалось для TIMER2. Однако есть новые микросхемы , которые отличаются от стандартного 8052. Теперь вектор 2B должен быть определен с в xxx.DAT файле в секции [MISC]. ============================================================================= 9-1 ===================================== Справочник по программированию «Bascom-8051» == 10. Установка параметров Bascom Особенность среды Bascom заключается в том, что многие параметры микропроцессорной системы, для которой создается программа, могут задаваться автоматически с помощью меню настройки компилятора: - в меню “Options” – “Compiler” – “Communication” задается скорость последовательного канала и частота тактового кварцевого генератора. При этом для получения заданной скорости используется TIMER1; - в меню “Options” – “Compiler” – “I2C” определяются линии портов, подключенные к шине I2C. В этом же меню определяется порт приема сигналов интерфейса “RC5” (сигналов стандартного инфракрасного пульта дистанционного управления, например, телевизоров); - в меню “Options” – “Compiler” – “LCD” определяется линии портов, подключенные к символьному жидкокристаллическому индикатору (LCD). Таким способом, устанавливается только один режим работы LCD – четырехпроводная шина с побитным управлением каждой линии. Всего, для работы с индикатором используются шесть линий микроконтроллера – еще две для формирования сигналов “RS” (выбор регистра – управляющего или данных) и “E” (разрешение). Bascom не читает данные из внутренней памяти индикатора и не пользуется сигналом готовности LCD, поэтому линия “RW” индикатора заземляется (данные всегда записываются); - в меню “Options” – “Compiler” – “Misc” устанавливается тип модели процессора, размеры внутренней памяти и памяти программ. В этом меню может быть выбран и тип компилятора – установлен компилятор предыдущей версии “Bascom-LT”; - в меню “Options” – “Compiler” – “Misc” устанавливается перечень типов выходных файлов создаваемых компилятора. Сделанные настройки сохраняются между сессиями работы в программе до следующего изменения. Перечень настроек, предлагаемых Bascom, далеко не исчерпывает всех возможностей процессора, а только обеспечивает функционирования систем ввода-вывода, что облегчает процесс создания коротких испытательных программ. Так как директивы настройки параметров, содержащиеся в программе пользователя, имеют более высокий приоритет, то рекомендуется всегда включать в состав целевой программы блок инициализации конфигурации процессора. ============================================================================= 10-1 ===================================== Справочник по программированию «Bascom-8051» == 11. Распределение ресурсов микроконтроллера На первом этапе создания микропроцессорной системы до начала программирования необходимо решить несколько важных задач: а) разработать план использования ресурсов процессора, т.е. определить: как и какие внутренние устройства будут использоваться. Обычно, одновременно происходит и выбор устройств, с которыми будет работать микроконтроллер; б) выбрать модель процессора, обеспечивающий внутренними ресурсами, разработанный план действий. Кажется, что первая и вторая задачи едины, но тут надо вспомнить о дополнительных требованиях к разрабатываемому устройству, которые могут стать приоритетными – экономичность, напряжение питания, способ программирования (записи программы), возможность перепрограммирования и т.п. Здесь необходимо заложить некоторую избыточность производительности и, особенно, размеров памяти, обусловленную не стопроцентной эффективностью компилированного кода; в) выбрать средство аппаратной отладки, отвечающее задаче, решаемой отлаживаемой программой и ее параметрам. Если устройство отладки забирает у системы какие-либо аппаратные или программные ресурсы, то нужно попытааться обойтись без них, или, по крайней мере, использовать их наименьшей степени и в последнюю очередь. Например, порты процессора AT89C8252, используемые для последовательного программирования, не нужно без крайней необходимости использовать в схеме разрабатываемого устройства; г) провести моделирование и проверку самых важных алгоритмов обработки данных или управления физическими объектами с использование специализированных программ: “Micro-Cap”, “Mathcad”, “Quick-Basic” и т.п.; д) определить значения требуемой производительности систем ввода-вывода, вычислений, преобразований, реагирования на внешние события. Оценить возможность решения этих задач с необходимой скоростью, например, путем написания и запуска (даже в отладчике) тестовых программ с интересующими фрагментами. Рекомендуется испытать работу программ, управляющих реальными устройствами, особенно вновь применяемыми. Приблизительное время исполнения некоторых типовых операций указано в таблице. Действие Время исполнение, тактов Сложение и вычитание чисел с плавающей точкой 470 Умножение чисел с плавающей точкой 2100 Деление чисел с плавающей точкой 2500 Считывание (загрузка) 12 разр. АЦП (ЦАП) с программ. послед. интерфейсом 250 Считывание (загрузка) 12 разр. АЦП (ЦАП) с аппартн. послед. интерфейсом 30 Запись (считывание) четырехбайтового числа в EEPROM с интерфейсом I2C 10000(500) Запись байта в символьный модуль (4-битном/8-битной режиме) 300/150 Вывод сообщения длиной 10 символов со скоростью 9.6 Кбод 13 мс При успешном решении перечисленных задач можно переходить к составлению полной схемы устройства, управляемого микроконтроллером, и разработке рабочей программы. Если окажется, что производительность процессора недостаточна или задача слишком сложна, то следует разделить ее между несколькими процессорами или применить внешние устройства, например, расширить объем памяти или подключить дополнительный интерфейс. Очевидно, первый путь предпочтителен, по следующим соображения: а) экономическим – применение дополнительных микросхем микроконтроллеров незначительно изменит стоимость электронного устройства, т.к. стоимость современного стандартного микроконтроллера (аналога 8751) приблизительно равна пяти обычным логическим микросхемам, половине стоимости стандартного ЦАП, одной третьей стоимости даже простого АЦП, цене одного хорошего операционного усилителя или пары оптронов. Таким образом, экономия количества процессоров за счет усложнения схемы совершенно неоправданна; б) топологическим – малые размеры корпусов и отсутствие многочисленных линий связи между функциональными узлами, достигаемое применением локальных микроконтроллеров, будут даже способствовать снижению габаритов; в) упрощается программирование, т.к. две-три программы половинного размера напишутся и отладятся намного легче и быстрее, чем одна сложная. Это актуально при использовании “Bascom-8051”, с помощью которого такжже трудно создавать очень большие или сложные программы. Порядок подключения внешних устройства (приемников и источников управляющих сигналов и данных) к линиям микроконтроллера не имеет значения, если не используются уникальные свойства портов (альтернативные функции). Наличие альтернативных функций портов микроконтроллера, напротив, требует однозначной привязки внешних устройств к конкретным выводам процессора. Существует много вариантов использования и внутренних аппаратных средств. Ниже в таблице предлагается перечень аппаратных ресурсов микроконтроллера, которые предлагается для решения некоторых стандартных задач. ============================================================================= 11-1 ===================================== Справочник по программированию «Bascom-8051» == Задача микро- контроллера Рекомендуемые порты Используемые ресурсы Формирование частоты (вар.1) Только P1.0(T2) Таймер 2 в режиме самозагрузки. Достоинства: широкий диапазон частот и чистый сигнал. Процессор незагружен. Формирование частоты (вар.2) Любой Любой таймер, запрограммированный вызывать прерывание каждые полпериода, генерируемой частоты. В прерывании производится инверсия порта. Невозможно формировать частоту выше единиц килогерц. Имеется шум периода. Загрузка процессора незначительная. Формирование частоты (вар.3) Любой С помощью программ задержки формировать длительности импульса и паузы выходного сигнала. Полная загрузка процессора. Этот способ используется в операторе “Sound” Bascom. Недостаток – прерывания портят форму выходного сигнала. Измерение частоты (вар.1) Только P3.5(T1) Таймер 0 - формирует базу времени (интервал счета периодов измеряемой частоты). Таймер 1 – счетчик числа периодов. В прерывании таймера 0 запускает и останавливает таймер 1. В прерывании таймера 1 считается число переполнений в программном счетчике. Измерение периода (вар.1) Только P3.2(INT0) Таймер 0 – запускается или останавливается по спаду измеряемого сигнала. Частота заполнения таймера 0 - Fкв/12. Измерение периода (вар.2) Только P1.0(T2) Таймер 2 – предварительный делитель частоты. Таймер 0 счетчик длительности, который запускается или останавливается по переполнению таймера 2. Частота заполнения таймера 0 - Fкв/12. Клавиатура из 16 кнопок P0.0 – P0.3, P0.4 – P0.7 Организовать в виде матрицы 4 на 4. Для экономии портов возможно использование шины данных индикатора для опроса клавиатуры. Символьный индикатор P2.0 – P2.3, P2.4, P2.5 Индикатор используется в режиме управления по 4-разр. шине с побитным управлением портами, подключенными к индикатору. АЦП с после- довательным интерфейсом Любые и P3.3 - для сигнала го- товности Программный интерфейс SPI или Micro-Wire. Наличие у АЦП сигнала готовности позволяет организовать считывание по прерыванию. Могут потребоваться еще какие-то линии. АЦП с SPI интерфейсом P1.5, P1.6, P1.7 Аппаратный интерфейс SPI, если используется модель AT89C8252. ЦАП с после- довательным интерфейсом Любые или P1.5, P1.6, P1.7 Соответственно для программного или аппаратного интерфейса. В некоторых случаях удается использовать UART в режиме 3 (если он не используется по основному назначению) Светодиодный 7-сегментный индикатор P0.0 – P0.7, P2.0 - P2.2 В прерывании с частотой 300 – 1000 Гц производится программой вывод данных в мультиплексном режиме из внутреннего буфера, в котором формируется код всех сегментов индикатора. Вывод кода сегментов осуществляется через порт P0, номер знакоместа P2.0 - P2.2. ============================================================================= 11-2 ===================================== Справочник по программированию «Bascom-8051» == 12. Начальная инициализация системы Под инициализацией системы следует понимать определение всех начальных условий, необходимых компилятору для полного понимания последующего текста программы и правильной установки всех, используемых устройств микроконтроллера. На примере программы рассмотрим шаги начальной инициализации системы в той последовательности, в которой они записываются в программе.Приведенный пример все возможные установки и поэтому явно избыточен. Определить модель микроконтроллера указанием имени файла, содержащего имена и адреса используемых регистров. Можно не указывать, но тогда имя файла компилятор возмет из меню “Option”- “Compiler”-“Misc”. $Regfile "8052.DAT " В большинстве случаев требуется более 2 КБайт программной памяти. $large 'определим модель большой памяти Теперь нужно определить все символические имена, используемые в программе. '-------- определение констант -------- Dim Cit As Const &H10 'константа интегратора температуры *10 мс Const Cit = &H10 'так нужно записывать в последних версиях 'Переменные: определение битов -------- Dim N_dat As Bit 'бит "Есть новые данные" Dim B_entx As Bit 'разрешен прием Dim B_temp As Bit 'временные битовые данные Таким образом, можно определить привычные имена битов SFR. Ri Alias Scon.0 'бит RI Ti Alias Scon.1 'бит TI Ren Alias Scon.4 'бит Ren '-------- определение байтов ---------- Dim Temp As Byte 'временные данные Dim R_ch As Byte 'принятый символ Dim R_cch As Byte 'указатель буфера Dim Rang As Byte 'предел уровня (ослабление) Dim Frng As Byte 'предел частоты '-------- определение двухбайтовых ---- Dim R_bw As Integer '16-разр. двоичный код загрузки Dim R_rd As Integer '16-разр. резервный код ЦАП '-------- определение четырехбайтовых - Dim R_bd As Long '32-разр. двоичный код загрузки Dim Tmpl As Long '32-разр. временые данные '-------- определение переменных в формате с плаваюшей точкой Dim R_frq As Single 'регистр значения частоты Dim R_fld As Single 'регистр кода загрузки '-------- определение строковых переменных Dim R_lin As String * 6 'введеная строка Dim R_tmp As String * 5 'временая строка '--------------------- При использовании в программе процедур их нужно объявить в этом месте. 'Declare Sub Wrb_24c01(badr As Byte , Value As Byte) 'Declare Sub Rdb_24c01(badr As Byte , Value As Byte) '--------------------- Определим имена портов, подключенных к физическим устройствам. 'подключение синтезатора AD9850 B_data Alias P1.3 : B_clk Alias P1.4 : B_fqud Alias P1.5 : B_ress Alias P1.7 '--------------------- 'подключение ЦАП опорного уровня AD766 B_datu Alias P1.0 : B_clku Alias P1.1 : B_ldu Alias P1.2 '--------------------- Далее предусмотрено два варианта подключения: первый для целевой программы (рабочий), второй – для отдадки в эмуляторе, построенном на процессоре с шестью портами - 80C51GB, где порт P5 замещает порт P0, а порт P4 используется вместо P2. 'подключение поляризованных реле с 87C52 'B_dar0 Alias P0.0 : B_dar1 Alias P0.1 : B_dar2 Alias P0.2 : B_dar3 Alias P0.3 'B_cor0 Alias P2.7 : B_cor1 Alias P0.4 : B_cor2 Alias P0.5 : B_cor3 Alias P0.6 ============================================================================= 12-1 |