Объявление

Свернуть
Пока нет объявлений.

Полезные подпрограммы для PIC-контроллеров

Свернуть
X
Свернуть
  •  

  • Полезные подпрограммы для PIC-контроллеров

    Задержка с программируемым временем.

    Задержка для этой подпрограммы задается перед обращением к ней как загрузка числа в регистр cnt1. Общее число циклов определяется по формуле: 256*256*cnt1*7. Для примера, приблизительно 1 секунда при частоте 20 МГц задается загрузкой 11 в cnt1. Примечательно, что в каждом цикле одно и тоже количество выполняемых команд.
    Название: delay
    Входные данные:
    число, пропорциональное задержке в регистре cnt1.
    Выходные: задержка.
    Используемые регистры: cnt1, cnt2, cnt3.
    ; Delay 1sec@20MHz:
    ; cnt1 = Cycles/256/256/7 = (20000000/4)/256/256/7 = 10.899 = 11
    ;
    delay movlw .11
    movwf cnt1
    clrf cnt2
    clrf cnt3
    dloop decfsz cnt3,f
    goto $+2
    decfsz cnt2,f
    goto $+2
    decfsz cnt1,f
    goto dloop
    return

    Перевод двоичного числа в двоично-десятичное.

    Для вывода цифр на индикатор (в примере на 4-разрядный) необходимо преобразовать 2-байтное двоичное число в двоично-десятичное (3-бфйтное). Вот подпрограмма, которая может это сделать.
    Название: bin2bcd
    Входные данные:
    двоичное число в регистрах bin1, bin2. При этом bin1 - старший байт.
    Выходные: единицы будут в младшей тетраде регистра bcd3, десятки в старшей регистра bcd3,
    сотни в младшей тетраде регистра bcd2, тысячи в старшей bcd2,
    десятки тысяч будут находиться в младшей тетраде регистра bcd1.
    Используемые регистры: bin1, bin2, bcd1, bcd2, bcd3, ctr.
    bin2bcd movlw .16
    movwf ctr
    clrf bcd1
    clrf bcd2
    clrf bcd3
    goto start

    adjdec movlw 0x33
    addwf bcd1,f
    addwf bcd2,f
    addwf bcd3,f

    movlw 0x03
    btfss bcd1,3
    subwf bcd1,f
    btfss bcd2,3
    subwf bcd2,f
    btfss bcd3,3
    subwf bcd3,f

    movlw 0x30
    btfss bcd1,7
    subwf bcd1,f
    btfss bcd2,7
    subwf bcd2,f
    btfss bcd3,7
    subwf bcd3,f

    start rlf bin2,f
    rlf bin1,f
    rlf bcd3,f
    rlf bcd2,f
    rlf bcd1,f
    decfsz ctr,f
    goto adjdec
    return

    Быстрый перевод 2-битного двоичного числа в "распакованное" десятичное.

    Еще одна быстрая программа перевода, автор John Payson. Добавлением к каждому байту результата числа 30h можно получить число в ASCII формате.
    ; Binary-to-BCD. Written by John Payson.
    ;
    ; Enter with 16-bit binary number in NumH:NumL.
    ; Exits with BCD equivalent in TenK:Thou:Hund:Tens:Ones.
    ;
    org $0010 ;Start of user files for 16c84
    NumH: ds 1
    NumL: ds 1
    TenK: ds 1
    Thou: ds 1
    Hund: ds 1
    Tens: ds 1
    Ones: ds 1
    Convert: ; Takes number in NumH:NumL
    ; Returns decimal in
    ; TenK:Thou:Hund:Tens:Ones
    swapf NumH,w
    andlw $0F ;*** PERSONALLY, I'D REPLACE THESE 2
    addlw $F0 ;*** LINES WITH "IORLW 11110000B" -AW
    movwf Thou
    addwf Thou,f
    addlw $E2
    movwf Hund
    addlw $32
    movwf Ones

    movf NumH,w
    andlw $0F
    addwf Hund,f
    addwf Hund,f
    addwf Ones,f
    addlw $E9
    movwf Tens
    addwf Tens,f
    addwf Tens,f

    swapf NumL,w
    andlw $0F
    addwf Tens,f
    addwf Ones,f

    rlf Tens,f
    rlf Ones,f
    comf Ones,f
    rlf Ones,f

    movf NumL,w
    andlw $0F
    addwf Ones,f
    rlf Thou,f

    movlw $07
    movwf TenK

    ; At this point, the
    ; original number is equal to
    ; TenK*10000+Thou*1000+Hund*100+Tens*10+Ones
    ; if those entities are regarded as two's compliment
    ; binary. To be precise, all of them are negative
    ; except TenK. Now the number needs to be normal-
    ; ized, but this can all be done with simple byte
    ; arithmetic.

    movlw $0A ; Ten
    Lb1:
    addwf Ones,f
    decf Tens,f
    btfss 3,0
    goto Lb1
    Lb2:
    addwf Tens,f
    decf Hund,f
    btfss 3,0
    goto Lb2
    Lb3:
    addwf Hund,f
    decf Thou,f
    btfss 3,0
    goto Lb3
    Lb4:
    addwf Thou,f
    decf TenK,f
    btfss 3,0
    goto Lb4

    retlw 0


    Источник: disall.narod.ru
      Возможность размещать комментарии к сообщениям отключена.

    Метки статей

    Свернуть

    Меток пока нет.

    Новые статьи

    Свернуть

    • «NO EXCUSES» — специальная программа компании MOTOROLA
      от admin
      Дмитрий Панфилов
      «NO EXCUSES» — специальная программа компании MOTOROLA

      Ни для кого не секрет, что микропроцессоры и микроконтроллеры находят самое широкое применение в различных областях науки и техники. Сегодня трудно указать область электроники, где не использовались бы микроконтроллеры. Количество...
      10.02.2017, 14:56
    • Частотомер на PIC16F873 с двух строчным ЖКИ способный измерять частоты
      от admin
      alt="" />Частотомер на PIC16F873 с двух строчным ЖКИ способный измерять частоты от 10Гц до 45МГц. Чувствительность по входу около 50мВ, входное сопротивление 250 Ком, входная ёмкость 15пФ. Питание девятивольтная батарея 6F22.В память можно вносить значения, которые будут, прибавлены к входной частоте...
      10.02.2017, 14:56
    • Управление нагрузкой 220В переменного напряжения с использованием симисторов
      от admin
      Для плавного управления нагрузкой, например, лампой освещения, можно использовать симистор. Открывается симистор током при подачи на управляющий электрод импульса. Закрывается, когда ток, проходящий через него, становится равным нулю, когда переменное напряжение меняет знак.
      ...
      10.02.2017, 14:56
    • Управление модулем Ke-USB24A из Excel
      от admin
      Всю прелесть программирования USB модуля Ke-USB24A можно оценить когда встает вопрос о необходимости написания программы на каком-либо не очень широко распространенном языке или для какой-либо среды, которая, казалось бы не предусматривает возможность работы с USB устройствами....
      10.02.2017, 14:55
    • Управление матрицей 8х8 - легко!
      от admin
      Матрица управляется так же как и 7-сегментные индикаторы - динамически. Мега16 портом А управляет одной координатой (выбирает сторку для вывода инфы), порт С - выводит ту самую информацию. Информация берётся из массива.
      />

      />
      Что бы пользоваться редактором, нужно переменную STROKA из примера переименовать в rows_arr.
      Вложения: matrica8x8.fcf_avr (56 Кб) Любители ПИКов, вам не составит труда пореколбасить этот п...
      10.02.2017, 14:55
    • То, что улучшает нашу жизнь (микросхемы для домашних и игровых устройств)
      от admin
      Журнал «Компоненты и технологии» №8 2001 г.
      Ракович Н. Н.

      "В человеке все должно быть прекрасно… и у него в доме тоже"
      (Почти по А. П. Чехову)
      В последнее время при чтении профессиональных электронных журналов и статей, посвященных использованию электронных компонентов, у меня возникло и окрепло унылое ощущение, что вся гигантская...
      10.02.2017, 14:55
    Обработка...
    X