Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Описание инструкций МК 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

Адрес Имя Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0
01,101 TMR0 Регистр таймера TMR0
0B,8B, 10B,18B INTCON GIE PEIE TOIE INTE RBIE TOIF INTF RBIF
81,181 OPTION_ REG RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

Затененные биты не используются.

Регистр OPTION_REG

Регистр OPTION_REG доступен для чтения и для записи. Он содержит биты: конфигурации предделителя (PSC) для TMR0/WDT, внешнего преры-вания INT и состояния выходов порта В. Описание битов регистра OPTION_REG показано в таблице Ж.1.

Таблица Ж.1 Регистр OPTION_REG (адреса 81h, 181h)

№ бита                
Имя бита RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
после сброса                
доступность R/W R/W R/W R/W R/W R/W R/W R/W
Обозначения: R – читаемый разряд, W – записываемый разряд.  

 

Назначение битов регистра 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

 

  Значение   TMR0 (PSA = 0) WDT (PSA = 1)  
PS2 PS1 PS0
      1:2 1:1
      1:4 1:2
      1:8 1:4
      1:16 1:8
      1:32 1:16
      1:64 1:32
      1:128 1:64
      1:256 1:128

 

Установка коэффициента деления предделителя 1:1 для TMR0

соответствует переключению предделителя на сторожевой таймер.

Регистр INTCON

Регистр INTCON доступен для чтения и для записи. Он содержит

биты масок прерываний и флаги прерываний. Флаги прерываний

должны сбрасываться программно. Регистр показан в таблице Ж.3.

Таблица Ж.3 Регистр INTCON (адреса 0Bh, 8Bh, 10Bh, 18Bh)

№ бита                
Имя бита GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
после сброса                
доступность R/W R/W R/W R/W R/W R/W R/W R/W
Обозначения: R – читаемый разряд, W – записываемый разряд.  

 

Назначение битов регистра 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

 

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0
ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/-DONE - ADON

Бит 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...