На ножку, работающую в режиме вывода, не должны “наваливаться” внешние источники токов(“монтажное И”, “монтажное ИЛИ”). Результирующие большие токи могут повредить кристалл.
Запись в порт вывода происходит в конце командного цикла. Но при чтении, данные должны быть стабильны в начале командного цикла. Будьте внимательны в операциях чтения, следующих сразу за записью в тот же порт. Здесь надо учитывать инерционность установления напряжения на выводах. Может потребоваться программная задержка, чтобы напряжение на ножке (зависит от нагрузки) успело стабилизироваться до начала исполнения следующей команды чтения.
Каждая команда PIC16C84 - это 14-битовое слово, которое разделено по смыслу на следующие части: - 1. код операции, -2. поле для одного и более операндов, которые могут участвовать или нет в этой команде. Система команд PIC16C84 включает в себя байт-ориентированные команды, бит-ориентированные, операции с константами и команды передачи управления.
Для байт-ориентированных команд “f” обозначает собой регистр, с которым производится действие; “d” - бит определяет, куда положить результат. Если “d” =0, то результат будет помещен в W регистр, при “d”=1 результат будет помещен в “f”, упомянутом в команде. Для бит-ориентированных команд “b” обозначает номер бита, участвующего в команде, а “f” -это регистр , в котором этот бит расположен.
Для команд передачи управления и операций с константами, “k” обозначает восьми или одинадцатибитную константу.
Все команды выполняются в течение одного командного цикла. В двух случаях исполнение команды занимает два командных цикла: -1. проверка условия и переход, -2.изменение программного счетчика как результат выполнения команды. Один командный цикл состоит из четырех периодов генератора. Таким образом, для генератора с частотой 4 МГц время исполнения командного цикла будет 1 мкс.
Мнемокод | Название команды | Флаги | Примеч | |
ADDWF | f,d | Сложение W с f | C,DC,Z | 2,3 |
ANDWF | f,d | Логическое И W и f | Z | 2,3 |
CLRF | f | Сброс регистра f | Z | 3 |
CLRW | Сброс регистра W | Z | ||
COMF | f,d | Инверсия регистра f | Z | 2,3 |
DECF | f,d | Декремент регистра f | Z | 2,3 |
DECFSZ | f,d | Декремент f, пропустить команду, если 0 | 2,3 | |
INCF | f,d | Инкремент регистра f | Z | 2,3 |
INCFZ | f,d | Инкремент регистра f, пропустить команду, если 0 | 2,3 | |
IORWF | f,d | Логическое ИЛИ W и f | Z | 2,3 |
MOVF | f,d | Пересылка регистра f | Z | 2,3 |
MOVWF | f | Пересылка W в f | 3 | |
NOP | Холостая команда | |||
RLF | f,d | Сдвиг f влево через перенос | C | 2,3 |
RRf | f,d | Сдвиг f вправо через перенос | C | 2,3 |
SUBWF | f,d | Вычитание W из f | C,DC,Z | 2,3 |
SWAPF | f,d | Обмен местами тетрад в f | 2,3 | |
XORWF | f,d | Исключающее ИЛИ W и f | Z | 2,3 |
ADDLW | k | Сложение константы с W. | C,DC,Z | |
ANDLW | k | Логическое И константы и W | Z | |
IORLW | k | Логическое ИЛИ константы и W | Z | |
SUBLW | k | Вычитание W из константы. | C,DC,Z | |
MOVLW | k | Пересылка константы в W | ||
XORLW | k | Исключающее ИЛИ константы и W | Z | |
OPTION | Загрузка W в OPTION регистр | 1 | ||
TRIS | f | Загрузка TRIS регистра | 1 |
Мнемокод | Название команды | Флаги | Примеч | |
BCF | f,d | Сброс бита в регистре f | 2,3 | |
BSF | f,d | Установка бита в регистре f | 2,3 | |
BTFSC | f,b | Пропустить команду, если бит равен 0 | ||
BTFSS | f,b | Пропустить команду, если бит равен 1 |
Мнемокод | Название команды | Флаги | Примеч | |
CALL | k | Вызов подпрограммы | ||
CLRWDT | Сброс Watchdog таймера | TO,PD | ||
GOTO | k | Переход по адресу | ||
RETLW | k | Возврат из подпрограммы с загрузкой константы в W | ||
RETFIE | Возврат из прерывания. | |||
RETURN | Возврат из подпрограммы. | |||
SLEEP | Переход в режим SLEEP | TO,PD |
Замечания и пояснения
Примечание 1: Команды TRIS и OPTION помещены в перечень команд для совместимости с семейством PIC16C5X. Их использование не рекомендуется. В PIC16C84 регистры TRIS и OPTION доступны для чтения и записи как обычные регистры с номером. Предупреждаем, что эти команды могут не поддерживаться в дальнейших разработках PIC16CXX.
Примечание 2: Когда модифицируется регистр ввода/вывода, например MOVF 6,1, значение, используемое для модификации считывается непосредственно с ножек кристалла. Если значение защелки вывода для ножки, запрограммированной на вывод равно “1”, но внешний сигнал на этом выводе “0” из-за “навала” снаружи, то будет считываться “0”.
Примечание 3: Если операндом этой команды является регистр f1 (и, если допустимо, d=1), то делитель, если он подключен к RTCC, будет обнулен.
В PIC16C84 существуют различия между вариантами сбросов:
1) Сброс по включению питания.
2) Сброс по внешнему сигналу /MCLR при нормальной работе.
3) Сброс по внешнему сигналу /MCLR в режиме SLEEP.
4) Сброс по окончанию задержки таймера WDT при нормальной работе.
5) Сброс по окончанию задержки таймера WDT в режиме SLEEP.
Некоторые из спец.регистров при сбросе не инициализируются. Они имеют случайное состояние при включении питания и не изменяются при других видах сбросов. Другая часть спец.регистров инициализируются в “состояние сброса” при всех видах сброса, кроме сброса по окончанию задержки таймера WDT в режиме SLEEP. Просто этот сброс рассматривается как временная задержка в нормальной работе. Есть еще несколько исключений. Программный счетчик всегда сбрасывается в ноль (0000h). Биты статуса TO и PD устанавливаются или сбрасываются в зависимости от варианта сброса. Эти биты используются программой для определения природы сброса. Их значения после сброса приведены в таблице.
Состояние регистров после сброса представлено в таблице. Там приняты обозначения: u -не изменяется, x -неизвестно, - не исполняется,читается как `0`. ? - будет установлен по окончанию записи в EEPROM
W | - | xxxx xxxx | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu |
INDIR | 00h | ||||||
RTCC | 01h | xxxx xxxx | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu |
PC | 02h | 0000 | 0000 | PC+1 | 0000 | 0000 | PC+1 |
STATUS | 03h | 0001 1xxx | 0000 1uuu | uuu0 0uuu | 000u uuuu | 0001 0uuu | uuu1 0uuu |
FSR | 04h | xxxx xxxx | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu |
PORT A | 05h | xxxx xxxx | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu |
PORT B | 06h | xxxx xxxx | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu |
TRIS A | 85h | ---1 ---1 | ---1 1111 | ---u uuuu | ---1 1111 | ---1 1111 | ---u uuuu |
TRIS B | 86h | 1111 1111 | 1111 1111 | uuuu uuuu | 1111 1111 | 1111 1111 | uuuu uuuu |
OPTION | 81h | 1111 1111 | 1111 1111 | uuuu uuuu | 1111 1111 | 1111 1111 | uuuu uuuu |
EEDATA | 08h | xxxx xxxx | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu |
EEADR | 09h | xxxx xxxx | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu | uuuu uuuu |
EECON1 | 88h | ---0 0000 | ---0 ?000 | ---u uuuu | ---0 ?000 | ---0 ?000 | ---u uuuu |
EECON2 | 89h | ||||||
PCLATH | 0Ah | ---0 0000 | ---0 0000 | ---u uuuu | ---0 0000 | ---0 0000 | ---u uuuu |
INTCON | 0Bh | 0000 000x | 0000 0000 | uuuu uuuu | 0000 000u | 0000 0000 | uuuu uuuu |
Кристалл PIC16C84 имеет встроенный детектор включения питания. Таймер запуска начинает счет выдержки времени после того, как напряжение питания пересекло уровень около 1,2...1,8 Вольт. По истечении выдержки около 72мс считается, что напряжение достигло номинала и запускается другой таймер выдержка на стабилизацию кварцевого генератора. Программируемый бит конфигурации позволяет разрешать или запрещать выдержку от встроенного таймера запуска. Выдержка запуска меняется от экземпляров кристалла, от питания и температуры. См. характеристики постоянного тока.