Главная страница
Навигация по странице:

  • Синтаксис : var = VARPTR( var2 ) var – переменная, которая принимает значение адреса var2. var2 – переменная, адрес которой запрашиваетсяПример

  • WHILE .. WEND Действие

  • Синтаксис : WHILE condition Condition - условия повторения цикла. Пример

  • Синтаксис : Config Watchdog = Time Time - время в мс из ряда: 16 , 32, 64 , 128 , 256 , 512 , 1024 и 2048. START WATCHDOG STOP WATCHDOG RESET WATCHDOGПример

  • ===================================== Справочник по программированию «Bascom-8051» == 5. Правила оформления ассемблерных вставок в тексте программ для компилятора «Bascom-8051»

  • ===================================== Справочник по программированию «Bascom-8051» ==

  • ===================================== Справочник по программированию «Bascom-8051» == 6. Встроенный текстовый редактор

  • ===================================== Справочник по программированию «Bascom-8051» == 7. Распределение памяти при определении переменных, память программ и ограничения Bascom

  • ===================================== Справочник по программированию «Bascom-8051» == 8. Структура текста программы

  • Справочник по программировани BASCOM-8051 (М.Л. Кулиш, 2001). Справочник по программированию bascom8051 Краснодар 2001


    Скачать 6.61 Mb.
    НазваниеСправочник по программированию bascom8051 Краснодар 2001
    АнкорСправочник по программировани BASCOM-8051 (М.Л. Кулиш, 2001).pdf
    Дата26.04.2017
    Размер6.61 Mb.
    Формат файлаpdf
    Имя файлаСправочник по программировани BASCOM-8051 (М.Л. Кулиш, 2001).pdf
    ТипСправочник
    #5699
    КатегорияПромышленность. Энергетика
    страница9 из 25
    1   ...   5   6   7   8   9   10   11   12   ...   25
    VARPTR()
    Действие:
    Функция возвращает адрес переменной, расположенной во внутренней памяти (0-255). Очень удобная функция для установки значения индексных регистров (указателей).
    Синтаксис
    :
    var = VARPTR( var2 ) var – переменная, которая принимает значение адреса var2. var2 – переменная, адрес которой запрашивается
    Пример:
    Dim I As Integer , B1 As Byte
    B1 = Varptr(I)
    Генерируемый код:
    Mov h’23 , #h’21 ;23h - переменная b1, 21h - переменная I
    WHILE .. WEND
    Действие:
    Конструкция в виде цикла, выполняемого, пока некоторые условия выполняются. Как только заданное условие нарушается, то выполняется оператор (действие) следующий за оператором
    WEND. Данная конструкция цикла обратна конструкции сила DO...LOOP UNTIL.
    Синтаксис_:_WHILE_condition_Condition_-_условия_повторения_цикла._Пример'>Синтаксис
    :
    WHILE condition Condition - условия повторения цикла.
    Пример:
    a=0
    WHILE a <= 10 ‘цикл будет повторяться, пока a не достигнет 11
    PRINT a : INC a
    WEND
    WATCHDOG AT898252: START WATCHDOG, STOP WATCHDOG, RESET WATCHDOG
    Действие:
    CONFIG WATCHDOG - установить время срабатывания будильника
    START WATCHDOG - включить будильник (начать сторожить систему)
    STOP WATCHDOG - выключить будильник (закончить сторожить)
    RESET WATCHDOG - запустить будильник сначала
    Синтаксис
    :
    Config Watchdog = Time
    Time - время в мс из ряда: 16 , 32, 64 , 128 , 256 , 512 , 1024 и 2048.
    START WATCHDOG
    STOP WATCHDOG
    RESET WATCHDOG
    Пример:
    Config Watchdog = 2048 ‘сбросить после 2048 мс
    Start Watchdog ‘включить
    =============================================================================
    4-40

    ===================================== Справочник по программированию «Bascom-8051» ==
    5. Правила оформления ассемблерных вставок
    в тексте программ для компилятора «Bascom-8051»
    1 Текст ассемблерных вставок должен содержать только стандартные команды микроконтроллера 8051.
    Исключение составляет командва SWAP, совпадающая с похожей командой Bascom. Ассемблерную команду
    SWAP необходимо применять с префиксом «!» (таким образом - !Swap) В мнемонику команд без дополнительных определений входят: регистры R0-R7, @R0, @R1, A, DPTR; бит C; символ указания непосредственных данных -
    #. Имена остальных прямо адресуемых регистров можно использовать только в том случае, если они определены, действующим в момент компиляции файлом (type.dat), устанавливающим тип микроконтроллера. Общепринятые имена битов можно применять только, если они определены как переменные Бейсика.
    2 Числовые значение должны быть записаны способом, предусмотренным Бейсиком, а не так, как делается в стандартном ассемблере.
    3 Не допускается применение директив стандартного ассемблера, в том числе резервирование областей оперативной памяти (директивой DS) и определение полей данных (директивой DW). Исключением является директива DB, которая может применяться внутри ассемблерного блока:
    T_asd:
    $asm
    Db #&hfd , 23 , 5 , 6
    $end Asm
    4 Лучше не допускать включения комментариев Bascom между командами $Asm и $End Asm. Хотя иногда компилятор пропускает это. В любом случае компилятор указывает на эту ошибку. Между командами $Asm и
    $End Asm можно применять стандартные ассемблерные комментарии. Комментарии не должны располагаться в строке с меткой. В строке с командами $Asm и $End Asm также нельзя помещать комментарии.
    'обработка прерывания таймера 0 Timer_0_int:
    $asm
    Mov Tl0 , #&hfd 'd8fdh - это неправильно
    Mov Th0 , #&hd8 ;уст. периода прерыв. 10 мс - это правильно
    $end Asm
    Return
    5 В ассемблерном тексте допускается применение меток. Они должны быть оформлены также как и
    Бейсике (требования совпадают со стандартным ассемблером). Не допускается размещение команды ассемблера и тем более комментариев в строке с меткой.
    'обработка прерывания последовательного интерфейса
    Ser_int:
    $asm
    Jbc {Ri} , Intsr
    Jbc {Ti} , Intst
    Reti
    Intsr:
    Mov {rbuf} , Sbuf
    Setb {B_enrx} ;прерывание приемника
    Reti
    Intst:
    Setb {B_entx} ;прерывание передатчика
    Reti
    $end Asm
    Если в ассемблерной вставке применяется ссылка на метку, то существует два варианта оформления таких меток: а) если ссылка на метку осуществляется внутри ассемблерного блока, то метка оформляется обычным образом (смотри пример выше); б) если применена ссылка на метку определенную в другом месте программы, то перед этой меткой необходимо поставить знак «!» и тогда она станет доступной. Причем, такая метка не должна находится внутри другого ассемблерного блока. Ниже представлен пример программы с метками вне ассемблерного текста:
    'обработка прерывания последовательного интерфейса
    Ser_int:
    =============================================================================
    5-1

    ===================================== Справочник по программированию «Bascom-8051» ==
    $asm
    Jbc {Ri} , Intsr
    Jbc {Ti} , Intst
    $end Asm
    Goto Ser_Ret
    !Intsr:
    Rbuf = Sbuf : Set B_enrx : Goto Ser_Ret 'прерывание приемника
    !Intst:
    Set B_entx : 'прерывание передатчика
    Ser_Ret:
    Return '!!! должен быть только один выход
    6 Имена переменных или констант, определенных в Бейсике, тем или иным способом, и используемые как прямо адресуемые регистры или непосредственные данные, следует записывать в фигурных скобках { }.
    Внимание! Разный тип скобок, например { ), иногда вызывает «зависание» компилятора. Имена регистров микроконтроллера, определенные в файле type.dat, не нужно помещать в фигурные скобки.
    Mov {R_ch} , Sbuf
    Setb {B_kl}
    Запись частей переменных делать следующим образом
    Mov {R_ch+3} , Sbuf
    Компилятор проверяет тип переменной. Переменная типа Integer не может применяться в ассемблерной вставке. По крайней мере, в первых версиях так было. Проверяйте сами!
    7 Не допускается размещение пробела между знаком непосредственных данных (#) и данными. Ошибка в этом случае не показывается, а поле данных записывается нуль.
    Mov {R_cch} , #{R_lin} - правильно
    Mov {R_cch} , # {R_lin} - недопустимо
    8 В командах, выполняющих операции с аккумулятором с непосредственной адресацией, необходимо указывать его имя как «A».
    Cjne A , #&h0d , Ints3
    Orl A , direct
    Addc A , #&B00010001
    В командах, использующих прямо адресуемый регистр, нужно указывать имя аккумулятора только как Acc.
    Push Acc
    Setb Acc.2
    В командах, допускающих оба варианта адресации, допускается и оба варианта записи, но при которых компилятор будет генерировать и два варианта кода (короткой и длинный).
    Mov A , R0 или Mov Acc , R0
    Mov A , direct или Mov Acc , direct
    9 Стиль исполнения текста любой - большие или маленькие буквы. Лучше придерживаться такого как в
    Бейсике - первая большая и пробелы между операторами. Для перехода в этот стиль применять следующую операцию: а) поставить в начало редактируемой строки символ « : »; б) увести курсор на другую строку - произойдет переход к стилю Бейсика; в) забить символ « : » и убрать лишние пробелы в редактируемой строке.
    10 В последних версиях (2.хх) ассемблерные команды могут просто вставляться в текст программыбез команд $Asm и $End Asm. Но делать этого не рекомендуется.
    =============================================================================
    5-2

    ===================================== Справочник по программированию «Bascom-8051» ==
    6. Встроенный текстовый редактор
    Главное рабочее окно Bascom, в котором находится текст проекта, обеспечивает все минимально необходимые операции редактирования. Главное достоинство встроенного редактора это наличие режима автоматического форматирования и расцвечивание компонентов текста. Это обеспечивает ускорение ввода и текста и устранение грубых ошибок - они сразу видны. Можно, использую меню “Options – Environment”, установить цвет поля редактора, отличающийся от белого (рекомендуется бледно желтый) – приятней работать.
    Там же можно выбрать размер и тип шрифта, чтобы было лучше видно текст в рабочем окне. И наконец, рекомендуется задавать параметры автоматического форматирования, отвечающий сложности текста программы.
    Ниже приведено назначение клавиш рабочего окна Bascom.
    LEFT ARROW на один символ влево
    RIGHT ARROW на один символ вправо
    UP ARROW на строку вверх
    DOWN ARROW на строку вниз
    HOME в начало строки
    END в конец строки
    PAGE UP перейти выше на размер окна
    PAGE DOWN перейти ниже на размер одного окна
    CTRL+LEFT на одно слово влево
    CTRL+RIGHT на одно слово вправо
    CTRL+HOME в начало текста
    CTRL+END в конец текста
    CTRL+ Y уничтожить текущую строку
    INS вставка или перезапись
    F1 Помощь (контекстная - о слове, на котором установлен курсор)
    F2 запустить симулятор
    F3 искать следующий текст
    F4 программировать кристалл
    F5 запустить программу в симуляторе
    F7 компилировать
    CTRL+F7 проверить ошибки (пробная компиляция)
    F8 исполнить один шаг программы (в симуляторе)
    SHIFT + F8 исполнить шаг без останова в подпрограмме (в симуляторе)
    F9 переключить точку останова (в симуляторе)
    F10 запустить до курсора (в симуляторе)
    CTRL+G перейти к строке
    CTRL+O загрузить файл
    CTRL+S записать файл
    CTRL+P печатать файл
    CTRL+T запустить эмулятор терминала
    CTRL+F искать текст
    CTRL+W посмотреть результат компиляции (файл сообщений)
    CTRL+L LCD конструктор (новых символов)
    CTRL+X вырезать текст в Clipboard
    CTRL+C скопировать текст в Clipboard
    CTRL+V вставить текст из Clipboard
    CTRL+Z отмена
    CTRL+SHIFT+Z отмена отмены
    CTRL+SHIFT+I вставить блок текста
    CTRL+SHIFT+U вырезать блок текста
    SHIFT+ движение отметка (выделение) текста (блока) курсора
    В последних версиях редактора компилятора появилась поддержка длинных строк после некоторых операторов, требующих перечисления данных длинным списком в поле операнда. В этих случаях перенос осуществляется символом подчеркивателя (“_”). Обычно это указано при описании синтаксиса этих операторов.
    =============================================================================
    6-1

    ===================================== Справочник по программированию «Bascom-8051» ==
    7. Распределение памяти при определении переменных, память программ и ограничения Bascom
    Распределение оперативной памяти, предлагаемое Bascom-8051представлено в таблице.
    Область
    Адрес
    Назначение
    00 – 11h
    Рабочие регистры программ Bascom, временно используемые при обработке и преобразовании данных. Сохраняются в стеке, если не применена директива
    “$
    NOSP

    00 -
    1Fh
    12 – 1Fh
    Неизвестно как используются, но в стеке при прерываниях не сохраняются.
    Очевидно, некоторые из указанных регистров могут использоваться в качестве переменных в ассемблерных вставках. Блок регистров 3 иногда можно использовать в подпрограммах прерывания пользователя для прямой адресации R0 - R7 (но только после проверки).
    00 – 09h*
    Битовые переменные Bascom.
    09 – 7Fh*
    Битовые переменные пользователя. Они располагаются здесь независимо от порядка объявления.
    20 -
    2Fh
    $ - ($+11h)
    Глобальные переменные Bascom и буфер для формирования выводимой строки.
    30 -
    7Fh
    ($+12h) – $$
    Переменные пользователя в порядке объявления. Рекомендуемый порядок определения переменных после переменных типа Bit: вначале типа Byte, затем
    Word/Integer, далее Long, Single, String, Array (массивы). Такая последовательность позволяет обеспечить доступ к переменным, определенным ранее, как к прямо адресуемым регистрам, что почти всегда требуется в ассемблерных программах, вставляемых в текст Бейсика (ради такой возможности их и применяют). Кроме того, компилятор для одно- и двухбайтных переменных тоже часто применяет библиотеки c прямой адресацией регистров. Длинные переменные Long, Single, String, Array всегда считываются и записываются с использованием косвенной адресации, и поэтому могут располагаться выше 7Fh.
    80 –
    FFh
    $$+1 –
    7F(FFh)
    Стек процессора начинается после окончания последней переменной, записью в указатель стека адреса последней занятой ячейки
    (Mov SP,#$$)
    * - адреса битов. $ - адрес первой ячейки, не занятой битовыми переменными. $$ - адрес последней ячейки, занятой переменной.
    Bascom использует такое расположение многобайтных переменных в памяти, при котором меньшему адресу соответствует младший байт (младшие разряды), хранимого числа. Это же относится и к числу в формате с плавающей точкой, у которого в ячейке с наименьшим адресом расположены младшие разряды мантиссы, а в ячейке с наибольшим адресом содержатся старшие разряды порядка и бит знака. Строковые переменные занимают в памяти на одну ячейку больше, чем были объявлены. Единственное назначение дополнительного байта – хранить знак конца строки (значение 00h) . Причем он используется только в случае, когда строковая переменная имеет максимально возможную длину. Если длина записанной строки меньше длины переменной, то знак конца строки переносится соответственно ближе к началу переменной, а в дополнительном байте так и остается нулевое значение. Информация о расположении переменных необходима при использовании ассемблерных команд, дающих возможность простого доступа к частям переменных. Особенно внимательно нужно производить заполнение строковых переменных, не забывая записать знак конца строки (00h) после последнего символа. Иначе работа многих операторов, использующих строковые данные, станет невозможной.
    Внешняя оперативная память используется только программой пользователя, а представление переменных в ней такое же, как и во внутренней памяти. Только во внешней памяти возможно расположение длинных строковых переменных (до 254 символов).
    =============================================================================
    7-1

    ===================================== Справочник по программированию «Bascom-8051» ==
    Распределение модулей в памяти программ, создаваемое компилятором Bascom представлено в следующей таблице.
    Область
    Адрес
    Назначение
    Стартовый вектор 0000h Переход на блок начальной инициализации - LJMP $$
    Векторы прерываний 0003h Команды перехода на подпрограммы обработки прерываний (разрешенных), расположенные в блоке программ пользователя. Вместо векторов запрещенных прерываний ставится команда Reti.
    Библиотечные подпрограммы
    002E*
    Все используемые в программе пользователя операции и функции (кроме самых простейших) оформлены в виде подпрограмм, вызываемых с параметрами, заданными в программе пользователя.
    Блок инициализации процессора
    $$
    Программа начальной инициализации микроконтроллера и подключенных к нему дополнительных устройств (в первую очередь, LCD). Перечень и параметры команд инициализации определяется типом микроконтроллера, количеством заданных для использования функций, средой компилятора
    (параметры по умолчанию) и директивами конфигурации, записанными в программе пользователя.
    Скомпилированная программа пользователя
    $$$
    Компиляция текста программы пользователя в порядке возрастания номеров строк, т.е. первой компилируется первая строка и так далее.
    * - для модели 8052. Это значение определяется в файле type.dat вслед за последним вектором прерывания. $$ - начинается вслед за библиотекой программ Bascom. $$$ - первая строка программы исполняется вслед за последней командой инициализации.
    Компилятор Bascom налагает некоторые ограничения на программу пользователя. В первую, очередь это количественные ограничения, обусловленные небольшими ресурсами микроконтроллеров семейства 8051, а также возможностями самого компилятора. Ограничения выражаются в следующем: максимально допустимое число меток – 5000. Практически это число недостижимо. максимально допустимое число имен переменных – 1000. Этого вполне достаточно даже для большой программы. максимально допустимое число переименований (Alias) - 128. максимально допустимое число битовых переменных – 120*. Это ограничение обусловлено только количеством битовых ячеек общего назначения процессора, за исключением собственных битовых переменных
    Bascom. Обычно такого количества битов и не требуется. максимально допустимое число байтовых переменных – 20*. максимально допустимое число двухбайтовых переменных – 10*. максимально допустимое число четырехбайтовых переменных – 10*. максимально допустимое число строковых переменных по десять символов – 5*.
    * - указано приблизительно допустимое количество переменных, которые можно использовать в программе процессора 8052 (с внутренней памятью 256 байт). Практически количество переменных каждого типа может быть любым в пределах доступного пространства внутренней памяти. Для моделей типа 8051(128 байт) пользователю остается 60-70 байт. При использовании старших моделей типа 8052(256 байт) реально доступно
    150-180 байт. Непропорциональное увеличение доступного пространства внутренней памяти приращению размера памяти обусловлено тем, что старшие модели используются для более сложных задач, требующих большего стека и больше ресурсов для программ Bascom.
    Рекомендуемое максимальное количество используемых программных конструкций не должно превышать:
    FOR .. NEXT
    -
    50
    IF .. THEN
    -
    50
    DO .. LOOP
    -
    50
    WHILE .. WEND -
    50
    SELECT .. CASE -
    25
    Последние ограничения упоминаются в оригинальной документации. Однако нарушений в работе компилятора даже при превышении указанного количества не замечено.
    =============================================================================
    7-2

    ===================================== Справочник по программированию «Bascom-8051» ==
    8. Структура текста программы
    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). Чтобы завершить инициализацию индикатора, этот
    =============================================================================
    8-1

    1   ...   5   6   7   8   9   10   11   12   ...   25


    написать администратору сайта