ВинРадиоФорум - первый радиолюбительский портал Винничины      VinRadioForum - the first radioamateur portal of the Vinnitsa region

ВинРадиоФорум

Объявление

Винницкий телеграфЪ

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ВинРадиоФорум » Програмирование » QBASIC


QBASIC

Сообщений 1 страница 4 из 4

1

Bascom – 8051.

Программная среда для разработки программ встраиваемых микроконтроллеров семейства 8051. Язык программирования близок к стандартному Бейсику (QBASIC) с возможностью использования вставок на стандартном Ассемблере. Простой интерфейс, легкая настройка и очень понятный синтаксис команд и операторов. Настройка на любую модель процессора семейства 8051 без ограничений. Исполняемый код получается даже после компиляции одной строки. Качество исполняемого кода, организации и эффективность близки к Ассемблеру. Компилятор работает в среде “Windows-95”, ”Windows-98” и старше. Минимальные требования к компьютеру: более 8 Мбайт ОЗУ и около 3 Мбайт дискового пространства.

Более подробно о компиляторе “Bascom-8051” см  описание.

Обеспечивает:

весь диапазон представления числовых данных, от битовых переменных до чисел с в формате с плавающей точкой (с 24-битной мантиссой);

операции со строковыми переменными;

операции с массивами индексированных переменных;

полный набор программ преобразования форматов данных;

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

арифметические операции с числами в формате с плавающей точкой;

все стандартные операции проверки условий, циклов, переходов и вызова подпрограмм;

поддержку множества аппаратных устройств.

Более подробно о элементах языка смотри Перечень элементов языка.

Имеются операторы для работы с устройствами, расположенными на кристалле микроконтроллера, и внешними устройствами, наиболее часто используемые в микропроцессорных системах. Наиболее мощная поддержка предлагается для работы с последовательным портом и символьным индикатором. Операторы “Bascom-8051” рассчитаны на работу с внутренней так и с внешней памятью данных (ОЗУ).

Пример законченной программы. http://cqham.ru/bascom2.htm#5

“Bascom-8051” разработан фирмой MSC Electronics.
Вопросы и ответы - смотри в (FAQ). http://cqham.ru/undercon.htm

О Bascom-8051

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. Все имена регистров, используемые в программе, определяются внешним файлом, описывающим их адреса.

Компилятор позволяет расширять набор операторов и функций за счет наличия механизма определения процедур.

В результате компиляции могут быть получены файлы исполняемого кода в бинарном виде или HEX-формате. Компилятор также может создавать файлы сообщений (о распределении памяти и обнаруженных ошибках) и файлы для собственного отладчика.

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

М.Кулиш.

Почтовый ящик для ответов на вопросы по “Bascom-8051” :
bobkey@online.ru,
Владимир (RZ6AT).

0

2

Перечень элементов языка “Bascom-8051”
Знаки соотношения и вычисления Bascom-8051
= Приравнять, преобразовать, переписать
+ - * / \ Арифметические операции
= < > <= >= <> Операторы соотношения
“ ; : , Разделители операций и данных

Типы данных и переменных
BIT Бит
BYTE Байт (без знака)
CONST Константа (все типы)
INTEGER Двухбайтовая переменная со знаком
LONG Четырехбайтовая переменная со знаком
SINGLE Четырехбайтовая переменная с плавающей точкой
STRING Символьная переменная (строка символов)
WORD Двухбайтовая переменная без знака
Array(n) Массив числовых переменных (индексированных) любого типа

Числа (константы), понимаемые компилятором Bascom-8051
10, 12345, -100 Целые десятичные положительные и отрицательные
&h00FF, &h10 Целые шестнадцатеричные (одно-, двух- и четырехбайтные)
&b01010101 Целые двоичные (одно-, двух- и четырехбайтные)
123.456, 0.12 Десятичные, задаваемые в формате с плавающей точкой
“String Data” Строковая константа (до 254 символов)

Директивы компилятора Bascom-8051
$ASM Начать ассемблерный блок
$BAUD = бод Установить бодовую скорость системы
$CRYSTAL = Гц Объявить частоту тактового генератора
$DEFAULT XRAM Начать располагать переменные во внешней памяти
$END ASM Закончить ассемблерный блок
$INCLUDE [файл] Включить в процесс компиляции внешний файл
$IRAMSTART = адрес Начать располагать во внутренней памяти с адреса
$LARGE Установить большую модель памяти
$LCD = адрес Обращаться по шине к ЖКИ-модулю по указанному адресу
$NOBREAK Пропускать при компиляции команды останова (для отладчика)
$NOINIT Не инициализировать микроконтроллер автоматически
$NOSP Не устанавливать стек автоматически
$OBJ Вставить строчку объектного кода
$RAMSIZE = размер Установить размер внешней памяти
$RAMSTART = адрес Установить начальный адрес внешней памяти
$ROMSTART = адрес Установить начальный адрес памяти программы
$SERIALINPUT = метка Определить имя программы последовательного ввода
$SERIALOUTPUT = метка Определить имя программы последовательного вывода
$SERIALINPUT2LCD Определить направление ввода-вывода (из посл. порта в LCD)
$SIM Исключить для отладчика циклы ожидания (при задержках)

Операторы Bascom-8051
.. ALIAS .. Команда переименования переменных
BITWAIT bit Set(Reset) Ждать установления (или сброса) бита
BREAK Остановиться в отладчике
CALL имя Вызвать подпрограмму (функцию) с именем
CASE n : действие При значении n совершить действие
CASE IS : условие При значении , удовлетворяющем условию, совершить действие
CLOSE .. Закрыть устройство (канал) ввода или вывода
CONFIG устройство Установить режим одного из устройств микроконтроллера
DATA Объявить блок непосредственных данных в памяти команд
DEBOUNCE Производить периодическую проверку состояния порта
DECLARE SUB Объявить процедуру (функцию)
DEFBIT Объявить имя битовой переменной
DEFBYTE Объявить имя байтовой переменной
DEFINT Объявить имя двухбайтовой переменной (со знаком)
DEFWORD Объявить имя двухбайтовой переменной
DEFLCDCHAR Определить изображение специального символа
DELAY Короткая задержка
DIM .. AS .. Определить размерность переменной или константы
DISABLE устройство Запретить прерывание от устройства
DO .. Определение начало простого цикла
.. ELSE .. Определить действия при невыполнении условий
.. ELSEIF.. условий Определить действия при невыполнении условий, но при выполнении других
ENABLE устройство Разрешить прерывание от устройства
END Закончить программу (остановиться)
.. END IF Закончить операцию проверки и выполнения условий
ERASE Уничтожить переменную (освободить память)
EXIT .. Выйти из цикла
For…To/Downto...Step... Определение цикла с переменным параметром
GET Взять данные из устройства (канала) ввода
GOSUB имя Вызвать подпрограмму с именем
GOTO метка Перейти на метку
.. LOOP Замкнуть простой цикл
.. NEXT К следующему значению в цикле с переменным параметром
IDLE Выполнить останов процессора
IF .. Начать проверять условия
INPUT Ввести цифровое значение в десятичном виде
INPUTHEX Ввести цифровое значение в шестнадцатеричном виде
INPUTBIN Ввести двоичное число (без преобразования)
INKEY Ввести значение символа из приемного буфера
LCD Вывести десятичное значение на индикатор
LCDHEX Вывести шестнадцатеричное значение на индикатор
LOAD TIMER0, 1 и 2 Загрузка регистров таймера, определяющих частоту
MODE0, 1, 2, 3, 4, 5 Режимы таймеров, устанавливаемые при инициализации
NOSAVE Запретить автоматическое сохранение регистров в прерывании
ON [Interrupt] Объявление используемого прерывания
ON x GOTO (GOSUB) Переход (вызов) в зависимости от значения переменой x
OPEN .. Открыть устройство (канал) ввода или вывода
POWERDOWN Выключить генератор и остановить процессор
PRINT Вывести данные в десятичном виде в последовательный порт
PRINTHEX Вывести данные в шестнадцатеричном виде в посл. порт
PRINTBIN Вывести двоичные данные в последовательный порт
PRIORITY ON(OFF) .. Установить (снять) приоритет прерывания
PUT Поместить данные в устройство (канал) вывода
READEEPROM Считать данные из EEPROM модели AT89S8252
READ Считать данные из секции DATA
REM или ‘ Указывает комментарии в тексте программы
RESET Сбросить (установить в “0”) бит. Применяется и к устройствам
RESTORE Указать блок DATA для считывания оператором READ
RETURN Возврат из подпрограммы
ROTATE .. Сдвигать переменную (влево – LEFT / вправо RIGHT)
SELECT CASE x Выбрать действие в зависимости от значения переменной x
SET Установить (в “1”) бит. Применяется к устройствам
SHIFTIN Считать данные из сдвигового регистра
SHIFTOUT Записать данные в сдвиговый регистр
SOUND Генерация частоты на линии порта
SPIIN Считать данные через SPI
SPIOUT Записать данные через SPI
START TIMER0, 1, 2 Запустить счетчик таймера 0, 1 или 2
STOP TIMER0, 1, 2 Остановить счетчик таймера 0, 1 или 2
STOP Остановить исполнение программы
SUB Определить подпрограмму или процедуру
SWAP Поменять местами значения двух переменных одного типа
.. THEN .. Определить действия при выполнении условий
.. UNTIL .. Определить условия выхода их цикла
WAIT Ждать секунды
WAITKEY Ждать приема символа
WAITMS Ждать миллисекунды
WHILE .. WEND Цикл, выполняемый, пока условия остаются истинными
WRITEEEPROM Записать данные в EEPROM модели AT89S8252

   
Функции Bascom-8051
ABS(x) Возвращает абсолютное значение знаковой переменой
ASC(s) Возвращает код символа
BDC(x) Выводит число в двоично-десятичном виде
СHR(x) Преобразует цифру в символ (записывает как символ)
CPEEK(x) Возвращает значение байта из памяти команд
DECR x Уменьшить переменную на единицу
INCR x Увеличить переменную на единицу
FUSING() Возвращает строку с форматир. значением числа с плав. точкой
GETRC() Возвращает значение постоянной времени RC-цепочки
GETRC5 Возвращает значение кода из инфракрасного порта (ПДУ)
HEX() Возвращает строку с шестнадцатеричным значением числа
HEXVAL() Возвращает значение строки в шестнадцатеричном виде
HIGH() Возвращает старший байт двухбайтной переменной
INP() Возвращает значение из ячейки внешней памяти
LEFT() Возвращает символы строки, расположенные слева
LOW() Возвращает младший байт двухбайтной переменной
LEN() Возвращает длину строки
LOOKUP Возвращает значение из таблицы числовых данных
LOOKUPSTR Возвращает значение из таблицы строковых данных
MAKEBCD(x) Преобразует двоичное число в двоично-десятичный код
MAKEDEC(x) Преобразует число в двоично-десятичном виде в двоичное
MAKEINT() Склеивает двухбайтное число из двух однобайтных
MID() Возвращает символы из середины строки (или вставляет)
MOD Возвращает остаток от деления двух переменных
OUT Записать значение во внешнюю память
PEEK() Возвращает значение байта, из внутренней памяти
POKE Записать байт в ячейку внутренней памяти
RIGHT() Возвращает символы строки, расположенные справа
SPACE() Возвращает строку, заполненную пробелами
STRING() Возвращает строку, заполненную одинаковыми символами
STR() Возвращает строку с десятичным значением числа
VAL() Возвращает значение строки в десятичном виде
VARPTR() Возвращает адрес переменной, располженной во внутр. памяти

Операторы Bascom-8051 для работы с однопроводной линией
1WREAD Считать данные по однопроводной шине
1WRESET Сбросить однопроводный интерфейс
1WWRITE Записать данные по однопроводной шине

Операторы Bascom-8051 для работы с двухпроводной линией I2C
I2CRECEIVE Считать данные из устройства по шине I2C
I2CSEND Записать данные в устройство по шине I2C
I2CSTART Генерировать условия старта на шине I2C
I2CSTOP Генерировать стоп-условия окончания обмена по шине I2C
I2CRBYTE Принять один байт из I2C-устройства
I2CWBYTE Послать байт в I2C-устройство

Операторы Bascom-8051 для работы с синхронным последовательным интерфейсом
SHIFTIN Считать данные из сдвигового регистра
SHIFTOUT Записать данные в сдвиговый регистр
SPIIN Считать данные через SPI
SPIOUT Записать данные через SPI

Команды Bascom-8051 для работы с последовательным асинхронным интерфейсом (UART)
CLOSE .. Закрыть устройство (канал) ввода или вывода
GET Взять данные из устройства (канала) ввода
INKEY Ввести значение символа из приемного буфера
INPUT Ввести цифровое значение в десятичном виде
INPUTHEX Ввести цифровое значение в шестнадцатеричном виде
INPUTBIN Ввести двоичное число (без преобразования)
OPEN .. Открыть устройство (канал) ввода или вывода
PRINT Вывести данные в десятичном виде в последовательный порт
PRINTHEX Вывести данные в шестнадцатеричном виде в посл. порт
PRINTBIN Вывести двоичные данные в последовательный порт
PUT Поместить данные в устройство (канал) вывода
WAITKEY Ждать приема символа

Операторы Bascom-8051 для работы с символьным индикатором
.. BLINK Мигать курсором (установить в виде мигающего блока)
CURSOR .. Управление курсором (включить - ON / выключить - OFF)
DISPLAY .. Управление индикатором (включить - ON / выключить - OFF)
HOME .. Поставить курсор в начало строки
..FOURTH или .. F Поставить курсор на четвертую строку
FOURTHLINE Поставить курсор на четвертую строку
LCD .. Вывести десятичное значение на индикатор
LCDHEX .. Вывести шестнадцатеричное значение на индикатор
LOCATE y , x Расположить курсор в строке y, в знакоместе x
..LOWER или .. L Поставить курсор на строку ниже
LOWERLINE Поставить курсор на строку ниже
.. NOBLINK Не мигать курсором (установить в виде подчеркивателя)
SHIFTLCD .. Сдвинуть изображение (влево - LEFT / вправо RIGHT)
SHIFTCURSOR .. Сдвинуть курсор на позицию (влево – LEFT / вправо RIGHT)
.. THIRD или .. T Поставить курсор на третью строку
THIRDLINE Поставить курсор на третью строку
.. UPPER или .. U Поставить курсор на верхнюю строку
UPPERLINE Поставить курсор на нижнюю строку

Операторы Bascom-8051 для работы с битовыми переменными
BITWAIT bit Set(Reset) Ждать установления (или сброса) бита
DEBOUNCE port .. Производить периодическую проверку состояния порта
IF bit = 0 THEN .. Проверять бит на 0
IF bit = 1 THEN .. Проверять бит на 1
SET bit Установить бит в “1”.
RESET bit Сбросить бит в “0”.

Устройства, с которыми работают операторы “Bascom-8051”
Внутренние аппаратные ресурсы микроконтроллера,
поддерживаемые системой Bascom-8051
COUNTER0, 1 и 2 Счетчики таймеров 0, 1 и 2
EEPROM Перепрограммируемая память модели AT89S8252
TIMER0, 1 и 2 Таймеры 0, 1 и 2
UART Стандартный асинхронный интерфейс (аппаратный и программный)
WATCHDOG Будильник модели AT89S8252
INT0 Внешнее прерывание 0
INT1 Внешнее прерывание 0
SERIAL Прерывание от последовательного приемопередатчика
TIMER0 Прерывание таймера 0
TIMER1 Прерывание таймера 1
TIMER2 Прерывание таймера 2

Внешние устройства, поддерживаемые системой Bascom-8051
1WIRE Однопроводный интерфейс фирмы “Dallas Semiconductors”
I2C Двухпроводный интерфейс фирмы “Philips”
LCD Стандартный символьный модуль: все размеры, три типа шины (способа подключения)
SPI Программный SPI интерфейс и все остальные виды последовательных синхронных интерфейсов (все комбинации сигналов).
SOUND Генератор частоты звука
RC Измерение временного интервала (АЦП с RC-цепочкой)
RC5 Приемник кода интерфейса RC5 (ПДУ)

0

3

Пример программы для компилятора “Bascom-8051”

'--------------------------------------------------------------

' (c) 1999 By Kulish Mikhail

'--------------------------------------------------------------

' Монитор микросхемы прямого частотного синтеза AD9850

' с последовательной загрузкой данных. Кварц = 64 МГц

' Обеспечивает ввод значения частоты в килигерцах

' с помощью эмулятора терминала с клавиатуры компьютера

'--------------------------------------------------------------

N_inp Alias Scon.0 'бит "Есть ввод" (RI)

'---------------------

Dim Temp As Byte : Dim Rang As Byte 'временные данные

Dim Tmp As Byte 'временные данные

'---------------------

Dim R_bd As Long '32-разр. двоичный код загрузки

'---------------------

Dim R_frq As Single 'регистр значения частоты

Dim R_fld As Single 'регистр* кода загрузки

Dim Templ As Single

'---------------------

'подключение синтезатора AD9850

B_data Alias P3.3 : B_clk Alias P3.2 : B_fqud Alias P3.1 : B_res Alias P3.4

Config Timer0 = Timer , Gate = Internal , Mode = 1 : Start Timer0

'---------------------

' TIMER2 в режиме 16-бит. таймера с внутр. тактир. для синхронизации UART

Config Timer2 = Timer , Gate = Internal , Mode = 2

$baud = 9600 'скорость 9.6 кБ

$crystal = 12000000 'при кварце 12 МГц

'---------------------

'назначение режимов прерываний

On Timer0 Timer_0_int Nosave 'вектор прерывания

Enable Timer0 'разрешить прерывания таймера 0

Enable Interrupts 'вообще разрешить прерывания

Th0 = &HD8 : Tl0 = &HFD 'чтобы прерыв. наступила не позже 10 мс

'------------------------------------------

'очистка памяти

Clr_mem:

$asm

Mov R0 , #&hff ;так оформляется ассемблерная вставка

Clrmem:

Mov @r0 , #0

Djnz R0 , Clrmem

$end Asm

'------------------------------------------

'подготовить линии управления к работе

'можно записывать операторы в одну строку

Reset B_data : Reset B_clk : Reset B_fqud : Reset B_res

'---------------------

'главный цикл

Mc:

Do

Idle 'останов пока не разбудит прерывание

'---------------------

If N_inp = 1 Then 'если что-то принято?

N_inp = 0 'очистим без анализа

Waitms 100 'ждем 100 миллисекунд

Input “Enter f(kHz)=” , R_frq 'ввод частоты

'чтобы получить код загрузки умножим на число:

R_fld = R_frq * 67109 ' 2^32 / Fclk = 4294967296 / 6400 kHz

R_bd = R_fld 'преобр. в целое 32-разр. число

Gosub Sload_9850 'загрузка новых данных

Print “OK” 'подтверждение установки частоты

End If

'---------------------

Loop

'------------------------------------------

'подпрограммы загрузки данных в синтезатор

Sload_9850:

Set B_fqud : Reset B_fqud 'сбросить интерфейс

Set B_clk : Reset B_clk 'защелкнуть код последовательного режима

Set B_fqud : Reset B_fqud 'разрешить последовательный режим

'выдвинуть данные из R_bd в режиме 3 (мл. сначала , _/\_)

Shiftout B_data , B_clk , R_bd , 3

'выдвинуть последний байт с режимом и фазой

Temp = 0 : Shiftout B_data , B_clk , Temp , 3

Set B_fqud : Reset B_fqud 'исполнять загруженные данные

Return

'---------------------------------------------------

'обработка прерывания таймера 0

Timer_0_int:

Th0 = &HD8 : Tl0 = &HFD

Return

'------------------------------------------

0

4

А про сам компилятор подробнее PSE...

0


Вы здесь » ВинРадиоФорум » Програмирование » QBASIC