Четверг, 02 февраля 2012 19:32

COMF

COMF Инверсия содержимого регистра
Синтаксис: [label] COMF f,d,a
Операнды: 0<=f<=255
d E [0,1]
a Е [0,1]
Операция: NEG(f) ->(dest)
Изменяет флаги: N,Z
Код: 0001 11da ffff ffff
Описание: Инвертирование битов регистра f. Если d=0, то результат сохраняется в регистре W. Если d=1, то результат сохраняется в f регистре. Значение бита доступа к памяти a обрабатывается стандартным образом (по умолчанию a=1)
Слов: 1
Циклов: 1

 

Пример:

            list          p=18F252 ; Используется микроконтроллер PIC18F252.
            #include   p18F252.inc ; Подключение INC-файла PIC18F252.
;*************************************************************************
; Конфигурирование.
;*************************************************************************
            CONFIG      OSC=XT     ; кварц.резонатор
            CONFIG      BOR=OFF    ; Сброс по снижению питания выключен
            CONFIG      WDT=OFF    ; WDT выключен.
            CONFIG      LVP=OFF    ; Режим низковол. программирования выкл.
;************************************
; Регистры общ. назначения
;************************************
            cblock             20h ;
            Temp
            endc                   ;
;*******************************************************************
            org                  0 ;
            goto             START ;
;===================================================================
; Начало программы.
;===================================================================
START       movlw              02h ; записываем шестнадцатеричное число 2
            movwf             Temp ; в регистр Temp
            COMF              Temp ; инверсия регистра Temp
            nop                    ; для отладки
 ;===========================================
            end

 

Разъяснение:

После выполнения команды COMF  значение регистра Temp инвертируется. Или по другому, с  регистром выполняется логическая операция "НЕ".

Если d=0  (COMF        Temp,0  ;), то  результат будет  в W.

 

Четверг, 02 февраля 2012 20:54

CLRF

CLRF Очистка регистра f
Синтаксис: [label] CLRF f,a
Операнды: 0 <= f <= 255
a Е [0,1]
Операция: 00h->f
1-> Z
Изменяет флаги: Z
Код: 0110 101a ffff ffff
Описание: Команда обнуляет содержимое выбранного регистра. Значение бита доступа к памяти a обрабатывается стандартным образом (по умолчанию a=1)
Слов: 1
Циклов: 1

Пример:

            list          p=18F252 ; Используется микроконтроллер PIC18F252.
            #include   p18F252.inc ; Подключение INC-файла PIC18F252.
;*************************************************************************
; Конфигурирование.
;*************************************************************************
            CONFIG      OSC=XT     ; кварц.резонатор
            CONFIG      BOR=OFF    ; Сброс по снижению питания выключен
            CONFIG      WDT=OFF    ; WDT выключен.
            CONFIG      LVP=OFF    ; Режим низковол. программирования выкл.
;************************************
; Регистры общ. назначения
;************************************
            cblock             20h ;
            Temp
            endc                   ;
;*******************************************************************
            org                  0 ;
            goto             START ;
;===================================================================
; Начало программы.
;===================================================================
START       movlw              02h ; записываем шестнадцатеричное число 2
            movwf             Temp ; в регистр Temp
            CLRF              Temp ; очистка регистра
            nop                    ; для отладки
 ;===========================================
            end

 

Разъяснение:

После выполнения команды CLRF  значение регистра Temp  будет 0.

Четверг, 02 февраля 2012 21:54

CPFSLT

CPFSLT Операция сравнения f с W, пропуск след. команды если f<.W
Синтаксис: [label] CPFSLT f,a
Операнды: 0<=f<=255
a Е [0,1]
Операция: (f)-(W),
пропуск след. команды если (f)<(W)
Изменяет флаги: Нет
Код: 0110 000a ffff ffff
Описание: Сравниваются данные регистра f с содержимым регистра W. Если f<.W, вместо следующей по списку команды выполняется пустая операция (NOP) растягивая выполнение данной команды на 2 цикла. Значение бита доступа к памяти a обрабатывается стандартным образом (по умолчанию a=1)
Слов: 1
Циклов: 1(2,3)

Пример:

            list          p=18F252 ; Используется микроконтроллер PIC18F252.
            #include   p18F252.inc ; Подключение INC-файла PIC18F252.
;*************************************************************************
; Конфигурирование.
;*************************************************************************
            CONFIG      OSC=XT     ; кварц.резонатор
            CONFIG      BOR=OFF    ; Сброс по снижению питания выключен
            CONFIG      WDT=OFF    ; WDT выключен.
            CONFIG      LVP=OFF    ; Режим низковол. программирования выкл.
;************************************
; Регистры общ. назначения
;************************************
            cblock             20h ;
            Temp                   ;      
            endc                   ;
;*******************************************************************
            org                  0 ;
            goto             START ;
;===================================================================
; Начало программы.
;===================================================================
START       movlw              .25 ; записываем десятичное число 25
            movwf             Temp ; в регистр Temp

            movlw               .7 ; записываем дяс.число 7 в аккумулятор W
            CPFSLT            Temp ; сравниваем регистр Temp с W            
nop ; если
Temp меньше "W" nop ; если Temp больше "W" ;===========================================             end

 

Разъяснение:

Если в регистре Temp находится число меньше чем в W,  то программа остановится на верхнем NOPe (вместо команды NOP может быть любая другая команда, здесь приведена в качестве примера). Если регистр больше аккумулятора, то соответственно программа остановится на нижнем  NOPe, пропустив тем самым  верхний.

 

Четверг, 02 февраля 2012 21:54

ANDWF

ANDWF Поразрядная операция И W и f
Синтаксис: [label] ANDWF f,d,a
Операнды: 0 <= f <= 255
d Е [0,1]
a Е [0,1]
Операция: (W).AND.(f)->(dest)
Изменяет флаги: Z, N
Код: 0001 01da ffff ffff
Описание: Логическая операция поразрядного сложения И регистров W и f. Если d=0, тогда результат сохраняется в W регистр, если d=1, тогда результат сохраняется в регистре f (по умолчанию). Значение бита доступа к памяти a обрабатывается стандартным образом (по умолчанию a=1)
Слов: 1
Циклов: 1

 

Пример:

            list          p=18F252 ; Используется микроконтроллер PIC18F252.
            #include   p18F252.inc ; Подключение INC-файла PIC18F252.
;*************************************************************************
; Конфигурирование.
;*************************************************************************
            CONFIG      OSC=XT     ; кварц.резонатор
            CONFIG      BOR=OFF    ; Сброс по снижению питания выключен
            CONFIG      WDT=OFF    ; WDT выключен.
            CONFIG      LVP=OFF    ; Режим низковол. программирования выкл.
;************************************
; Регистры общ. назначения
;************************************
            cblock             20h ;
            Temp                   ;      
            endc                   ;
;*******************************************************************
            org                  0 ;
            goto             START ;
;===================================================================
; Начало программы.
;===================================================================
START       movlw       b'10110110'; записываем двоичное число
            movwf             Temp ; в регистр Temp

            movlw      b'00001111' ; записываем двоичное число в аккумулятор W
            ANDWF             Temp ; логическая операция И с  Temp, результат в Temp
            nop                    ; нужен для точки остановки программы 
;===========================================
            end

Разъяснение:

После выполнения команды ANDWF выполняется логическая операция "И" с регистром Temp и  W.  Если d=0 результат сохраняется в аккумуляторе W.

С помощью такой команды очень удобно сбрасывать не нужные биты , к примеру в этой программе (после выполнения команды) сбрасываются старшие четыре бита, не зависимо от их состояния.

 

Четверг, 02 февраля 2012 22:54

ADDWFC

ADDWFC Сложение W и f с использованием флага переноса
Синтаксис: [label] ADDWFC f,d,a
Операнды: 0 <= f <= 255
d Е [0,1]
a Е [0,1]
Операция: (W) + (f) + (C) -> (dest)
Изменяет флаги: C, DC, Z, OV, N
Код: 0010 00da ffff ffff
Описание: Сложение содержимого регистров W , f и флага переноса. Если d=0 - то результат сохраняется в регистре W, если d=1, то в регистре f (по умолчанию). Значение бита доступа к памяти a обрабатывается стандартным образом (по умолчанию a=1)
Слов: 1
Циклов: 1

 

 

Пример:

            list          p=18F252 ; Используется микроконтроллер PIC18F252.
            #include   p18F252.inc ; Подключение INC-файла PIC18F252.
;*************************************************************************
; Конфигурирование.
;*************************************************************************
            CONFIG      OSC=XT     ; кварц.резонатор
            CONFIG      BOR=OFF    ; Сброс по снижению питания выключен
            CONFIG      WDT=OFF    ; WDT выключен.
            CONFIG      LVP=OFF    ; Режим низковол. программирования выкл.
;************************************
; Регистры общ. назначения
;************************************
            cblock             20h ;
            Temp                   ;      
            endc                   ;
;*******************************************************************
            org                  0 ;
            goto             START ;
;===================================================================
; Начало программы.
;===================================================================
START       movlw             .255 ; записываем десятичное число 255
            movwf             Temp ; в регистр Temp
            movlw               .7 ; записываем дес.число 7 в  W (аккумулятор)
            ADDWFC            Temp ; и складываем его с Temp, результат в Temp
            movlw               .0 ; записываем дес.число 0 в  W
            ADDWFC            Temp ; и складываем его с Temp, результат в Temp
         ; ADDWFC             Temp,0 ; или складываем его с Temp, результат в w
            nop                    ; нужен для точки остановки программы 
;===========================================
            end

Разъяснение:

Результат выполнения данной программы виден после того, как поднят флаг переноса "С". Первое выполнение команды ADDWFC в результате сложения чисел 255 и 7  (максимум в байте 255 ) произошло переполнение, (т.е. произошло поднятие флага переполнения) , в результате, при выполнении второй  команды ADDWFC флаг уже был поднят  и хотя мы и складывали с 0 (перед выполнением команды  записали в аккумулятор 0),  регистр увеличился на единицу  за счет флага переноса "С".

 Если d=0 результат сохраняется в аккумуляторе W

 

 

 

Четверг, 02 февраля 2012 23:32

ADDWF

ADDWF Сложение W и f
Синтаксис: [label] ADDWF f,d,a
Операнды: 0 <= f <= 255
d Е [0,1]
a Е [0,1]
Операция: (W) + (f) -> (dest)
Изменяет флаги: C, DC, Z, OV, N
Код: 0010 01da ffff ffff
Описание: Сложение содержимого регистров W и f. Если d=0 - то результат сохраняется в регистре W, если d=1, то в регистре f (по умолчанию). Значение бита доступа к памяти a обрабатывается стандартным образом (по умолчанию a=1)
Слов: 1
Циклов: 1

Пример:

            list          p=18F252 ; Используется микроконтроллер PIC18F252.
            #include   p18F252.inc ; Подключение INC-файла PIC18F252.
;*************************************************************************
; Конфигурирование.
;*************************************************************************
            CONFIG      OSC=XT     ; кварц.резонатор
            CONFIG      BOR=OFF    ; Сброс по снижению питания выключен
            CONFIG      WDT=OFF    ; WDT выключен.
            CONFIG      LVP=OFF    ; Режим низковол. программирования выкл.
;************************************
; Регистры общ. назначения
;************************************
            cblock             20h ;
            Temp                   ;      
            endc                   ;
;*******************************************************************
            org                  0 ;
            goto             START ;
;===================================================================
; Начало программы.
;===================================================================
START       movlw              .25 ; записываем десятичное число 25
            movwf             Temp ; в регистр Temp

            movlw               .7 ; записываем дяс.число 7 в аккумулятор W
            ADDWF             Temp ; и складываем его с Temp, результат в Temp
            nop                    ; нужен для точки остановки программы 
;===========================================
            end

Разъяснение:

Выполняется сумма чисел 25+7=32 (в десятичной системе) или  0x19+0x07=0x20 (в шестнадцатеричной системе счисления). Если d=0 результат сохраняется в аккумуляторе W.

Смотреть видеоурок по темe...

 

Понедельник, 24 декабря 2012 04:44

Сводная таблица команд семейства PIC18XXXX.


 
 
Мнемоника Краткое описание Циклов 16-ти битный код Изменяет флаги
БАЙТ-ОРИЕНТИРОВАННЫЕ КОМАНДЫ
ADDWF f,d,a Сложение W и f 1 0010 01DA FFFF FFFF C, DC, Z, OV, N
ADDWFC f,d,a Сложение W и f с использованием флага переноса 1 0010 00DA FFFF FFFF C, DC, Z, OV, N
ANDWF f,d,a Поразрядная операция И W и f 1 0001 01DA FFFF FFFF Z, N
CLRF f,a Очистка регистра f 1 0110 101A FFFF FFFF Z
COMF f,d,a Инверсия содержимого регистра 1 0001 11DA FFFF FFFF N,Z
CPFSEQ f,a Операция сравнения f с W, пропуск след. команды если f=W 1(2,3) 0110 001A FFFF FFFF Нет
CPFSGT f,a Операция сравнения f с W, пропуск след. команды если f>W 1(2,3) 0110 010A FFFF FFFF Нет
CPFSLT f,a Операция сравнения f с W, пропуск след. команды если f 1(2,3) 0110 000A FFFF FFFF Нет
DCFSNZ f,d,a Уменьшение значения регистра f, пропуск следующей инструкции если результат не равен нулю 1(2,3) 0100 11DA FFFF FFFF Нет
DECF f,d,a Уменьшение значения регистра f 1 0000 01DA FFFF FFFF C, DC, Z, OV, N
DECFSZ f,d,a Уменьшение значения регистра f, пропуск следующей инструкции если результат равен нулю 1(2,3) 0010 11DA FFFF FFFF Нет
INCF f,d,a Увеличение значения регистра f 1 0010 10DA FFFF FFFF C, DC, Z, OV, N
INCFSZ f,d,a Увеличение значения регистра f, пропуск следующей инструкции если результат равен нулю 1(2,3) 0011 11DA FFFF FFFF Нет
INFSNZ f,d,a Увеличение значения регистра f, пропуск следующей инструкции если результат не равен нулю 1(2,3) 0100 10DA FFFF FFFF Нет
IORWF f,d,a Поразрядная операция ИЛИ W и f 1 0001 00DA FFFF FFFF Z, N
MOVF f, d, a Пересылка f 1 0101 00DA FFFF FFFF Z, N
MOVFF fs, fd Пересылка из fs в fd 2(3) 1100 FFFF FFFF FFFFS
1111 FFFF FFFF FFFFD
Нет
MOVWF f,a Пересылка содержимого регистра W в регистр f 1 0110 111A FFFF FFFF Нет
MULWF f,a Умножение содержимого регистров W и f 1 0000 001A FFFF FFFF Нет
NEGF f, a перевод в обратную форму записи содержимого регистра f 1 0110 110A FFFF FFFF C, DC, Z, OV, N
RLCF f, d, a Сдвиг влево регистра f через перенос 1 0011 01DA FFFF FFFF C, N, Z
RLNCF f, d, a Сдвиг влево регистра f (без переноса) 1 0100 01DA FFFF FFFF N, Z
RRCF f, d, a Сдвиг вправо регистра f через перенос 1 0011 00DA FFFF FFFF C, N, Z
RRNCF f, d, a Сдвиг вправо регистра f (без переноса) 1 0100 00DA FFFF FFFF N, Z
SETF f,a Установка всех битов регистра f 1 0110 100A FFFF FFFF Нет
SUBFWB f,d,a Вычитание f из W c заемом 1 0101 01DA FFFF FFFF C, DC, Z, OV, N
SUBWF f,d,a Вычитание W из f 1 0101 11DA FFFF FFFF C, DC, Z, OV, N
SUBWFB f,d,a Вычитание W из f c заемом 1 0101 10DA FFFF FFFF C, DC, Z, OV, N
SWAPF f, d, a Обмен местами полу-байт регистра f 1 0011 10DA FFFF FFFF Нет
TSTFSZ f,a тест f, пропуск если ноль 1(2,3) 1011 BBBA FFFF FFFF нет
XORWF f,d,a Поразрядная операция исключающего ИЛИ W и f 1 0001 10DA FFFF FFFF Z, N
БИТ-ОРИЕНТИРОВАННЫЕ КОМАНДЫ
BCF f,d,a Сброс бита в f 1 1001 BBBA FFFF FFFF Нет
BSF f,d,a Установка бита в f 1 1000 BBBA FFFF FFFF Нет
BTFSC f,b,a Пропуск следующей команды если бит сброшен 1(2,3) 1011 BBBA FFFF FFFF Нет
BTFSS f,b,a Пропуск следующей команды если бит установлен 1(2,3) 1010 BBBA FFFF FFFF Нет
BTG f,b,a Инвертирование бита в регистра f 1 0111 BBBA FFFF FFFF Нет
СИМВОЛЬНЫЕ КОМАНДЫ
ADDLW k Сложение W и k 1 0000 1111 KKKK KKKK C, DC, Z, OV, N
ANDLW k Логическая операция И W и k 1 0000 1011 KKKK KKKK Z, N
IORLW k Логическая операция ИЛИ W и k 1 0000 1001 KKKK KKKK Z, N
LFSR f,k Загрузка регистра FSR 2 1110 1110 00FF KKKK
1111 0000 KKKK KKKK
Нет
MOVLB k Пересылка литеры в регистр BSR 1 0000 0001 KKKK KKKK Нет
MOVLW k Пересылка литеры в регистр W 1 0000 1110 KKKK KKKK Нет
MULLW k Умножение константы и W 1 0000 1101 KKKK KKKK Нет
RETLW k Возврат прерывания с записью константы в регистр W 2 0000 1100 KKKK KKKK Нет
SUBLW k Вычитание W из константы 1 0000 1000 KKKK KKKK C, DC, Z, OV, N
XORLW k Логическая операция исключающего ИЛИ W и k 1 0000 1010 KKKK KKKK Z, N
ТАБЛИЧНЫЕ КОМАНДЫ
TBLRD (*; *+; *-; +*) Чтение таблицы 2 0000 0000 0000 10NN
NN=0 *
NN=1 *+
Нет
TBLWT (*; *+; *-; +*) Запись в таблицу 2 0000 0000 0000 00NN
NN=0 *
NN=1 *+
Нет
КОМАНДЫ УПРАВЛЕНИЯ
BC n Переход если установлен флаг переноса (CARRY) 1(2) 1110 0010 NNNN NNNN Нет
BN n Переход если установлен флаг отрицательного результата (N) 1(2) 1110 0110 NNNN NNNN Нет
BNC n Переход если сброшен флаг переноса (CARRY) 1(2) 1110 0011 NNNN NNNN Нет
BNN n Переход если сброшен флаг отрицательного результата (N) 1(2) 1110 0111 NNNN NNNN Нет
BNOV n Переход если сброшен флаг переполнения (OV) 1(2) 1110 0101 NNNN NNNN Нет
BNZ n Переход если сброшен флаг нулевого результата (Z) 1(2) 1110 0001 NNNN NNNN Нет
BOV n Переход если установлен флаг переполнения (OV) 1(2) 1110 0100 NNNN NNNN Нет
BRA n Безусловный переход 2 1101 0NNN NNNN NNNN Нет
BZ n Переход если установлен флаг нулевого результата (Z) 1(2) 1110 0000 NNNN NNNN Нет
CALL k,s Вызов подпрограммы 2 1110 110S KKKK KKKK
1111 KKKK KKKK KKKK
Нет
CLRWDT Сброс сторожевого таймера (WDT) 1 0000 0000 0000 0100 TO, PD
DAW Десятичная коррекция регистра W 1 0000 0000 0000 0111 C
GOTO k Безусловный переход 2 1110 1111 KKKK KKKK
1111 KKKK KKKK KKKK
Нет
NOP Нет операции 1 0000 0000 0000 0000 Нет
NOP Нет операции 1 1111 XXXX XXXX XXXX XXXX Нет
POP Извлечение из стека 1 0000 0000 0000 0110 Нет
PUSH Размещение в стеке 1 0000 0000 0000 0101 Нет
RCALL n Относительный вызов подпрограммы 2 1101 1NNN NNNN NNNN Нет
RESET Сброс 1 0000 0000 1111 1111 На все флаги
RETFIE s Возврат из прерывания 2 0000 0000 0001 000S GIE/GIEH, PEIE/GIEL
RETURN s Возврат из подпрограммы 2 0000 0000 0001 001S Нет
SLEEP Переход в режим SLEEP 1 0000 0000 0000 0011 TO, PD

 

Понедельник, 08 апреля 2013 05:17

Работа с SD/MMC картой.

 alt  В данной статье рассмотрим один из способов  применение в своих устройствах SD (Secure Digital Memory Card) далее SDC и MMC карт (Multi Media Card),  которые на сегодняшний день являются самыми популярными картами памяти для различных устройств как в промышленности, так и в быту.

   Не составляет исключение и радиолюбители, правда конструкций с практическим применением  карт памяти  не так и  много.Надеюсь эта статья поможет реализовать задуманное.

 

Бывает необходимость сохранения достаточно массивной информации в виде десятичных чисел. Очень удобно сохранять не одно десятичное число в байте, а два (одно число сохраняется в младшем, другое в старшем полубайтах). Тем самым соответственно,  в два раза сокращается и объем необходимой  памяти.

  Следует иметь ввиду, что подключая таким образом клавиатуру в реальном устройстве при нажатии нескольких кнопок одновременно может произойти электрический конфликт между пинами портов, что может привести в выходу их из строя...

 

«В началоНазад12345678910ВперёдВ конец»
Страница 1 из 15

Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru