Описание инструкций МК PIC
Константа в инструкциях представлена символом k. В описании инструкций указаны флаги, которые могут измениться при ее выполнении. Параметр d (dest) в инструкциях определяет, в какой регистр записывается результат. Если d =0 или отсутствует, результат сохраняется в регистре W. Если d =1, результат сохраняется в регистре f ( от слова file). В программах для параметра d вместо ‘0’ можно писать ‘ W ’, вместо ‘1’ можно писать ‘ f ’. Вместо адреса регистра в программе более удобно писать его символьное имя. Например, если регистр по адресу h’21’ имеет имя R1, тогда инструкция, описанная как ADDWF f, d, в программе может быть записана двумя способами: ADDWF h’21’, W или ADDWF R1, W. Директива ORG h’xx’ – это указатель для ассемблера, что код, следующий за этим выражением, начинается с адреса h’xx’ ЭППЗУ.
ADDLW - Сложить k с W. Синтаксис: [label] ADDLW k. Операнды: 0£k£255. Операция: (W) + k à (W). Изменяемые флаги: С, DC, Z.
ADDWF -Сложение W и f. Синтаксис: [label] ADDWF f, d. Операнды: 0£f£127. Операция: (W) + (f) à (dest). Изменяемые флаги: C, DC, Z. ANDLW - Побитное ' И ' k и W. Синтаксис: [label] ANDLW k. Операнды: 0£k£255. Операция: (W).AND. k à (W). Изменяемые флаги: Z.
ANDWF -Побитное 'И’ W и f. Синтаксис: [label] ANDWF f, d. Операнды: 0£f£127. Операция: (W).AND. (f) à (dest). Изменяемые флаги: Z.
BCF -Очистить бит b в регистре f. Синтаксис: [label] BCF f, b. Операнды: 0£f£127; 0£b£7. Операция: 0 à (f<b>). Изменяемые флаги: Нет. BSF -Установить бит b в регистре f. Синтаксис: [label] BSF f, b. Операнды: 0£f£127; 0£b£7. Операция: 1àf<b>. Изменяемые флаги: Нет. BTFSC -Проверить бит b в регистре f, пропустить следующую инструкцию, если b=0. Синтаксис: [label] BTFSC f, b. Операнды: 0£f£127; 0£b£7.
Изменяемые флаги: Нет. Описание: Если бит b в регистре f равен 0, то следующая инструкция программы пропускается.
BTFSS - Проверить бит bв регистре f, пропустить, если b = 1. Синтаксис: [label] BTFSS f, b. Операнды: 0£f£127; 0£b£7. Изменяемые флаги: Нет. Описание: Если бит b в регистре f равен ‘1’, то следующая инструкция программы пропускается.
CALL Вызов подпрограммы Синтаксис: [label] CALL f. CLRF -Очистить f. Синтаксис: [label] CLRF f. Операнды: 0£f£127. Операция: 00h à (f); 1 àZ. Изменяемые флаги: Z. Описание: Очистить содержимое регистра f и установить флаг Z=1.
COMF - Инвертировать f. Синтаксис: [label] COMF f, d. Операнды: 0£f£127. Операция: (-f) à (dest). Изменяемые флаги: Z. Описание: Инвертировать все биты в регистре f.
DECF -Вычесть 1 из f и пропустить, если f=0. Синтаксис: [label] DECFSZ f, d. Операнды: 0£f£127. Операция: (f) -1 à (dest). Изменяемые флаги: Нет. Описание: Декрементировать содержимое регистра f. Если результат равен '0', то следующая инструкция программы пропускается. GOTO -Безусловный переход. Синтаксис: GOTO k. Операнды: 0£k£2047. Операция: Переход на метку. Изменяемые флаги: Нет. INCF -Прибавить 1 к f. Синтаксис: label] INCF f, d. Операнды: 0£f£127. Операция: (f) + 1 à (dest). Изменяемые флаги: Z. IORLW -Побитное 'ИЛИ' k и W. Синтаксис: [label] IORLW k. Операнды: 0£k£255. Операция (W).OR.(k) à (W). Изменяемые флаги: Z.
IORWF - Побитное 'ИЛИ' W и f. Синтаксис: [label] IORWF f, d. Операнды: 0£f£127. Операция: (W).OR.(f) à (dest). Изменяемые флаги: Z.
MOVF - Переслать f. Синтаксис: [label] MOVF f, d. Операнды: 0£f£127. Операция: (f) à (dest). Изменяемые флаги: Z. Описание: Значение d=1 используется для проверки содержимого регистра f на ноль, которое регистрируется флагом Z. MOVLW - Переслать k в W. Синтаксис: [label] MOVLW k. Операнды: 0£k£255. Операция: kà(W). Изменяемые флаги: Нет. Описание: В неиспользуемых битах ассемблер устанавливает '0'.
MOVWF -Переслать W в f. Синтаксис: [label] MOVWF f. Операнды: 0£f£127. Операция: (W) à (f). Изменяемые флаги: Нет. NOP -Нет операции.
RETURN -Возврат из подпрограммы. Синтаксис: [label] RETURN. Операнды: Нет. Операция: TOS à PC. Изменяемые флаги: Нет. Описание: Возврат из подпрограммы. Вершина стека TOS загружается в счетчик PC. RLF -Циклический сдвиг регистра f влево через бит C регистра Status. Синтаксис: [label] RLF f, d. Операнды: 0£f£127. Изменяемые флаги: С. Описание: Выполняется циклический сдвиг влево содержимого регистра f через бит С регистра Status. RRF - Циклический сдвиг регистра f вправо через бит C регистра status. Синтаксис: [label] RRF f, d. Операнды: 0£f£127. Изменяемые флаги: С. Описание: Выполняется циклический сдвиг вправо содержимого регистра f через бит С регистра Status.
SLEEP Перейти в режим SLEEP. Синтаксис: [label] SLEEP. Операнды: Нет. Операция: 00h à WDT; 00h à предделитель WDT; 1 à -ТО; 0 à PD. Изменяемые флаги: -ТО, -PD. Описание: Сбросить флаг включения питания -PD в '0'. Установить флаг -ТО переполнения WDT в '1'. Очистить таймер WDT и его предделитель. Перевести микроконтроллер в режим SLEEP и выключить тактовый генератор. SUBLW -Вычесть W из k. Синтаксис: [label] SUBLW k. Операнды: 0£k£255. Операция: k - (W) à (W). Изменяемые флаги: C, DC, Z. SUBWF -Вычесть W из f. Синтаксис: [label] SUBWF f, d. Операнды: 0£f£127; dÎ [0,1]. Операция: (f) –(W) à (dest). Изменяемые флаги: C, DC, Z. SWAPF -Поменять местами полубайты в регистре f. Синтаксис: [label] SWAPF f, d. Операнды: 0£f£127. Операция: (f<3:0>) à (dest<7:4>). Изменяемые флаги: Нет. XORLW- Побитное 'исключающее ИЛИ ' k и W. Синтаксис: label] XORLW k. Операнды: 0£k£255. Операция: (W).XOR.k à (W). Изменяемые флаги: Z. XORWF - Побитное 'исключающее ИЛИ ' W и f. Синтаксис: [label] XORWF f, d. Операнды: 0£f£127. Операция: (W).XOR.(f) à (dest). Изменяемые флаги: Z. Приложение Е Модуль таймера TMR1 TMR1 - 16-разрядный таймер/счетчик, состоящий из двух 8-разрядных регистров (TMR1H и TMR1L), доступных для чтения и записи. Счет выполняется в спаренных регистрах (TMR1H:TMR1L), инкрементируется их значение от 0000h до FFFFh. При добавлении ещё единицы будет переполнение регистров и в счетчиках будет снова 0000h. При переполнении счетчика устанавливается в '1' бит флага прерывания TMR1IF в регистре PIR1<0>. Само прерывание можно разрешить/запретить установкой/сбросом бита TMR1IE в регистре Р1Е1<0>.
TMR1 может работать в режимах: режим таймера, режим счетчика. Включается TMR1 установкой бита TMR1ON в ‘1’ (T1CON<0>). Битом TMR1CS (T1CON<1>) выбирается источник тактовых импульсов. TMR1 инкрементируется при каждом машинном цикле. Когда включен генератор тактовых импульсов (T1OSCEN=1), выводы RC1/T1OSI/CCP2 и РС0/T1OSO/TICK1 настроены как входы. Значение битов TRISC<1:0> игнорируется, а чтение данных с этих выводов дает результат '0'. Управляющие биты TMR1 находятся в регистре T1CON. Сброс регистров TMR1 (TMR1H, TMR1L). Регистры TMR1H и TMR1L не сбрасываются в 00h при сбросе по включению питания и других видах сброса. Предделитель TMR1 очищается при записи чисел в регистр TMR1L или TMR1H. Регистр PIE1 (адрес 8Ch) доступен для чтения и записи, содержит биты разрешения периферийных прерываний. Чтобы разрешить периферийные прерывания необходимо установить в '1' бит PEIE (INTCON<6>). Регистр INTCON (адрес 0Вh, 8Вh, 10Вh или 18Вh) доступен для чтения и записи, содержит биты разрешений и флаги прерываний: переполнение TMR1; изменения уровня сигнала на выводах PORTB; внешний источник прерываний RB0/INT. Примечание. Флаги прерываний устанавливаются при возникновении условий прерываний вне зависимости от соответствующих битов разрешения и бита общего разрешения прерываний GIE (INTCON<7>). Регистр PIR1 доступен для чтения и записи, он содержит флаги прерываний периферийных модулей. Примечание. Флаги прерываний устанавливаются при возникновении условий прерываний вне зависимости от соответствующих битов разрешения и бита общего разрешения прерываний GIE (INTCON<7>). Программное обеспечение пользователя должно сбрасывать соответствующие флаги при обработке прерываний от периферийных модулей.
Приложение Ж Таймер TMR0 Таймер TMR0 – 8-разрядный таймер/счетчик с предделителем. Чем больше коэффициент предделителя, тем медленнее заполняется счетчик таймера TMR0. После переполнения счетчика (значение в регистре TMR0 равно FFh) происходит прерывание, в результате чего в регистре INTCON бит TOIF (бит 2) устанавливается в 1. Само прерывание может быть разрешено/запрещено установкой/сбросом бита TOIE (INTCON<5>). При запрете прерывания программа не останавливается, но флаг прерывания от TMR0 TOIF (INTCON<2>) появляется и он должен быть сброшен в подпрограмме обработки прерывания или в основной программе. Для включения таймера и получения прерывания от него при переполнении счетчика таймера используются регистры OPTION_REG и INTCON. Связь регистров и бит с ТМR0 показана в таблице 4.1.
Таблица 4.1 Связь регистров и бит с ТМR0
Затененные биты не используются. Регистр OPTION_REG Регистр OPTION_REG доступен для чтения и для записи. Он содержит биты: конфигурации предделителя (PSC) для TMR0/WDT, внешнего преры-вания INT и состояния выходов порта В. Описание битов регистра OPTION_REG показано в таблице Ж.1. Таблица Ж.1 Регистр OPTION_REG (адреса 81h, 181h)
Назначение битов регистра OPTION_REG приведено ниже. Бит 7: - RBPU: включение подтягивающих резисторов на PORTВ 0 = подтягивающий резистор включен 1 = подтягивающий резистор выключен Примечание: если используется низкий уровень напряжения при програм-мировании по входу PGM и выводы PORTB подтянуты к высокому уровню, то 3-ий бит в регистре TRISB необходимо сбросить, чтобы вход RB3 не был подтянут к высокому уровню. Это необходимо для правильного програм-мирования устройства. Бит 6: INTEDG: выбор активного фронта сигнала прерывания на входе RB0/INT регистра PORTB 0 = прерывание по заднему фронту. 1 = прерывания по переднему фронту. Бит 5: TOCS: выбор источника тактового сигнала для TIMER0. 1 = тактовый сигнал с входа RA4/T0CKI. 0 = внутренний источник тактового сигнала (CLKOUT). Бит 4: T0SE: выбор фронта приращения TMR0 при внешнем тактовом сигнале 1 = приращение по заднему фронту сигнала на T0CKI. 0 = приращение по переднему фронту сигнала на T0CKI. Бит 3: PSA: выбор включения предделителя. 1 = предделитель включен перед сторожевым таймером WDT. 0 = предделитель включен перед таймером TMR0. Биты 2-0: PS2 - PS0; выбор коэффициента предделителя. Чем больше коэффи-циент предделителя, тем больше время паузы, обеспечиваемой таймером. Коэффициенты деления предделителя показаны в таблице 4.2.
Таблица Ж.2 Коэффициенты деления в зависимости от значений PS2- PS0
Установка коэффициента деления предделителя 1:1 для TMR0 соответствует переключению предделителя на сторожевой таймер. Регистр INTCON Регистр INTCON доступен для чтения и для записи. Он содержит биты масок прерываний и флаги прерываний. Флаги прерываний должны сбрасываться программно. Регистр показан в таблице Ж.3. Таблица Ж.3 Регистр INTCON (адреса 0Bh, 8Bh, 10Bh, 18Bh)
Назначение битов регистра INTCON приведено ниже. Бит 7: GIE – Общее (глобальное) управление прерываниями. 1=все немаскируемые прерывания разрешены. 0=все прерывания запрещены. Примечание: Если происходит прерывание, то бит GIE сбрасывается. По команде выхода из подпрограммы (RETFIE) этот бит устанавливается. Бит 6: PEIE – маска прерываний от периферийных устройств 1=все немаскируемые прерывания периферийных устройств разрешены 0=все прерывания периферийных устройств запрещены Бит 5: T0IE – маска прерывания по переполнению TMR0 1=прерывание TMR0 разрешено 0= прерывание TMR0 запрещено Бит 4: INTE – маска внешнего прерывания по входу RB0/INT 1=прерывание по входу RB0/INT разрешено 0=прерывание по входу RB0/INT запрещено Бит 3: RBIE – маска прерывания по изменению состояния на входах RB7: RB4 PORTB 1=прерывание по изменению уровня сигнала на входах RB7: RB4 PORTB разрешено 0=прерывание по изменению уровня сигнала на входах RB7: RB4 PORTB запрещено Бит 2: T0IF – флаг прерывания при переполнении TMR0 1=устанавливается, если регистр TMR0 переполнен (очищается программно) 0=если регистр TMR0 не переполнен Бит 1: INTF – флаг внешнего прерывания по входу RB0/INT 1=устанавливается, если происходит прерывание по входу RB0/INT 0=если прерывание по входу RB0/INT не произошло Бит 0: RBIF – флаг прерывания по изменению уровня сигнала на входах RB7: RB4 PORTB 1=устанавливается, если изменился уровень сигнала на одном из входов RB7:RB4 PORTB (очищается программно) 0=если уровень сигнала на входах RB7:RB4 не изменились. Приложение З Модуль АЦП Модуль аналого-цифрового преобразователя (АЦП) имеет восемь каналов у 40/44-выводных микросхем. Входной аналоговый сигнал через коммутатор каналов заряжает внутренний конденсатор АЦП Chold. Модуль АЦП преобразует напряжение, удерживаемое на конденсаторе Chold в соответствующий 10-разрядный цифровой код методом последовательного приближения. Источник верхнего и нижнего опорного напряжения может быть программно выбран с выводов VDO, VSS, RA2 или RA3. Допускается работа модуля АЦП в SLEEP режиме микроконтроллера, при этом в качестве источника тактовых сигналов должен быть выбран RC генератор. Для управления АЦП в микроконтроллере используется 4 регистра. - регистр результата ADRESH (старший бит); - регистр результата ADRESL (младший бит); - регистр управления ADCON0; - регистр управления ADCON1. Регистр ADCON0 используется для настройки работы модуля АЦП, а с помощью регистра ADCON1 устанавливается какие входы микроконтроллера будут использоваться модулем АЦП и в каком режиме (аналоговый вход или цифровой порт ввода/вывода).
Регистр ADCON0 (адрес 1Fh) Таблица З.1
Бит 7 Бит 0
Биты 7-6: ADCS1: ADCS0: выбор источника тактового сигнала Время получения одного бита результата определяется параметром ТAD. Для 10-разрядного результата требуется как минимум 12 ТAD. Параметры тактового сигнала для АЦП определяются программно, ТAD может принимать следующие значения: 00= 2ТOSC 01= 8ТOSC 10= 32ТOSC 11= время такта внутреннего генератора RC модуля АЦП
Биты 5-3: CHS2: CHS0: выбор аналогового сигнала 000 = канал 0, (RA0/AN0) 001 = канал 1, (RA1/AN1) 010 = канал 2, (RA2/AN2) 011 = канал 3, (RA3/AN3) 100 = канал 4, (RA4/AN4) 101 = канал 5, (RA5/AN5) 110 = канал 6, (RA6/AN6) 111 = канал 7, (RA7/AN7)
Бит 2: GO/-DONE: бит статуса модуля АЦП Если ADON = 1 1: модуль АЦП выполняет преобразование(установка бита вызывает начало преобразования) 0: состояние ожидания (аппаратно сбрасывается по завершению преоб-разования)
Бит 1 Не используется: читается как ‘0’
Бит 0 ADON: бит включения модуля АЦП 1: модуль АЦП включен 0: модуль АЦП выключен и не потребляет тока
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|