Глава 14
.pdfприведено на рис. 134. Ограничения на используемые комбинации бит этого регистра связаны с тем, что некоторые из 16 возможных комбинаций бит PCFG3 – PCFG0 могут установить недопустимые для контроллера TTF 5.0 режимы АЦП
(рис. 133):
-напряжения, которые поступают на контакты RA2, RA3 далее могут использоваться как ОПОРНОЕ напряжение для работы АЦП, что в силу их неопределенности приведет к искажению результата «оцифровки»;
-перевод контактов RE0 – RE2 в режим «цифровых» с последующей попыткой «оцифровки» реально поступающего аналогового сигнала также приве-
дет к искажению результата «оцифровки», т.к. конденсатор CHOLD при этом отключен, а соответственно и процесс преобразования невозможен.
Еще одна особенность программирования регистра ADCON1, которую необходимо учитывать, состоит в том, что ОТСУТСТВУЕТ КОМБИНАЦИЯ БИТ PCFG3 – PCFG0 (рис. 135), позволяющая установить состояние контактов
16F877, которая бы соответствовала их подключениям в контроллере TTF 5
(таблица в правой части рис. 133). Даже «разрешенная» на рис. 134 комбинация «0000» кроме «нужных» контактов RE0 – RE2 делает «аналоговыми» (т.е. сигналы с этих контактов могут подаваться на входы АЦП) и «цифровые для TTF 5» контакты RA0 – RA5. Если при этом ошибочно установить биты CHS2 – CHS0 (регистра ADCON0), «оцифровываться» начнет дискретный сигнал с этих контактов.
Поэтому, если в программе одновременно используются и цифровые и аналоговые входы контроллера TTF, необходимо НЕПОСРЕДСТВЕННО ПЕРЕД ЛЮБЫМИ ОПЕРАЦИЯМИ С ПОРТАМИ А и Е ИЗМЕНЯТЬ ИХ СОСТОЯНИЕ НА ТРЕБУЕМОЕ в соответствие с таблицей на рис. 135, т.к. всегда будут появляться ненужные, но запрограммированные режимы работы контактов портов.
14.2.3 Пример ПО для непрерывного измерения амплитуды аналогового сигнала
Постановка задачи: разработать программу, осуществляющую непрерывное (с частотой выполнения программы) измерение текущего значения напряжения, поступающего на вход RA0 микроконтроллера PIC 16F876, в диапазоне от 0 до +5В и записывает его в ОЗУ. Тактовая частота микроконтроллера 4 МГц.
Примечание: в контроллере TTF 4, для которого приводится пример программы и используется микроконтроллер PIC 16F876, контакт RA0 – является аппаратным аналоговым входом. Назначение каналов АЦП для контроллера TTF 5 приведено на рис. 133 и ОТЛИЧАЕТСЯ от рассматриваемого в этом примере.
Блок-схема алгоритма ПО представлена на рис. 136 и имеет следующие особенности:
- в тело алгоритма внесены обязательные дополнительные изменения ASM файла (подробнее о них см. «Методические указания к лаб. работам по курсу ПЦУ»), необходимые для правильной компиляции и получения hex-файла
Подключение файла инструкций PIC16F876.inc, введение вспомога- |
|
||
тельных регистров, установка Reset вектора |
|
|
1 |
|
|
|
|
Выбор нулевой страницы ПЗУ команд |
2 |
|
|
|
|
|
|
Установка макс. времени задержки срабатывания WDT |
3 |
|
|
|
|
|
|
Настройка порта А как входа |
|
|
|
Настройка порта А как аналогового входа, величины источника |
|
||
опорного напряжения АЦП и формата размещения 10-ти разряд- |
|
||
ного результата (ADCON1) |
|
|
|
Выбор аналогового канала RA0 |
|
|
|
и источника тактовых импульсов 8 ТOSC для АЦП (ADCON0) |
|
||
Включение питания на модуль АЦП (ADON=1) |
|
|
|
Вызов процедуры задержки Small_delay (при W=5) на |
|
|
|
30 мкс для зарядки СHOLD |
|
|
|
Старт преобразования АЦП (GO_DONE=1) и ожидание сигнала о его |
|||
завершении от самого АЦП (GO_DONE=0) |
|
|
|
Вызов процедуры задержки Small_delay (при W=10) на 55 мкс для формирова- |
|||
ния паузы АЦП и корректности следующего цикла преобразования |
|||
Вызов процедуры передачи данных на ПК send_data |
|
|
|
Вызов процедуры задержки Big_delay (при W=0) на 328 мс для |
|
||
корректности процесса передачи |
|
|
|
Рис. 136 Блок-схема алгоритма непрерывного измерения температуры с |
|||
передачей данных на ПК для м/к PIC16F876 |
|
|
|
при его работе в составе контроллеров серии TTF, на рис. 136 эти 3 процедуры |
|||
показаны цифрами в кружочках 1 – 3. Далее следует стандартная настройка кон- |
такта RA0 как входа;
-в соответствие с рекомендациями рис. 134 настраиваем регистр ADCON1 для перевода контакта RA0 в аналоговый режим. Выбираем стандартное правое выравнивание двухбайтового результата измерения напряжения при его размещении в регистрах ADRESH, ADRESL и выбираем величину источника опорного напряжения для модуля АЦП не менее максимально возможной величины входного сигнала, т. е +5В (питание микроконтроллера);
-в соответствие с рекомендациями рис. 132 и Табл.10 из п. 14.2.1 настраиваем регистр ADCON0 для выбора длительности преобразования одного бита
(частоту дискретизации) TAD = 8 ТOSC (т.к. при тактовой частоте контроллера 4 МГц это минимально возможное время «оцифровки» одного бита, удовлетво-
ряющее аппаратному ограничению контроллера TAD ≥ 1,6 мкс) при котором получаем TAD = 0,25*8=2 мкс. Кроме этого здесь же выбираем «нулевой» канал АЦП - RA0;
-закончив предварительные процедуры по настройке управляющих регистров АЦП, подаем на него питание, установив бит ADON=1;
-на этом этапе начинается процесс заряда конденсатора CHOLD, поэтому, в соответствие с рис. 129, формируем задержку выполнения дальнейших преобразований, путем вызова процедуры задержки Small_delay. Оформление задержки
ввиде отдельной процедуры удобно, т.к. она будет вызываться еще в одном месте программы. Задержка реализована путем циклического выполнения нескольких строк программного кода W = 5 раз и должна быть не менее 20 мкс (см. рис. 129). В нашем случае время задержки установлено 30 мкс;
-по окончании заряда CHOLD, запускаем старт преобразования АЦП, уста-
новив бит GO_DONE = 1;
-длительность аналого-цифрового преобразования составляет не менее
12TAD = 12*2 = 24 мкс, поэтому на это время не производим никаких действий с сигналом, ожидая результат о получении которого модуль АЦП сообщит автоматически, установив бит GO_DONE = 0;
-по истечении этого времени «оцифровка» закончена и в регистрах ADRESH, ADRESL оказывается 10-ти разрядный эквивалент мгновенного значения входного сигнала.
Примечание: строго говоря, на этом работа программы закончена и в этом месте ее можно было бы зациклить для осуществления «непрерывного» измерения. Однако, далее, на примере этой программы будет показано, как можно организовать передачу полученных данных в ПК. Это сделано с помощью специальной процедуры send_data, реализующей передачу содержимого памяти данных микроконтроллера в специальную программу-монитор, функционирующую на ПК (подробнее об этом см. «Методические указания к лаб. работам по курсу ПЦУ») и позволяющую наблюдать в режиме реального времени изменения состояния регистров памяти данных микроконтроллера. Программно это реализовано путем вызова процедуры send_data после выполнения одного цикла программы измерения;
-формируем задержку (пауза на рис. 129, длительностью не менее 2TAD = 4 мкс) путем вызова процедуры задержки Small_delay, с параметром W = 10, что
составляет 55 мкс; - далее тоже следует вызов еще одной вспомогательной процедуры
Big_delay, реализованной аналогично, но формирующей гораздо более длительную задержку - 328 миллисекунд (реально требуемое время не менее 200 мс), необходимую для корректного завершения процессов обмена данными между ПК и контроллером.
Ниже приведен исходный код программы с комментариями.
PROCESSOR PIC16F876
#include <P16F876.inc>
fCOUNTER equ 0x20 fCOUNTER2 equ 0x21
org 0x000
;директива принудительной установки типа микроконтроллера для компилятора (см. Методические указания к лаб. работам по курсу ПЦУ)
;подключение файла инструкций среды разработки (см. Методические указания к лаб. работам по курсу ПЦУ)
;введение вспомогательных регистров, используемых в работе процедур задержки small_delay, big_delay (см. Методические указания к лаб. работам по курсу ПЦУ)
;директива указания адреса расположения первой команды ПО в памяти программ (см. Методические указания к лаб. работам по курсу ПЦУ)
clrf STATUS movlw 0x00 movwf PCLATH goto Begin
Begin |
bcf |
STATUS, RP1 |
|
|
bsf |
STATUS, RP0 |
|
|
movlw |
b'00001111' |
|
|
movwf |
OPTION_REG |
;установка «нулевой» страницы памяти программ микроконтроллера (см. Методические указания к лаб. работам по курсу ПЦУ)
;принудительный переход к началу выполнения программы (см. Методические указания к лаб. работам по курсу ПЦУ)
;выбор «первого» банка памяти данных, где находится регистр OPTION_REG, и установка с его помощью максимального коэффициента предварительного делителя, включенного перед сторожевым таймером WDT и настроенного на подсчет внутренних тактовых импульсов (см. Методические указания к лаб. работам по курсу ПЦУ»
|
movlw |
0xff |
|
|
movwf |
TRISA |
|
|
clrf |
ADCON1 |
|
|
bsf |
ADCON1, ADFM |
|
|
bcf |
STATUS, RP0 |
|
|
clrf |
ADCON0 |
|
|
bsf |
ADCON0, ADCS0 |
|
Start |
bsf |
ADCON0, ADON |
|
|
movlw |
.5 |
|
|
call |
Small_delay |
|
|
bsf |
ADCON0, GO_DONE |
|
WLoop |
btfsc ADCON0, GO_DONE |
||
|
goto |
WLoop |
;настройка порта А в режим входов
;настройка контакта RА0 в режим аналогового вхо-
да, а величины источника опорного напряжения Еоп = +5 В, путем обнуления бит PCFG0-3 (см. рис. 134, с учетом отличий контроллера 16F876 от 16F8777, приведенного на этом рисунке)
;установка режима правого выравнивания при расположении 10-ти битного результата в 2-х регистрах
(см. рис. 131)
;выбираем «нулевой» банк памяти данных для последующего обращения к регистру ADCON0
;выбираем канал АЦП RA0 (биты CHS0-2 рис. 132, с учетом отличий контроллера 16F876 от 16F8777, приведенного на этом рисунке) и период тактовых импульсов 8 ТOSC (биты ADSC0-1)
;включаем модуль АЦП, при этом начинается заряд накопительной емкости CHOLD
;вызываем процедуру задержки на 30 мкс, с параметром W=5 (см. описание процедуры Big_delay в п. «Методические указания к лаб. работам по курсу
ПЦУ»), необходимую для того чтобы CHOLD успел зарядиться
;старт преобразования, GO_DONE=1
;ожидаем, пока АЦП не окончит процесс преобразования и выставит GO_DONE=0
movlw |
.10 |
|
call |
Small_delay |
|
call |
send_data |
|
movlw |
0x00 |
|
call |
Big_delay |
|
goto |
Start |
|
Big_delay:
…………………….
return
Small_delay:
bcf |
STATUS, RP1 |
|
bcf |
STATUS, RP0 |
|
movwf |
fCOUNTER |
SD_Loop:
clrwdt
decfsz fCOUNTER,f goto SD_Loop return
send_data:
………………………
return
; выдерживаем паузу (не менее 4 мкс для периода
тактовых импульсов 8 ТOSC ) 55 мкс для корректности следующего цикла преобразования, путем вызо-
ва процедуры Small_delay с W=10 (cм. рис. 129)
;вызываем процедуру передачи состояния регистров памяти данных на ПК (см. «Методические указания к лаб. работам по курсу ПЦУ»)
;формируем задержку на 328 мкс (описание процедуры приведено в «Методические указания к лаб. работам по курсу ПЦУ»)
;зацикливаем ПО для обеспечения непрерывного отсчета входного сигнала
;процедура задержки для корректной передачи данных на ПК
;Процедура задержки на (5W + 5) мкс. Работа процедуры основана на двух свойствах:
- время выполнения одной команды контроллера 16F67__ в контроллере TTF равна 1 или 2 мкс;
- в теле процедуры группа таких команд выполняется W раз
; процедура передачи данных на ПК (см. п. «Методические указания к лаб. работам по курсу ПЦУ»)
end |
; окончание программы |
|
Обратите внимание, что тела всех процедур расположены в конце тела основной программы.
14.3 Способы организации взаимодействия микроконтроллера PIC 16F877 с FLASH памятью данных
Существует два способа организации работы PIC контроллеров с энергонезависимой памятью данных (рис. 137), определяемые их аппаратной архитектурой. В первом случае, энергонезависимая (EEPROM) память является внутренней и входит состав контроллера, и АЛУ контроллера взаимодействует с ней через группу специальных регистров без использования специализированных аппаратных интерфейсов (хотя и используются различающиеся между собой логические протоколы обмена данными). Во втором - память является внешней по отношению к микросхеме контроллера и реализуется в виде отдельной микросхемы (группы микросхем). Обмен данными между АЛУ микроконтроллера и микросхемой памяти в этом случае осуществляется с помощью внутреннего специального SPI модуля, реализующего заданный интерфейс и протокол обмена, например - Serial Peripheral Interface (SPI), подключаемого к внешней микросхеме через один из портов контроллера. Строго говоря, PIC 16F877 имеет еще один
ALU |
SFR |
EEPROM |
256 байт |
PIC 16F877 |
внутренняя |
память |
ALU |
|
|
SFR |
|
|
SPI |
PORT |
SPI |
|
||
модуль |
|
интерфейс |
|
|
|
PIC 16F877 |
|
|
внешняя
память
Рис. 137 Способы взаимодействия PIC контроллера с FLASH памятью данных
микросхема EEPROM
аппаратный интерфейс для работы с микросхемами памяти – I2C, но, учитывая, что в контроллере TTF он аппаратно не подключен, в данном пособии он не рассматривается. В обоих случаях память физически реализуется с использованием FLASH технологии с электрическим стиранием.
14.3.1 Организация взаимодействия микроконтроллера PIC 16F877 с микросхемой EEPROM типа 25C04
14.3.1.1 Структура и программирование SPI интерфейса
А. Структура и сигналы SPI магистрали
Взаимодействие микроконтроллера с микросхемами репрограммируемой памяти типа 25С04 (MicroChip) осуществляется с использованием встроенного модуля SPI интерфейса, предназначенного для внутрисхемного обмена данными между master-контроллером и внешними slave-устройствами. Поэтому вначале рассмотрим структуру и сигналы SPI интерфейса с учетом того, что спецификация указанного интерфейса содержит требования не только аппаратного характера, но и оговаривает структуру логического протокола обмена данными между мастер- и slave-устройствами.
Определение: SPI (Serial Peripheral InterfaceТМ, Motorola) – интерфейсом
называется совокупность аппаратных средств и логических правил, обеспечи-
вающих сетевой (с топологией «общая шина») синхронный одномастерный режим последовательного одновременного двунаправленного обмена дан-
ными между более чем двумя микросхемами.
На рис. 138 представлена типовая структура соединения периферийных микросхем с master-контроллером, которая позволяет сформулировать общие
|
|
|
|
|
принципы построения SPI ин- |
||||||
|
|
SDO |
|
контроллер |
терфейса: |
|
|
|
|
||
|
|
SDI |
Память Slave- |
|
1. Аппаратно интерфейс яв- |
||||||
|
|
|
|
|
|
|
|
||||
|
|
SCK |
ляется 4-х проводным: SDO – вы- |
||||||||
|
SDI |
ход |
данных |
в |
последовательном |
||||||
Master-controller |
СS |
||||||||||
SDO |
коде, SDI – вход данных в после- |
||||||||||
|
|||||||||||
SCK |
SDO |
довательном коде, SCK – выход (у |
|||||||||
|
мастер-контроллера) или вход (у |
||||||||||
|
|
||||||||||
PORT |
SDI |
slave-устройства) тактовых син- |
|||||||||
SCK |
хроимпульсов, определяющих на- |
||||||||||
|
|
|
|
|
|
|
|||||
|
|
СS |
|
|
чало |
отсчетов |
значений |
|
битов |
||
|
|
|
|
|
внутри пакета при их последова- |
||||||
|
|
SDO |
|
|
тельной передаче или чтении по |
||||||
|
|
Датчик |
|
контактам SDO/SDI соответствен- |
|||||||
|
|
SDI |
|
||||||||
|
|
|
но. Провод CS (выбор микросхе- |
||||||||
|
|
SCK |
|
||||||||
|
|
|
мы) в явной форме не входит в со- |
||||||||
|
|
|
|
||||||||
|
|
|
|
|
|||||||
|
|
СS |
|
|
став SPI магистрали, в качестве |
||||||
|
|
|
|
|
|||||||
|
|
|
|
|
этой |
линии |
используются |
один |
|||
Рис. 138 Типовая структурная схема |
или несколько выходных разрядов |
||||||||||
какого-либо |
|
порта |
мастер- |
||||||||
|
|
SPI магистрали |
|
|
|
||||||
|
|
|
|
контроллера. Линия CS предна- |
|||||||
|
|
|
|
|
|||||||
|
|
|
|
|
значена для активизации (выбора) |
||||||
одной из slave-микросхем, подключенной к общей 3-х проводной шине. При |
|||||||||||
формировании мастер-контроллером низкого уровня на одном из своих выходов |
|||||||||||
CS, slave-микросхема, подключенная своим входом CS к этому разряду порта |
|||||||||||
контроллера, переходит из высокоимпедансного (по входам/выходам) в активное |
|||||||||||
состояние и начинает реагировать на сигналы на своем входе SDI. Остальные |
|||||||||||
микросхемы (на входах CS которых присутствует «1») при этом продолжают на- |
|||||||||||
ходиться в высокоимпедансном состоянии и не влияют на состояние линий SDI, |
|||||||||||
SDO. Таким образом, осуществляется адресация устройств, подключенных к SPI |
|||||||||||
магистрали, при этом одновременный выбор нескольких slave-устройств исклю- |
|||||||||||
чается на программном уровне за счет работы порта мастер-контроллера в коде |
|||||||||||
«1 из m». |
|
|
|
|
|
|
|
|
|
2.В сети принудительно и изначально выделяется ОДИН мастерконтроллер (за счет его соответствующего программирования), осуществляющий управляемую генерацию импульсов синхронизации на своем выходе SCK, ВСЕ остальные slave-устройства (за счет своей аппаратной струкутры) принимают их по своим входам SCK.
Примечание: при использовании SPI интерфейса для связи двух и более контроллеров, встроенный модуль одного из них изначально программируется как мастер, других – как подчиненные устройства.
3.После выбора мастер-контроллером конкретной микросхемы (по ее входу CS), с которой будет осуществляться обмен данными, дальнейшие процессы происходят в соответствии с Рис. 139:
- момент времени 1 – активизация мастер-контроллером одного из slave-
|
CS |
|
|
|
|
|
|
|
|
|
|
SCK |
|
|
пауза |
|
|
пауза |
|
|
пауза |
|
|
|
|
|
|
|
|
|
|
|
|
SDO/SDI |
передача |
|
передача |
|
|
прием/передача |
|||
|
|
|
|
|
|
|
|
|
||
|
|
7 инструкция 0 |
7 |
адрес |
0 |
|
7 |
данные |
0 |
|
1 |
2 |
……………. |
9 10 |
……………. |
|
17 18 |
……………. |
25 26 |
||
|
|
Рис. 139 Типовая последовательность сигналов SPI магистрали |
||||||||
устройств по его входу CS, после этого с небольшой задержкой мастер- |
||||||||||
контроллер автоматически начинает передавать (формировать) на своем выходе |
||||||||||
SCK последовательность синхроимпульсов; |
|
|
|
|
|
-момент времени 2 – начало передачи мастером на своем выходе SDO 7-го (старшего) бита инструкции (команды, которую мастер-контроллер посылает подчиненному slave-устройству, которую оно должно выполнить) по программируемому перепаду 1-го импульса SCK. По другому перепаду этого же синхроимпульса подчиненное устройство может осуществить отсчет (прием) переданного бита в байте команды на своем входе SDI; Строго говоря, по этому же (второму) перепаду мастер тоже может принимать сигналы по своему входу SDI (так достигается одновременность процессов приема-передачи), но на практике этот сигнал (ответ slave-устройства) придет только после того как подчиненное устройство выполнит полученную от мастера команду;
-………….. ;
-момент времени 9 – начало передачи мастером на своем выходе SDO последнего 0-го (младшего) бита инструкции (по перепаду 8-го импульса SCK). После этого мастер прекращает генерацию синхроимпульсов – интервал ПАУЗА на рис. 139. Эта задержка необходима ему для подготовки передачи второго байта (в данном случае - адреса). Другими словами, генерация синхроимпульсов осуществляется только во время приема/передачи информационных битов;
-моменты времени 10-17 – передача мастером адреса (начиная со старшего бита, при этом автоматически включается его генератор синхроимпульсов) в последовательном коде, начинается по фронту (срезу) фактически 9-го синхроимпульса и производится в случае если команда предусматривает в качестве своего параметра адрес, например, адрес ячейки памяти в slave-микросхеме внешней памяти;
-моменты времени 18-25 – передача мастером 8-ми бит данных (тоже
начиная со старшего бита) подчиненному устройству (или прием мастером по своему входу SDI 8 бит данных, переданных подчиненным устройством на своем выходе SDO в ответ на только что выполненную команду), осуществляется аналогично по фронту (срезу) следующих 8-ми синхроимпульсов SCK;
- момент времени 26 – завершение работы мастер-контроллера с конкретным подчиненным устройством путем его «отключения», т.е. перевода в высокоимпедансное состояние (CS=1).
4. Структура распределения битов внутри пакета команд, адресов, данных не определяется спецификацией SPI интерфейса, а зависит только от типа конкретного slave-устройства.
Б. Схема и режимы работы модуля SPI
На рис. 140 приведена структурная схема встроенного в PIC 16F877 модуля синхронного последовательного порта в мастер-режиме (MSSP), реализующего SPI интерфейс. Модуль обеспечивает решение 3-х основных задач интер-
фейса:
-автоматическую генерацию на выходе SCK (разряд RC3 порта С) синхросигнала (с управляемой частотой и начальным уровнем) для синхронизации начала и окончания процессов приема-передачи и передачу его slaveустройствам;
-передачу данных (инструкций, адресов) в последовательном коде на выходе SDO (разряд RC5 порта С) от мастер-контролера к slave-устройствам сети;
-прием данных в последовательном коде, поступающих на его вход SDI (разряд RC4 порта С), от slave-устройств сети к мастер-контроллеру;
Рассмотрим работу SPI модуля при генерации на выходе SCK (разряд RC3 порта С) синхросигнала по структурной схеме. Работа модуля начинается с его включения путем установки бите SSPEN = 1 в специальном управляющем регистре SSPCON. При этом контакты RC3 – RC5 перестают быть просто контактами порта С, и начинают выполнять роль контактов интерфейса SPI. После вклю-
Внутренняя шина данных контроллера PIC 16F877
|
|
|
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
передача(запись |
|
|
|
прием(чтение) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
W |
|
|
|
BF = 0 |
SSPSTAT (0) |
|
|
|||||
|
WCOL = 1 |
|
CONTROL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
W |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
WRITE |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
SSPCON (7) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
сброс |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RG памяти |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
ПО |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
6 |
|
5 |
4 |
|
3 |
|
2 |
|
1 |
|
0 |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SDO (RC5) |
|
|
|
|
|
|
|
SSPBUF (0x13) |
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SSPOV = 1 |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CONTROL |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
READ |
|
|
SSPCON (6) |
||
|
|
|
|
|
|
|
1 |
|
|
BF = 1 |
|
SSPSTAT (0) |
|
|
|
|
|
|
|
||||||||
SDI (RC4) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SСK (RC3) |
|
|
|
|
RG сдвига |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
сдвиг SDO |
|
SSPSR |
|
отсчет |
SDI |
|
ИЛИ |
||
|
|
|
|
|
|
|
|||||
8 имп |
ON/OFF |
|
|
Делитель |
|
Выбор фронта и |
|
|
|||
|
|
|
|
|
|
|
|
|
Выбор момента отсчета бита |
||
|
FOSC |
:4 |
:16 |
:64 |
|
пассивного |
|
||||
|
|
|
|
SDI |
|||||||
Рис. 140 Структурная |
|
|
|
|
|
уровня SCK |
|
||||
|
|
|
|
|
|
|
|
|
|||
схема модуля SPI (MSSP) |
|
|
|
|
|
|
|
|
|
|
|
контроллера PIC 16F877 в |
SSPEN (5) SSPM0 – SSPM3 (0-3) |
|
CKP (4) |
CKE (6) |
SMP (7) |
||||||
|
|
||||||||||
ведущем (master) режиме |
|
|
|
|
|
|
|
|
|
|
|
SSPCON (0x14) |
SSPSTAT (0x94) |