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

Подпрограмма для работы с последовательным интерфейсом SPI_READ является точной противоположностью подпрограммы SPI_WRITE, код которой был приведен в Программе 12.1, и реализует следующий алгоритм:

1. Выставить на SCK НИЗКИЙ уровень.

2. COUNT = 8.

3. ПОКА COUNT > 0, ВЫПОЛНЯТЬ:

а) Сформировать на линии SCK импульс

б) Сдвинуть содержимое регистра DATA_IN на один бит влево.

в) Скопировать значение с вывода SDI в старший бит регистра DATA_IN.

г) Декрементировать COUNT.

Этот алгоритм похож на приведенный ранее (см. стр. 371), за исключением того, что регистр DATA_IN сдвигается влево, а состояние вывода SDI становится значением 0-го бита. После восьмого цикла «такт — сдвиг — проверка» содержимое регистра DATA_IN представляет собой байт данных, считанный с последовательного порта. При этом первый принятый бит окажется старшим битом итогового значения.

Подпрограмма SPI_READ, текст которой приведен в Программе 12.3, похожа на подпрограмму вывода SPI_WRITE из Программы 12.1. И их действительно можно объединить для того, чтобы одновременно передавать и принимать данные. Такой тип обмена называется полнодуплексным (или просто дуплексным) в отличие от полудуплексного, при котором передача информации в каждый момент времени осуществляется только в одном направлении. Последовательный обмен, при котором поток данных может передаваться только в одном фиксированном направлении, называется симплексным.

Программа 12.3. Подпрограмма приема байта по последовательному каналу

; ***********************

; * ФУНКЦИЯ: Побитно принимает байт данных, начиная со старшего бита *

; * ВХОД: Нет *

; * ВЫХОД: Принятый байт в DATA_IN; COUNT = 0 *

; ***********************

; Задача 1: Выставляем на SCK НИЗКИЙ уровень

SPI_READ

          bcf PORTA,SCK; В режиме ожидания на линии SCK — НИЗКИЙ уровень

; Задача 2: COUNT=8

          movlw 8; Инициализируем счетчик цикла

          movwf COUNT

; Задача 3: ПОКА COUNT>0, ВЫПОЛНЯТЬ:

; Задача 3,а: Формируем импульс SCK

SER_IN_LOOP

          bsf PORTA,SCK

          bcf PORTA,SCK

; Задача 3,б: Сдвигаем байт данных влево

          bcf STATUS,С; Обнуляем флаг переноса

          rlf DATA_IN,f; Сдвигаем байт влево

; Задача 3,в: ЕСЛИ SDI = 1, ТО устанавливаем 0-й бит (самый правый)

          btf sc PORTA,SDI ; Пропускаем, ЕСЛИ SDI == 0

          bsf DATA_IN,0; ИНАЧЕ заносим в 0-й бит 1

; Задача 3,г: Декрементируем COUNT и повторяем задачу 3, пока COUNT > 0

          decfsz COUNT,f; Декрементируем счетчик

             goto SER_IN_LOOP; и повторяем, пока он не станет равным 0

          return

Си-вариант подпрограммы, приведенный в Программе 12.4, использует тот же алгоритм, что и его ассемблерный предшественник. Обратите внимание, как для установки 0-го бита переменной DATA_IN используется Си-оператор ИЛИ (|) с константой Ь’00000001’. Аналогично, операция И с константой b’11111110’ сбрасывает 0-й бит. В компиляторе CCS имеются специальные нестандартные функции bset (DATA__IN, 0) и bclr (DATA_IN, 0), которые можно использовать для установки или сброса любого бита переменной и которые при необходимости изменения единственного бита часто более эффективны, чем использование логических операторов.

Программа 12.4. Реализация подпрограммы SPI_READ на Си

unsigned int spi_read()

{

     int k;

     for(k=0;k<8;k++) /* Повторяем 8 раз */

     {

        SCK =1; /* Формируем тактовый импульс, по которому */

        SCK =0; /* ведомый передает бит на SDI */

        DATA_IN = DATA_IN <<1; /* Сдвигаем на один бит влево */

        if(SDI)

             {DATA_IN = DATA_IN I 0x01;} /* Сбрасываем бит, если SDI =0 */

        else

             {DATA_IN = DATA_IN & 0xFE;} /* ИНАЧЕ устанавливаем его */

      }

      return DATA_IN /* Возвращаем принятый байт */

}

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

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

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

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

Сид Катцен

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

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

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

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

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

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