Читаем PIC-микроконтроллеры. Все, что вам необходимо знать полностью

          include "p16f877a.inc"

SETUP movlw b’00110110’; Включаем MSSP, такт, линия свободна

          movwf SSPCON; Режим ведомого с 7-битной адресацией (0110)

          bsf STATUS,RP0; переключаемся в 1-й банк

          bsf SSPSTAT,SMP; Скорость нарастания соответствует частоте 100 кГц

          bsf SSPCON2,SEN; SEN = 1 для автоматического удержания линии тактового сигнала после приема данных

          movlw h’0C’; Адрес h’06’ сдвигаем влево на один бит,

          movwf SSPADD; чтобы значение соответствовало содержимому пакета

          bsf PIE1,SSPIE; Разрешаем прерывание от модуля SSP

          bsf INTCON,PEIE; Разрешаем прерывания от периферийных устройств

          bsf INTCON,GIE; Разрешаем прерывания

          bcf STATUS,RP0; Возвращаемся в 0-й банк

В этом фрагменте:

1. В регистры управления и состояния модуля MSSP заносятся значения, соответствующие заданию.

2. Адрес ведомого (число h’06’, сдвинутое влево для соответствия семи старшим битам пакета адреса) заносится в регистр SSPAD.

3. Установкой бита маски SSPIE совместно с битами PEIE и GIE разрешается прерывание от модуля MSSP (см. Рис. 7.5 на стр. 223).

Теперь, когда у нас есть код для инициализации модуля MSSP и системы прерываний, можно приступать к написанию процедуры обработки прерывания, распознающей различные события, происходящие на шине I2С. Любое допустимое событие приведет к передаче управления из фоновой программы в обработчик прерывания. Даже если микроконтроллер будет находиться в «спящем» режиме, это событие вызовет установку бита SSPIF и «пробуждение» микроконтроллера.

Вот эти события:

1. Ведущий-передатчик: принятый пакет был пакетом адреса

S = 1 Последним состоянием на шине было состояние СТАРТ.

R/W¯ = 0 Ожидается передача данных от ведущего.

D/А¯ = 0 Это пакет адреса.

BF = 1 Буфер полон.

Для сброса флага BF необходимо прочитать регистр SSPBUF, даже если пакет адреса, присланный ведущим, будет проигнорирован. Если этого не сделать, следующий байт, посланный ведущим, вызовет переполнение буфера (SSPOV —> 1) и модуль отошлет NACK.

Если бит SEN установлен в 1, то бит СКР будет автоматически сброшен и на линию SCL будет выставлен НИЗКИЙ уровень. Когда это станет возможным, необходимо будет установить бит СКР в 1 для разрешения работы ведущего.

2. Ведущий-передатчик: принятый пакет был пакетом данных

После передачи адресного пакета ведущий посылает один или более пакетов данных. Чтобы избежать возникновения переполнения и гарантировать отсылку подтверждения АСК, ведомое устройство должно считывать каждый из этих пакетов. Также при установленном бите SEN необходимо манипулировать битом СКР, как и при обработке предыдущего события. Содержимое регистра STATUS для этого события отличается от предыдущего только значением бита D/A¯.

S = 1 Последним состоянием на шине было состояние СТАРТ.

R/W¯ = 0 Ожидается передача данных от ведущего.

D/A¯ = 1 Это пакет данных.

BF = 1 Буфер полон.

3. Ведущий-приемник: принятый пакет был пакетом адреса

Обмен на шине начинается с посылки ведущим пакета адреса с установленным битом R/W¯, извещающим ведомого, что от него ожидается передача пакетов данных ведущему. После распознавания ведомым своего адреса или адреса общего вызова при установленном бите GCEN, состояния битов регистра SSPSTAT будут следующими:

S = 1 Последним состоянием на шине было состояние СТАРТ.

R/W¯ = 1 Ожидается передача данных к ведущему.

D/А¯ = 0 Это пакет адреса.

BF = 0 Буфер свободен для передачи.

Заметьте, что в данной ситуации бит BF сброшен. Дело в том, что при работе модуля в режиме ведущего-приемника флаг BF используется для того, чтобы сообщать программе о готовности регистра SSPBUF к загрузке байта данных, посылаемого ведущему. Поэтому, в отличие от 1-го события, нам нет необходимости считывать содержимое регистра SSPBUF.

После распознавания адреса ведомый может послать первый байт данных ведущему, загружая его в регистр SSPBUF и устанавливая бит СКР для высвобождения вывода SCL. Расширение тактового сигнала производится автоматически при получении пакета от ведущего-приемника, независимо от состояния бита SEN.

4. ведущий-приемник: принятый пакет был пакетом данных

Перейти на страницу:

Все книги серии Программируемые системы

PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

Радиоэлектроника

Похожие книги

Электроника для начинающих
Электроника для начинающих

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию для защиты от проникновения в дом, елочные огни, электронные украшения для одежды, устройство преобразования звука, кодовый замок, автономную роботизированную тележку и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий.Для начинающих радиолюбителей

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки