Проблемы при организации двунаправленных портов

Некоторые команды внутренне выполняются как чтение+запись. Например, команды BCF и BSF считывают порт целиком, модифицируют один бит и выводят результат обратно. Здесь необходима осторожность. Например, команда BSF для бита 5 регистра f6 (порт В) сначала считает все восемь бит. Затем выполняются действия над битом 5 и новое значение байта целиком записывается в выходные защелки. Если другой бит регистра f6 используется в качестве двунаправленного ввода/вывода (скажем бит 0) и в данный момент он определен как входной, входной сигнал на этой ножке будет считан и записан обратно в выходную защелку этой-же ножки, затирая ее предыдущее состояние. До тех пор пока эта ножка остается в режиме ввода, никаких проблем не возникает. Однако, если позднее линия 0 переключится в режим вывода, ее состояние будет неопределенным.

На ножку, работающую в режиме вывода, не должны “наваливаться” внешние источники токов(“монтажное И”, “монтажное ИЛИ”). Результирующие большие токи могут повредить кристалл.

Последовательное обращение к портам ввода/вывода.

Запись в порт вывода происходит в конце командного цикла. Но при чтении, данные должны быть стабильны в начале командного цикла. Будьте внимательны в операциях чтения, следующих сразу за записью в тот же порт. Здесь надо учитывать инерционность установления напряжения на выводах. Может потребоваться программная задержка, чтобы напряжение на ножке (зависит от нагрузки) успело стабилизироваться до начала исполнения следующей команды чтения.

Обзор команд и обозначения

Каждая команда 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

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: