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

  • ===================================== Справочник по программированию «Bascom-8051» == LOOKUP, LOOKUPSTR Действие

  • MAKEBCD(x) Действие: Преобразовать переменную двоичную (с числом, записанным в двоичном виде) в переменную в двоично-десятичном формате.Синтаксис

  • Пример: Arb = Makebdc(arb) ‘10h, 21h, 40h преобр. в 16h, 33h, 64hMAKEDEC(x) Действие

  • MAKEINT() Действие: Скомпоновать из двух байтов слово ( word или integer).Синтаксис

  • ===================================== Справочник по программированию «Bascom-8051» == MAX(), MIN() Действие

  • Синтаксис

  • ===================================== Справочник по программированию «Bascom-8051» == MWINIT, MWREAD, MWWRITE, MWWOPCODE Действие

  • ===================================== Справочник по программированию «Bascom-8051» == NOSAVE Действие

  • ===================================== Справочник по программированию «Bascom-8051» == ON Interrupt Действие

  • ON Value Действие

  • ===================================== Справочник по программированию «Bascom-8051» == OPEN - CLOSE , GET, PUT Действие

  • ===================================== Справочник по программированию «Bascom-8051» == PEEK() Действие

  • Пример: DIM a As Byte a = Peek( 0 ) ‘считать значение R0POKE Действие: Записать байт в ячейку внутренней памяти.Синтаксис

  • Пример: POKE 127, 1 ‘записать 1 по адресу 127POWERDOWN Действие

  • Пример: P0 = 0 : P1 = 0 : P2 = 0 : P3 = 0 : POWERDOWNPRINT, PRINTHEX Действие

  • Справочник по программировани 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
    КатегорияПромышленность. Энергетика
    страница7 из 25
    1   2   3   4   5   6   7   8   9   10   ...   25
    Пример:
    LOAD TIMER0, 100 ‘загрузить 100
    Будет сгенерирован код:
    Mov tl0,#h’9C
    Mov th0,#h’9C
    LOAD TIMER2, 1000
    Будет сгенерирован код:
    Mov RCAP2L,#24
    Mov RCAP2H,#252
    =============================================================================
    4-26

    ===================================== Справочник по программированию «Bascom-8051» ==
    LOOKUP, LOOKUPSTR
    Действие:
    LOOKUP - возвращает числовое значение, считанное из таблицы.
    LOOKUPSTR - возвращает строку из таблицы, содержащей строковые данные (разной длины).
    Синтаксис
    :
    Var = LOOKUP(value , label)
    Var = LOOKUPSTR(value , label)
    Var – имя переменой, в которую помещается значение из таблицы. Типы переменных var: Byte,
    Integer, Word, Long, Single
    Value – имя переменной, содержащей индекс (смещение по таблице). Первый элемент имеет индекс (базу) = 0 (без смещения). Все элементы таблицы должны быть одинакового размера! И соответствовать типу принимающей переменной! Иначе произойдет ошибка - нарушение синхронизации. BASCOM не проверяет это соответствие! Для функции LOOKUPSTR количество строк в таблице не должно превышать 256, а длина самих строковых констант может быть различной. Типы переменных: value: Byte, Integer, Word, Long, Constant.
    Label – метка начала таблицы (адрес).
    Пример:
    DIM b1 As Byte , I as Integer b1 = Lookup(1, dta) ‘b1=2 - первый элемент 0-й!!!
    I = Lookup(0,DTA2) ‘I=1000
    Dim s as string, idx as Byte
    Idx = 0 : s = LookupStr(idx,Sdata)
    Print s ‘S=»This»
    DTA:
    Data 1,2,3,4,5
    DTA2:
    ‘integer data
    Data 1000% , 2000%
    Sdata:
    Data «This» , is» , «a test»
    MAKEBCD(x)
    Действие:
    Преобразовать переменную двоичную (с числом, записанным в двоичном виде) в переменную в двоично-десятичном формате.
    Синтаксис
    :
    Var1 = Makebdc(var2) Var1 - переменная, принимающее двоично-десятичное значение
    (типа Byte, Word, Integer, Long или Constant). Var2 - переменная, содержащая двоичное значение.
    Пример:
    Arb = Makebdc(arb) ‘10h, 21h, 40h преобр. в 16h, 33h, 64h
    MAKEDEC(x)
    Действие:
    Преобразовать переменную, выраженную в двоично-десятичном виде, в двоичное число.
    Синтаксис
    :
    Var1 = Makedec(var2) var1 - переменная, принимающее двоичное значение. Var2 – переменная, содержацая двоичнодесятичное значение (только типа Byte, Word или Integer).
    Пример:
    Arb = Makedec(arb) ‘10h, 21h, 40h преобр. в 0ah, 15h, 2ah
    MAKEINT()
    Действие:
    Скомпоновать из двух байтов слово ( word или integer).
    Синтаксис
    :
    Varn = MAKEINT(LSB , MSB) Varn – беззнаковый результат. LSB - имя байтовой переменной или константы, помещаемой в младшие разряды. MSB - имя байтовой переменной или константы, помещаемой в старшие разряда результата. Математический эквивалент операции: varn = (256 * MSB) + LSB
    Пример:
    Dim a As Integer , I As Integer a = 2 : I = Makeint(a , 1) ‘I = (1 * 256) + 2 = 258
    =============================================================================
    4-27

    ===================================== Справочник по программированию «Bascom-8051» ==
    MAX(), MIN()
    Действие: MAX() – выбирает из указанного массива наибольшее значение.
    MIN() – выбирает из указанного массива наменьшее значение. Пока эта функции работают только с массивами байтовых переменных.
    Синтаксис: var = MAX( ar(1) ) var = MIN( ar(1) ) var – переменная, принимающее запрашиваемое значение. ar(1) – имя массива (в скобках всегда указывается единица).
    Пример:
    Dim ar(10) As Byte
    Dim Bp as Byte
    For Bp = 1 to 10 ar(Bp) = Bp
    Next
    Bp = Max(ar(1)) : Print Bp 'отпечатается 10
    Bp = Min(ar(1)) : Print Bp 'отпечатается 1
    End
    MOD
    Действие:
    Функция возвращает остаток от деления двух переменных
    Синтаксис
    :
    ret = var1 MOD var2 ret - переменная, принимающая значение остатка. var1 - переменная-делимое (variable to divide). var2 - переменная-делитель (The divisor). Работает с переменными типа Byte, Word, Integer, Long.
    Пример:
    a = 10 MOD 3 ‘10/3
    PRINT a
    ‘a=1
    =============================================================================
    4-28

    ===================================== Справочник по программированию «Bascom-8051» ==
    MWINIT, MWREAD, MWWRITE, MWWOPCODE
    Действие: MWINIT - установить выводы, предназначенные для интерфейса Microwire в исходное состояние.
    MWREAD - считать в переменную значение из интерфейса Microwire.
    MWWRITE – записать значение переменной в интерфейс Microwire.
    MWWOPCODE – записать код операции в устройство с интерфейсом Microwire.
    Синтаксис: MWINIT
    MWREAD variable , opcode , address, bytes
    MWWRITE variable , opcode , address, bytes
    MWWOPCODE opcode , bits
    Variable – переменная, принимающая считанное значение. Opcode – код операции. Может включать в себя и дополнительные биты операций. В операторе MWWOPCODE включает и фиктивные биты адреса (см. Примеры и описание микросхем). Address – адрес на шине.
    Может задаваться переменной типа Byte или Word.. Bytes – число пересылаемых байт. Зависит от выбранной длины данных (1 или 2). Bits – суммарное число посылаемых бит (определяется типом микросхемы и длиной данных).
    Пример 1: Dim Dta As Byte, Adr As Byte ‘определим переменные 'использовать EEPROM 93C46 (“Org” = 0), пересылать байты (AL=7)
    Config Microwire=Pin, Cs=P1.1, Din=P1.2, Dout= P1.4, Clock=P1.5, Al=7
    Mwinit 'инициализировать линии 'разрешить запись в EEPROM и стирание 'требуется включить в код операции, записанный в двоичном виде:
    ‘ старт-бит (1), код операции (00) и (11) + адрес (любой, обычно 0)
    Mwwopcode &B1001100000 , 10 ‘также добавим получившееся число бит
    Dta = 10 : Adr = 8 'значения данных и адреса
    Mwwopcode &B1001000000 , 10 'проведем общее стирание 'запишем значение из Dta в ячейку EEPROM по адресу, указанному Adr
    'код операции: старт бит 1 + (01). Число байт: (1)
    Mwwrite Dta , &B101 , Adr , 1
    'если далее вскоре последует операция на шине Micriwire
    'обязательно ждем завершения записи 2 – 5 мс, т.к. компилятор не ждет 'появления аппаратного сигнала готовности
    Waitms 10 : Dta = 0
    'считать обратно 'код операции: старт бит 1 + (10). Число байт: (1)
    Mwread Dta , &B110 , Adr , 1
    'запретить запись и стирание 'старт-бит (1), код операции (00) и (00) + адрес (любой, обычно 0)
    Mwwopcode &B1000000000 , 10
    End
    Пример 2: ‘аналогичный пример для 16-разрядных данных
    Dim Dta As Word, Adr As Byte ‘определим переменные 'использовать EEPROM 93C46 (“Org” = 1), пересылать слова (AL=6)
    Config Microwire=Pin, Cs=P1.1, Din=P1.2, Dout= P1.4, Clock=P1.5, Al=6
    Mwinit 'инициализировать линии 'разрешить запись в EEPROM и стирание 'требуется включить в код операции, записанный в двоичном виде:
    Mwwopcode &B100110000 , 9 'также добавим получившееся число бит
    Dta = &h1000 : Adr = 8 'значения данных и адреса
    Mwwopcode &B100100000 , 9 'проведем общее стирание 'запишем значение из Dta в ячейку EEPROM по адресу, указанному Adr
    'код операции: старт бит 1 + (01). Число байт: (2)
    Mwwrite Dta , &B101 , Adr , 2
    Waitms 10 : Dta = 0
    'код операции: старт бит 1 + (10). Число байт: (2)
    Mwread Dta , &B110 , Adr , 2 'считать обратно 'запретить запись и стирание
    Mwwopcode &B100000000 , 9
    End
    =============================================================================
    4-29

    ===================================== Справочник по программированию «Bascom-8051» ==
    NOSAVE
    Действие:
    Опция NOSAVE директивы ON Interrupt запрещает компилятору автоматически включать в программу блоки сохранения и восстановления регистров на время обработки прерывания.
    Необходимость этой опции очевидна, т.к. при ее отсутствии BASCOM производит сохранение в стеке регистров с адресами от 0 до 11h, Acc, B, PSW, DPL и DPH (всего 21 регистр). Т.е. считается, что при обработке прерываний можно применять все команды BASCOM (или почти все). Это не только нерационально, но иногда и недопустимо, например, при наличии вложенных прерываний. Существуют два способа решения этой проблемы: а) с помощью дисассемблера определить регистры, действительно используемые при обработке каждого прерывания, и обеспечить их сохранение «вручную», применив ассемблерные команды Push и Pop; б) написать процедуру обработки прерывания на ассемблере.
    Пример:
    Config Timer0 = Timer, Gate = Internal, Mode = 1 : Start Timer0
    ‘назначение режимов прерываний
    On Timer0 Timer_0_int Nosave ‘вектор прерывания
    Enable Interrupts ‘вообще разрешить прерывания
    Enable Timer0 ‘разрешить прерывания таймера 0
    ‘------------------------------------------
    ‘обработка прерывания таймера 0
    Timer_0_int:
    Counter0 = &HD8FD ‘D8fdh - период прерыв. 10 мс
    $asm
    Push Psw ;обработка интегратора термодатчика
    Push Acc ;сохранить используемые регистры
    Jb {B_ctmp} , Intt2 ;есть перегрев?
    Mov A , {R_ot} ;да - датчик температуры сработал
    Cjne A , #{Cit} , Intt1 ;интегратор достиг максимума?
    Sjmp Intte ;да - просто выйти
    Intt1:
    Inc A ;нет - нарастить знач. Интегратора
    Cjne A , #{cit} , Intt3 ;он сейчас достиг максимума
    Setb {b_ot} ;да - поставить бит «Перегрев»
    Sjmp Intt3
    Intt2:
    Mov A , {R_ot} ;перегрева нет
    Jz Intte ;интегратор пуст?
    Dec A ;не пуст - уменьшить значение
    Intt3:
    Mov {R_ot} , A ;изменился - сохр. Новое значение
    Intte:
    Pop Acc ;восстановить регистры
    Pop Psw
    Reti
    $end Asm
    =============================================================================
    4-30

    ===================================== Справочник по программированию «Bascom-8051» ==
    ON Interrupt
    Действие:
    Запускать подпрограмму, когда случается указанное прерывание. При компиляции директива ON
    Interrupt производится назначение прерывания - записывается команда перехода на программу обработки (вектор прерывания) на место в начале программы, соответствующее типу прерывания.
    Синтаксис
    :
    ON interrupt label [NOSAVE]
    Interrupt - имя прерывания: INT0, INT1, SERIAL, TIMER0 ,TIMER1, TIMER2 или PCA.
    Выбор используемого прерывания определяется конфигурацией системы и моделью процессора.
    Список используемых прерываний может быть расширен.
    Label - метка начала программы обработки прерывания, куда должен происходить переход, если случилось соответствующее прерывание.
    NOSAVE - необязательная опция. Она запрещает компилятору включать в программу блоки сохранения и восстановления регистров на время обработки прерывания. Программа обработки прерывания должна завершаться только одной командой RETURN, т.к. компилятор генерирует код команды RETI только один раз. Когда вы используете входы INT0 или INT1 вы должны указать и условия возникновения этих прерываний, установкой или сбросом соответствующих битов:
    SET TCON.0 ‘INT0 запускается падающим фронтом.
    RESET TCON.0 ‘INT0 низким уровнем.
    SET TCON.2 ‘INT1 запускается падающим фронтом.
    RESET TCON.2 ‘INT1 низким уровнем.
    Пример:_DIM_a_As_Byte_a_=_Peek(_0_)_‘считать_значение_R0POKE_Действие:_Записать_байт_в_ячейку_внутренней_памяти.Синтаксис'>Пример:
    ENABLE INTERRUPTS ‘разрешить все прерывания
    ENABLE INT0 ‘разрешить прерывание INT0
    ON INT0 Label2 ‘обработка начинается с label2
    SET TCON.0 ‘INT0 запускать падающим фронтом
    DO ‘пустой цикл
    LOOP
    END
    Label2: PRINT «An hardware interrupt occurred!» ‘печатать это
    RETURN
    ON Value
    Действие:
    Перейти к одной из последовательных меток, в зависимости от значения переменной. Возможны варианты: простого перехода (GOTO) или вызова подпрограммы (GOSUB). В последнем случае, происходит возврат к следующему оператору – его адрес запоминается в стеке.
    Синтаксис
    :
    ON var [GOTO] [GOSUB] label1 [, label2] Var - числовая переменная или даже регистр SFR, например порт P1. Label1, label2 - метки, к которым происходит переход. База первой метки равна нулю.
    Пример:
    X = 2 ‘переменная без знака
    ON x GOSUB lbl1, lbl2,lbl3 ‘выбор п/п lbl3
    X = 0
    ON x GOTO lbl4, lbl5 ‘переход на метку lbl4
    END
    Lbl1: PRINT « lbl1» : RETURN
    Lbl2: PRINT « lbl2» : RETURN lbl3: PRINT « lbl3» : RETURN
    Lbl4: PRINT « lbl4» : STOP
    Lbl5: PRINT « lbl5» : STOP
    =============================================================================
    4-31

    ===================================== Справочник по программированию «Bascom-8051» ==
    OPEN - CLOSE , GET, PUT
    Действие:
    Открыть и закрыть устройство (канал) ввода или вывода
    Синтаксис
    :
    OPEN «device,[Inverted]» for Mode As #channel
    CLOSE #channel
    Device - имя порта. Для аппаратных портов предусмотрены имена: COM1 (стандартный) и
    COM2 (только для моделей с 80517 или 80537 со вторым UART). Программные порты должны специфицироваться по имени и скорости, например, COM3.0:9600 (линия P3.0 при 9600 бод).
    Mode - режим. Можно использовать опции BINARY (двунаправленный), INPUT (только на ввод) или OUTPUT (только на вывод) для COM1 и COM2. Для программных портов можно назначать только опции INPUT или OUTPUT. Опция Inverted применяется только для программных портов, когда необходимо скомпенсировать инверсию драйвера.
    Channel - номер открытого канала (только положительное число). Каждый открытый канал должен быть закрыт с помощью команды CLOSE #channel. Аппаратные порты поддерживают использование команд PRINT, PRINTHEX, INPUT и NPUTHEX. Программные порты могут работать только с операторами GET и PUT (в 1-й версии компилятора) для приема и посылки данных.
    GET #channel , var и PUT #channel , var - записать данные из канала в переменную и соответственно поместить в канал данные из переменной. Скорее всего, перемещать можно только байтовые данные, по крайней мере, через программные порты.
    Пример 1:
    ‘применение аппаратного порта
    CONFIG BAUD = 9600 ‘определим скорость
    OPEN «COM1:» FOR BINARY AS #1 ‘откроем канал
    PRINT #1, «Hello» ‘послать как в канал 1
    PRINT «Hello» ‘послать как обычно
    CLOSE #1
    ‘закрыть канал
    Пример 2:
    ‘применение программного порта. Работает с любым выводом!
    ‘программный порт именуется по имени линии порта
    ‘для P3.0 будет «COM3.0:»(P упускается)
    ‘также должна указываться бодовая скорость. Для 9600 baud
    ‘имя устройства будет «COM3.0:9600»
    ‘чтобы посылать данные указывает режим OUTPUT
    ‘чтобы принимать указываем INPUT
    ‘можно использовать только PUT и GET.
    ‘PRINT в данной версии не поддерживается.
    ‘линии взяты p3.0 и p3.1, чтобы было удобно контролировать
    ‘как работают программные порты
    Dim A As Byte , S As String * 16 , I As Byte , Dum As Byte
    Open «com3.1:9600» For Output As #1
    Open «com3.0:9600» For Input As #2
    S = «test this» ‘назначить строку
    Dum = Len(s) ‘вычислим ее длину
    For I = 1 To Dum ‘перечислим все символы слева направо
    A = Mid(s , I , 1) ‘берем очередной символ
    Put #1 , A ‘запишем его в com-порт
    Next
    Do
    Get #2 , A ‘возмем символ из com-порта
    Put #1 , A ‘запишем обратно
    Print A ‘используем нормальный канал
    Loop
    Close #1 ‘закроем порты
    Close #2
    End
    Пример 2:
    Open "com1.2:9600 , Inverted" For Input As #1 'порт p1.2 с инверсией
    Print #1, «Hello» 'послать как в канал 1
    Close #1 'закроем порт
    =============================================================================
    4-32

    ===================================== Справочник по программированию «Bascom-8051» ==
    PEEK()
    Действие:
    Возвращает значение переменной (байтовой), расположенной во внутренней памяти.
    Синтаксис
    :
    var = PEEK( address ) var - имя переменной, принимающей считываемое значение.
    Address - числовая переменная или константа с адресом считываемых данных в диапазоне от 0 до 255.
    Пример:
    DIM a As Byte a = Peek( 0 ) ‘считать значение R0
    POKE
    Действие:
    Записать байт в ячейку внутренней памяти.
    Синтаксис
    :
    POKE address , value Address - адрес записи. Числовая переменная или константа в диапазоне от 0 до 255. Value - записываемое значение (0-255). Будьте внимательны с POKE потому, что можете изменить переменные, которые нужны программе для правильной работы.
    Имеются в виду, в первую очередь, не явно используемые регистры BASCOM. Для этой команды они особенно легко доступны.
    Пример:
    POKE 127, 1 ‘записать 1 по адресу 127
    POWERDOWN
    Действие:
    Выключить генератор и остановить процессор. Это полный финиш - выход только по сбросу или по внешнему прерыванию INT0. Последнее предусмотрено только у некоторых моделей микроконтроллеров (i87c51fa и др.). После выключения порты и регистры внутренней памяти сохраняют свое значение, но таймеры останавливаются. Процессор переходит в режим микропотребления. Данный режим актуален для аппаратуры с автономным питанием, где предусмотрена возможность активизации внешним сигналом (вывод сброса). Общее замечание – чтобы обеспечить минимальное потребление, порты должны быть установлены в низкий уровень.
    Пример:
    P0 = 0 : P1 = 0 : P2 = 0 : P3 = 0 : POWERDOWN
    PRINT, PRINTHEX
    Действие:
    Послать данные в виде текстовой строки в последовательный интерфейс (RS-232 port). PRINT - преобразует все виды числовых данных в десятичный вид. При выводе отрицательных значений перед печатаемым числом ставит знак минус (« - »). PRINTHEX - выводит числовые данные в шестнадцатеричном виде (HEX - коде). Для работы этих функций в системе должен быть иметься и быть настроен последовательный интерфейс. Если этого не сделать, компилятор произведет их сам, воспользовавшись параметрами меню “Options”.
    Синтаксис
    :
    PRINT var ; «constant»
    PRINTHEX var
    Var - имя переменной или константы или непосредственные данные, которые будут выводиться в последовательный порт. Числовые переменные при выводе преобразуются в удобочитаемый текстовый вид. В одной строке, разделяя точкой с запятой (« ; ») можно выводить несколько переменных или констант, совершенно разного типа. Оператор PRINTHEX может выводить данные переменных только типа: Byte, Word, Integer, Long. Выводимые данные завершаются разделителем (ВК, ПС). Применение оператора PRINT без параметров вызывает вывод только одного разделителя (ВК, ПС).
    1   2   3   4   5   6   7   8   9   10   ...   25


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