
- •М.Л.Кулиш
- •Содержание разделов
- •Некоторые советы по созданию больших программ
- •Приложение A. Переменные Бейсика
- •Приложение B. Система команд микроконтроллера 8051
- •Приложение C. Коды команд MCS-51
- •Типы данных и переменных
- •DEBOUNCE
- •LCD, LCDBUS, LCDPIN
- •Операторы Bascom-8051
- •Функции Bascom-8051
- •Элементы
- •Назначение и применение элементов языка Bascom
- •14. Программирование прерываний
- •Числовые переменные
- •Строковые переменные
- •Система команд микроконтроллера 8051
- •Команды передачи данных
- •Команды перехода
- •Команды перехода (продолжение)
- •Логические операции
- •Логические операции (продолжение)
- •Очистка А
- •Инвертирование А
- •Сдвиг А влево
- •Сдвиг А влево через перенос
- •Сдвиг А вправо
- •Сдвиг А вправо через перенос
- •Перестановка полубайтов А
- •SWAP A
- •Установка переноса
- •SETB C
- •Установка бита
- •SETB bit
- •Сброс переноса
- •Сброс бита
- •Загрузка переноса битом
- •Загрузка бита переносом
- •Тестирование бита Z
- •Тестирование переноса
- •Тестирование битов
- •Если bit=C
- •Инверсия бита
- •Инверсия переноса
- •Команды арифметических операций
- •Сложение аккумулятора с РОН
- •ADD A, direct
- •ADD A, #data
- •ADDC A, R0
- •ADDC A, R1
- •ADDC A, R2
- •ADDC A, R3
- •ADDC A, R4
- •ADDC A, R5
- •ADDC A, R6
- •ADDC A, R7
- •ADDC A, direct
- •ADDC A, @R0
- •ADDC A, @R1
- •ADDC A, #data
- •SUBB A, R0
- •SUBB A, R1
- •SUBB A, R2
- •SUBB A, R3
- •SUBB A, R4
- •SUBB A, R5
- •SUBB A, R6
- •SUBB A, R7
- •SUBB A, direct
- •SUBB A, @R0
- •SUBB A, @R1
- •SUBB A, #data
- •Команды арифметических операций (продолжение)
- •Инкрементирование А
- •Инкрементирование РОН
- •INC direct
- •Инкрементирование DPTR
- •INC DPTR
- •Декрементирование А
- •Декрементирование РОН
- •DEC direct
- •Умножение
- •Деление
- •Десятичная коррекция
===================================== Справочник по программированию «Bascom-8051» ==
$SERIALINPUT = метка |
Определить имя программы последовательного ввода |
4-4 |
$SERIALOUTPUT = метка |
Определить имя программы последовательного вывода |
4-4 |
$SERIALINPUT2LCD |
Определить направление ввода-вывода (из посл. порта в LCD) |
4-4 |
$SIM |
Исключить для отладчика циклы ожидания (при задержках) |
4-4 |
Устройства и ресурсы, поддерживаемые системой Bascom-8051 (резервированные имена) |
||
|
|
|
1WIRE |
Однопроводная линия: порт подключения |
4-4,4-7 |
COUNTER0, 1 и 2 |
Счетчики таймеров 0, 1 и 2 |
4-10 |
EEPROM |
Перепрограммируемая память модели AT89S8252 |
4-11 |
DEBOUNCE |
Параметр периодичности опроса порта |
19,4-7 |
I2C: I2CDELAY |
Параметр частоты синхронизации интерфейса I2C |
4-7 |
LCD, LCDBUS, LCDPIN |
LCD-модуль: тип (размер), шина(разрядность) и подключение |
4-7 |
I2C: SDA, SCL |
I2C интерфейс: порты подключения |
4-8 |
Microwire: |
Четырехпроводной последовательный интерфейс |
4-8,4-28 |
DIN, DOUT, CS, CLOCK |
|
|
SERVOS |
Генератор управления севроприводами |
4-8,4-34 |
SPI: DIN, DOUT, CS, CLK |
SPI интерфейс: порты подключения |
4-8 |
TIMER0, 1 и 2 |
Таймеры 0, 1 и 2 |
4-8,4-9 |
WATCHDOG |
Будильник модели AT89S8252 |
4-9 |
INT0 |
Внешнее прерывание 0 |
4-13,4-33 |
INT1 |
Внешнее прерывание 0 |
4-13,4-33 |
PCA |
Прерывание от массива счетчиков модели 8хС51FA |
4-13,4-33 |
SERIAL |
Прерывание от последовательного приемопередатчика |
4-13,4-33 |
TIMER0 |
Прерывание таймера 0 |
4-13,4-33 |
TIMER1 |
Прерывание таймера 1 |
4-13,4-33 |
TIMER2 |
Прерывание таймера 2 |
4-13,4-33 |
SOUND |
Генератор частоты звука |
4-35 |
RC |
Измерение временного интервала (АЦП с RC-цепочкой) |
4-15 |
RC5 |
Приемник кода интерфейса RC5 |
4-16 |
|
Операторы Bascom-8051 |
|
|
|
|
.. ALIAS .. |
Команда переименования переменных |
4-5 |
BITWAIT bit Set(Reset) |
Ждать установления (или сброса) бита |
4-5 |
BREAK |
Остановиться в отладчике |
4-5 |
CALL имя |
Вызвать подпрограмму (функцию) с именем |
4-6 |
CASE n : действие |
При значении n совершить действие |
4-6 |
CASE IS : условие |
При значении , удовлетворяющем условию, совершить действие |
4-6 |
CLOSE .. |
Закрыть устройство (канал) ввода или вывода |
4-30 |
CONFIG устройство |
Установить режим одного из устройств микроконтроллера |
4-7 ... 4-9 |
CONST |
Определить имя константы |
4-9 |
DATA |
Объявить блок непосредственных данных в памяти команд |
4-10 |
DEBOUNCE |
Производить периодическую проверку состояния порта |
4-11 |
DECLARE SUB |
Объявить процедуру (функцию) |
4-12 |
DEFBIT |
Объявить имя битовой переменной |
4-12 |
DEFBYTE |
Объявить имя байтовой переменной |
4-12 |
DEFINT |
Объявить имя двухбайтовой переменной (со знаком) |
4-12 |
DEFWORD |
Объявить имя двухбайтовой переменной |
4-12 |
DEFLCDCHAR |
Определить изображение специального символа |
4-12 |
DELAY |
Короткая задержка |
4-12 |
DIM .. AS .. |
Определить размерность переменной или константы |
4-13 |
DISABLE устройство |
Запретить прерывание от устройства |
4-13 |
DO .. |
Определение начало простого цикла |
4-13 |
.. ELSE .. |
Определить действия при невыполнении условий |
4-20 |
.. ELSEIF.. условий |
Определить действия при невыполнении условий, но при |
4-20 |
|
выполнении других |
|
ENABLE устройство |
Разрешить прерывание от устройства |
4-13 |
END |
Закончить программу (остановиться) |
4-14 |
.. END IF |
Закончить операцию проверки и выполнения условий |
4-20 |
============================================================================= 1-2
===================================== Справочник по программированию «Bascom-8051» ==
ERASE |
Уничтожить переменную (освободить память) |
|
4-14 |
|
EXIT .. |
Выйти из цикла |
|
4-14 |
|
For…To/Downto...Step... |
Определение цикла с переменным параметром |
|
4-14 |
|
GET |
Взять данные из устройства (канала) ввода |
|
4-30 |
|
GOSUB имя |
Вызвать подпрограмму с именем |
|
4-16 |
|
GOTO метка |
Перейти на метку |
|
4-16 |
|
.. LOOP |
Замкнуть простой цикл |
|
4-13 |
|
.. NEXT |
К следующему значению в цикле с переменным параметром |
|
4-14 |
|
IDLE |
Выполнить останов процессора |
|
4-14 |
|
IF .. |
Начать проверять условия |
|
4-20 |
|
INPUT |
Ввести цифровое значение в десятичном виде |
|
4-22 |
|
INPUTHEX |
Ввести цифровое значение в шестнадцатеричном виде |
|
4-22 |
|
INPUTBIN |
Ввести двоичное число (без преобразования) |
|
4-22 |
|
INKEY |
Ввести значение символа из приемного буфера |
|
4-23 |
|
LCD |
Вывести десятичное значение на индикатор |
|
4-23 |
|
LCDHEX |
Вывести шестнадцатеричное значение на индикатор |
|
4-23 |
|
LOAD TIMER0, 1 и 2 |
Загрузка регистров таймера, определяющих частоту |
|
4-25 |
|
MODE0, 1, 2, 3, 4, 5 |
Режимы таймеров, устанавливаемые при инициализации |
|
4-13 |
|
NOSAVE |
Запретить автоматическое сохранение регистров в прерывании |
|
4-29 |
|
ON [Interrupt] |
Объявление используемого прерывания |
|
4-30 |
|
ON x GOTO (GOSUB) |
Переход (вызов) в зависимости от значения переменой x |
|
4-30 |
|
OPEN .. |
Открыть устройство (канал) ввода или вывода |
|
4-30 |
|
POWERDOWN |
Выключить генератор и остановить процессор |
|
4-32 |
|
Вывести данные в десятичном виде в последовательный порт |
|
4-32 |
|
|
PRINTHEX |
Вывести данные в шестнадцатеричном виде в посл. порт |
|
4-32 |
|
PRINTBIN |
Вывести двоичные данные в последовательный порт |
|
4-33 |
|
PRIORITY ON(OFF) .. |
Установить (снять) приоритет прерывания |
|
4-33 |
|
PUT |
Поместить данные в устройство (канал) вывода |
|
4-30 |
|
READEEPROM |
Считать данные из EEPROM модели AT89S8252 |
|
4-11 |
|
READ |
Считать данные из секции DATA |
|
4-33 |
|
REM или ‘ |
Указывает комментарии в тексте программы |
|
4-34 |
|
RESET |
Сбросить (установить в «0») бит. Применяется и к устройствам |
|
4-34 |
|
RESTORE |
Указать блок DATA для считывания оператором READ |
|
4-33 |
|
RETURN |
Возврат из подпрограммы |
|
4-34 |
|
ROTATE .. |
Сдвигать переменную (влево – LEFT / вправо RIGHT) |
|
4-34 |
|
SELECT CASE x |
Выбрать действие в зависимости от значения переменной x |
|
4-6 |
|
SET |
Установить (в «1») бит. Применяется к устройствам |
|
4-34 |
|
SERVO |
Установить длительность импульса |
|
4-34 |
|
SHIFTIN |
Считать данные из сдвигового регистра |
|
4-35 |
|
SHIFTOUT |
Записать данные в сдвиговый регистр |
|
4-35 |
|
SOUND |
Генерация частоты на линии порта |
|
4-35 |
|
SPIIN |
Считать данные через SPI |
|
4-36 |
|
SPIOUT |
Записать данные через SPI |
|
4-36 |
|
START TIMER0, 1, 2 |
Запустить счетчик таймера 0, 1 или 2 |
|
4-37 |
|
STOP TIMER0, 1, 2 |
Остановить счетчик таймера 0, 1 или 2 |
|
4-37 |
|
STOP |
Остановить исполнение программы |
|
4-37 |
|
SUB |
Определить подпрограмму или процедуру |
|
4-38 |
|
SWAP |
Поменять местами значения двух переменных одного типа |
|
4-39 |
|
.. THEN .. |
Определить действия при выполнении условий |
|
4-20 |
|
.. UNTIL .. |
Определить условия выхода их цикла |
|
4-12 |
|
WAIT |
Ждать секунды |
|
4-12 |
|
WAITKEY |
Ждать приема символа |
|
4-23 |
|
WAITMS |
Ждать миллисекунды |
|
4-12 |
|
WHILE .. WEND |
Цикл, выполняемый, пока условия остаются истинными |
|
4-39 |
|
WRITEEEPROM |
Записать данные в EEPROM модели AT89S8252 |
|
4-11 |
|
|
Логические операции Bascom-8051 |
|
|
|
|
|
|
|
|
X AND Y |
Операция: логическое И |
|
4-5 |
|
X OR Y |
Операция: логическое ИЛИ |
|
4-5 |
|
============================================================================= |
1-3 |
===================================== Справочник по программированию «Bascom-8051» ==
NOT Y |
|
Логическое инвертирование |
4-5 |
X XOR Y |
|
Операция: ИСКЛЮЧАЮЩЕЕ ИЛИ |
4-5 |
|
|
Функции Bascom-8051 |
|
|
|
|
|
ABS(x) |
|
Возвращает абсолютное значение знаковой переменой |
4-5 |
ASC(s) |
|
Возвращает код символа |
4-5 |
BDC(x) |
|
Выводит число в двоично-десятичном виде |
4-5 |
СHR(x) |
|
Преобразует цифру в символ (записывает как символ) |
4-6 |
CPEEK(x) |
|
Возвращает значение байта из памяти команд |
4-10 |
DECR x |
|
Уменьшить переменную на единицу |
4-12 |
INCR x |
|
Увеличить переменную на единицу |
4-12 |
FUSING() |
|
Возвращает строку с форматир. значением числа с плав. точкой |
4-15 |
GETRC() |
|
Возвращает значение постоянной времени RC-цепочки |
4-15 |
GETRC5 |
|
Возвращает значение кода из инфракрасного порта (ПДУ) |
4-16 |
HEX() |
|
Возвращает строку с шестнадцатеричным значением числа |
4-16 |
HEXVAL() |
|
Возвращает значение строки в шестнадцатеричном виде |
4-17 |
HIGH() |
|
Возвращает старший байт двухбайтной переменной |
4-17 |
HIGHW() |
|
Выделить старшие два байта четырехбайтовой переменной |
4-17 |
INP() |
|
Возвращает значение из ячейки внешней памяти |
4-21 |
INSTR () |
|
Определить позицию включения в строке |
4-21 |
LCASE() |
|
Возвращает строку со строчными символами (в нижний регистр) |
4-23 |
LEFT() |
|
Возвращает символы строки, расположенные слева |
4-25 |
LOW() |
|
Возвращает младший байт двухбайтной переменной |
4-17 |
LOWW() |
|
Выделить младшие два байта четырехбайтовой переменной |
4-17 |
LEN() |
|
Возвращает длину строки |
4-25 |
LOOKUP |
|
Возвращает значение из таблицы числовых данных |
4-26 |
LOOKUPSTR |
|
Возвращает значение из таблицы строковых данных |
4-26 |
MAKEBCD(x) |
|
Преобразует двоичное число в двоично-десятичный код |
4-26 |
MAKEDEC(x) |
|
Преобразует число в двоично-десятичном виде в двоичное |
4-26 |
MAKEINT() |
|
Склеивает двухбайтное число из двух однобайтных |
4-26 |
MAX() |
|
Выбрать максимальное значение массива |
4-27 |
MID() |
|
Возвращает символы из середины строки (или вставляет) |
4-25 |
MIN() |
|
Выбрать минимальное значение массива |
4-27 |
MOD |
|
Возвращает остаток от деления двух переменных |
4-27 |
OUT |
|
Записать значение во внешнюю память |
4-21 |
PEEK() |
|
Возвращает значение байта, из внутренней памяти |
4-32 |
POKE |
|
Записать байт в ячейку внутренней памяти |
4-32 |
RIGHT() |
|
Возвращает символы строки, расположенные справа |
4-25 |
SPACE() |
|
Возвращает строку, заполненную пробелами |
4-36 |
STRING() |
|
Возвращает строку, заполненную одинаковыми символами |
4-36 |
STR() |
|
Возвращает строку с десятичным значением числа |
4-16,4-37 |
VAL() |
|
Возвращает значение строки в десятичном виде |
4-17,4-39 |
VARPTR() |
|
Возвращает адрес переменной, располженной во внутр. памяти |
4-39 |
UCASE() |
|
Возвращает строку с прописными символами (в верх. регистр) |
4-23 |
|
Операторы Bascom-8051 для работы с однопроводной линией |
|
|
|
|
|
|
1WREAD |
|
Считать данные по однопроводной шине |
4-4 |
1WRESET |
|
Сбросить однопроводный интерфейс |
4-4 |
1WWRITE |
|
Записать данные по однопроводной шине |
4-4 |
|
Операторы Bascom-8051 для работы с двухпроводной линией I2C |
|
|
|
|
|
|
I2CRECEIVE |
|
Считать данные из устройства по шине I2C |
4-18 |
I2CSEND |
|
Записать данные в устройство по шине I2C |
4-18 |
I2CSTART |
|
Генерировать условия старта на шине I2C |
4-19 |
I2CSTOP |
|
Генерировать стоп-условия окончания обмена по шине I2C |
4-19 |
I2CRBYTE |
|
Принять один байт из I2C-устройства |
4-19 |
I2CWBYTE |
|
Послать байт в I2C-устройство |
4-19 |
============================================================================= 1-4

===================================== Справочник по программированию «Bascom-8051» ==
Операторы Bascom-8051 для работы с четырех линией Microwire
MWINIT |
Установить интерфейса Microwire в исходное состояние |
|
4-28 |
MWREAD |
Считать значение из интерфейса Microwire |
|
4-28 |
MWWRITE |
Записать значение в интерфейса Microwire |
|
4-28 |
MWWOPCODE |
Записать код операции в устройство с интерфейсом Microwire. |
|
4-28 |
Операторы Bascom-8051 для работы с синхронным последовательным интерфейсом |
|
||
|
|
|
|
SHIFTIN |
Считать данные из сдвигового регистра |
|
4-35 |
SHIFTOUT |
Записать данные в сдвиговый регистр |
|
4-35 |
SPIIN |
Считать данные через SPI |
|
4-36 |
SPIOUT |
Записать данные через SPI |
|
4-36 |
Команды Bascom-8051 для работы с последовательным асинхронным интерфейсом (UART)
CLOSE .. |
Закрыть устройство (канал) ввода или вывода |
4-31 |
GET |
Взять данные из устройства (канала) ввода |
4-31 |
INKEY |
Ввести значение символа из приемного буфера |
4-23 |
INPUT |
Ввести цифровое значение в десятичном виде |
4-22 |
INPUTHEX |
Ввести цифровое значение в шестнадцатеричном виде |
4-22 |
INPUTBIN |
Ввести двоичное число (без преобразования) |
4-22 |
OPEN .. |
Открыть устройство (канал) ввода или вывода |
4-31 |
Вывести данные в десятичном виде в последовательный порт |
4-32 |
|
PRINTHEX |
Вывести данные в шестнадцатеричном виде в посл. порт |
4-32 |
PRINTBIN |
Вывести двоичные данные в последовательный порт |
4-32 |
PUT |
Поместить данные в устройство (канал) вывода |
4-31 |
WAITKEY |
Ждать приема символа |
4-23 |
Операторы Bascom-8051 для работы с символьным индикатором |
|
|
|
|
|
.. BLINK |
Мигать курсором (установить в виде мигающего блока) |
4-24 |
CURSOR .. |
Управление курсором (включить - ON / выключить - OFF) |
4-24 |
DISPLAY .. |
Управление индикатором (включить - ON / выключить - OFF) |
4-24 |
HOME .. |
Поставить курсор в начало строки |
4-24 |
..FOURTH или .. F |
Поставить курсор на четвертую строку |
4-24 |
FOURTHLINE |
Поставить курсор на четвертую строку |
4-24 |
LCD .. |
Вывести десятичное значение на индикатор |
4-23 |
LCDHEX .. |
Вывести шестнадцатеричное значение на индикатор |
4-23 |
LOCATE y , x |
Расположить курсор в строке y, в знакоместе x |
4-24 |
..LOWER или .. L |
Поставить курсор на строку ниже |
4-24 |
LOWERLINE |
Поставить курсор на строку ниже |
4-24 |
.. NOBLINK |
Не мигать курсором (установить в виде подчеркивателя) |
4-24 |
SHIFTLCD .. |
Сдвинуть изображение (влево - LEFT / вправо RIGHT) |
4-24 |
SHIFTCURSOR .. |
Сдвинуть курсор на позицию (влево – LEFT / вправо RIGHT) |
4-24 |
.. THIRD или .. T |
Поставить курсор на третью строку |
4-24 |
THIRDLINE |
Поставить курсор на третью строку |
4-24 |
.. UPPER или .. U |
Поставить курсор на верхнюю строку |
4-24 |
UPPERLINE |
Поставить курсор на нижнюю строку |
4-24 |
Операторы Bascom-8051 для работы с битовыми переменными |
|
|
|
|
|
BITWAIT bit Set(Reset) |
Ждать установления (или сброса) бита |
4-5 |
DEBOUNCE port .. |
Производить периодическую проверку состояния порта |
4-7,4-11 |
IF bit = 0 THEN .. |
Проверять бит на 0 |
4-20 |
IF bit = 1 THEN .. |
Проверять бит на 1 |
4-20 |
SET bit |
Установить бит в «1». |
4-34 |
RESET bit |
Сбросить бит в «0». |
4-34 |
============================================================================= 1-5

===================================== Справочник по программированию «Bascom-8051» ==
Новые операторы Bascom-8051, начиная с версии 1.0.0.19
$MAP |
Записывать в файл сообщений адреса начала кода каждой строки |
4-2 |
$NONAN |
Заменяет вывод сообщения “NAN” на сообщение “0.0” |
4-3 |
$REGFILE=[файл] |
Указать имя файла для определения используемых регистров |
4-3 |
LCASE() |
Возвращает строку со строчными символами (в нижний регистр) |
4-23 |
UCASE() |
Возвращает строку с прописными символами (в верх. регистр) |
4-23 |
Новые возможности операторов Bascom-8051, начиная с версии 1.0.0.19 |
|
|
|
|
|
CONST |
Определить имя константы |
4-9 |
SHIFTIN |
Считать данные из сдвигового регистра |
4-35 |
FUSING() |
Возвращает строку с форматир. значением числа с плав. точкой |
4-15 |
Новые операторы Bascom-8051, начиная с версии 1.0.0.20 |
|
|
|
|
|
$EXTERNAL |
Указать используемые подпрограммы |
4-1 |
$LIB |
Указать имя библиотеки с подпрограммами на ассемблере |
4-2 |
$NOLCDINIT |
Запретить инициализацию LCD |
4-3 |
CONFIG Microwire |
Установка способа подключения к шине Microwire |
4-8 |
HIGHW() |
Выделить старшие два байта четырехбайтовой переменной |
4-17 |
INSTR () |
Определить позицию включения в строке |
4-21 |
LOWW() |
Выделить младшие два байта четырехбайтовой переменной |
4-17 |
MIN(), MAX() |
Выбрать минимальное или максимальное значение массива |
4-26 |
MWINIT |
Установить интерфейса Microwire в исходное состояние |
4-28 |
MWREAD |
Считать значение из интерфейса Microwire |
4-28 |
MWWRITE |
Записать значение в интерфейса Microwire |
4-28 |
MWWOPCODE |
Записать код операции в устройство с интерфейсом Microwire. |
4-28 |
Новые возможности операторов Bascom-8051, начиная с версии 1.0.0.20 |
|
|
|
|
|
INPUT |
Добавлена опция TIMEOUT |
4-22 |
IF X=”A” |
Добавлена возможность сравнения с символьной константой |
4-20 |
ON .. , PRIORITY .. |
Добавлена поддержка PCA (80С51FA), как стандартной модели |
4-29,4-33 |
Новые директивы, функции и операторы Bascom-8051, начиная с версии 2.04 |
|
|
|
|
|
$BGF=[файл] |
Вставить в код программы графический файл BMP |
Нет* |
$NONULL = x |
Управление форматом текстовых данных |
4-3 |
$TIMEOUT |
Разрешить использовать опцию TIMEOUT |
4-4 |
CONFIG GRAPGLCD |
Поддержка графического индикатора – установка конфигурации |
Нет |
CONFIG PRINT |
Определение дополнительной линии управления для RS-485 |
4-9 |
PSET |
Вывести точку на графический индикатор |
Нет |
REPLACE |
Замена одних символов в строке другими |
4-35 |
RND() |
Функция возвращающая случайное число в указанном диапазоне |
4-31 |
SHOWPIC |
Вывести на графический индикатор картинку |
Нет |
SPC() |
Вывод заданного количества пробелов в операторах Print и Lcd |
4-37 |
Новые возможности операторов Bascom-8051, начиная с версии 2.04 |
|
|
|
|
|
IF … THEN … ELSE … |
Добавлена возможность записи оператора условий в одну строку |
4-20 |
OPEN … INVERTED … |
Добавлена опция инверсии программного UART |
4-32 |
… NOCS = x … |
Добавленна опция NOCS оператор CONFIG SPI |
4-9 |
… NOINT |
Добавлена опция запрещения прерывания при генерации звука |
4-37 |
… TIMEOUT = x … |
Изменены условия использования этой опции |
4-23 |
CLS TEXT, CLS GRAPH |
Очистка графического индикатора |
Нет |
CLS BOTH |
|
|
* - не описаны |
|
|
============================================================================= 1-6
===================================== Справочник по программированию «Bascom-8051» ==
2. Введение
Bascom-8051 ® - программная среда для создания исполняемого кода микроконтроллеров семейства 8051. В основе Bascom-8051 находится компилятор программ, написанных на языке высокого уровня близкого к стандартному Бейсику. Кроме компилятора с состав пакета Bascom входит текстовый редактор, построчный отладчик-симулятор (с программными эмуляторами терминала, символьного индикатора, EEPROM), упрощенный эмулятор терминала (без файлового сервиса), контекстная информационно-справочная система и утилиты загрузки аппаратных эмуляторов и программаторов. Программы на Бейсике могут создаваться в любом текстовом редакторе, т.к. содержит только текстовые конструкции. Чтобы комментарии на русском языке были читаемы в окнах Bascom, тексты следует выполнять в кодировке «Windows» (ANSI).
Язык программирования Bascom составляют:
директивы - указания для компилятора, определяющие порядок компиляции и конфигурацию среды создаваемой программы;
операторы и функции Бейсика, преобразуемые в исполняемый код; переменные и константы, которые могут быть представлены в виде битов, одно-, двух- и четырехбайтовых
чисел без знака и со знаком (записанных в дополнительном коде), текстовых строк, а также чисел в стандартном формате с плавающей точкой. Переменные могут быть организованы в виде массивов с возможностью доступа с помощью указателей (индексных переменных);
элементы стандартного ассемблера процессора 8051. Ассемблерные вставки могут располагаться в любом месте программы без ограничений;
файл (файлы) описания регистров микроконтроллера.
Производительность кода, созданного на основе библиотек Bascom на 25-50 % ниже аналогичных ассемблерных программ. По сравнению с программированием на ассемблере эффективность использования ресурсов оперативной памяти ниже на 30-50 %, программной – на 10-25 %. Однако, Bascom обеспечивает существенное сокращение затрат времени программирования. Кроме того, встроенная мощная поддержка многих стандартных физических устройств, наиболее часто применяемых в микропроцессорных системах, обеспечивает дополнительные удобства. По сравнению с компиляторами языка Си, Bascom дает намного более компактный код (60-80 % от кода Си при выполнении аналогичных задач). Еще одна особенность Bascom - минимальные начальные затраты по созданию работоспособной программы. Компиляция всего нескольких строк может дать полностью рабочую программу, пригодную для записи в кристалл.
Компилятор позволяет создавать программы для всех моделей микроконтроллеров, совместимых по набору команд со стандартным 8051. Предусмотрены средства настройки компилятора под любую модель процессора с любым набором дополнительных регистров относительно модели 8051 или 8052. Все имена регистров, используемые в программе, определяются внешним файлом, описывающим их адреса.
Далее приведено исчерпывающее описание всех директив, операторов и функций Bascom, сопровождаемыми примерами их использования. Кроме этого, рассмотрены многие вопросы практического программирования. Дается множество примеров, которые взяты из действующих программ или специально написанных для соответствующих случаев. Почти во всех примерах намеренно оставлены все компоненты программы, обеспечивающие ее реальную работоспособность, хотя это и создает впечатление перегруженности и многократного повторения одинаковых фрагментов.
В результате компиляции могут быть получены файлы исполняемого кода в бинарном виде или HEXформате. Компилятор также может создавать файлы сообщений (о распределении памяти и обнаруженных ошибках) и файлы для собственного отладчика.
Настоящее описание Bascom-8051” неоднократно дополнялось по мере выхода новых версий компилятора. Следующее далее описание директив, операторов и функций соответствует последней версии компилятора, существующей на момент выхода очередной редакции (смотри дату на 1-м листе). Последующие разделы могут содержать устаревшие сведения, хотя и их содержание дополняется и корректируется, но не столь обязательно. Это обусловлено тем, что практически не существует ограничений на использование обновленных компиляторов для старых исходных текстов (совместимость почти 100 %, можно написать только лучше и больше).
В версиях 2.хх произошло заметное обновление библиотек – в результате размер кода сокращается по сравнению с компиляторами версий 1.хх на 5-7 %.
============================================================================= 2-1