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

include "p16f627а. inc"

SDO equ 0

SCK equ 1

DISPLAY bcf PORTA,SCK; Инициализируем линию SCK

             movf BINARY,w; Берем двоичное значение

             call BIN_2_BCD; Преобразуем его в три BCD разряда

             movf UNITS,w; Берем число единиц

             call SVN_SEG; Преобразуем в 7-сегментный код

             movwf DATA_OUT; Копируем в регистр последовательной передачи

             call SPI_WRITE; Выдвигаем его

             movf TENS,W; Берем число десятков

             call SVN_SEG; Преобразуем в 7-сегментный код

             movwf DATA_OUT; Копируем в регистр последовательной передачи

             call SPI_WRITE; Выдвигаем его

             movf HUNDREDS,w; Берем число сотен

             call SVN_SEG; Преобразуем в 7-сегментный код

             movwf DATA_OUT; Копируем в регистр последовательной передачи

             call SPI_WRITE; Выдвигаем его

             return

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

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

; * ВХОД: Байт данных в DATA_OUT *

; * ВЫХОД: DATA_OUT обнуляется *

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

; Задача 1

SPI_WRITE

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

; Задача 2

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

            movwf COUNT

; Задача 3,a и 3,б

LOOP bcf PORTA,SDO; Выставляем на линию данных 0

         btfsc DATA_OUT,7; Пропускаем, ЕСЛИ старший бит = 0

         bsf PORTA,SDO; ИНАЧЕ выставляем на линию данных 1

         rlf DATA_OUT,f; Сдвигаем байт данных на один бит влево

; Задача 3,в

         bsf PORTA,SCK; Формируем тактовый импульс

         bcf PORTA,SCK

;Задача 3,г

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

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

         return

Собственно последовательная передача данных осуществляется подпрограммой SPI_WRITE, работающей по приведенному выше алгоритму. В подпрограмме проверяется 7-й бит содержимого регистра DATA_OUT и в соответствии с его значением на вывод RA0 выставляется ВЫСОКИЙ или НИЗКИЙ уровень. Затем на выводе RA1 формируется положительный импульс  для загрузки очередного бита в цепочку сдвиговых регистров, после чего байт данных сдвигается влево. Этот процесс повторяется 8 раз. На все это требуется не более 87 машинных циклов (конкретная цифра слегка зависит от значения байта данных). Таким образом, на полное обновление изображения 3-разрядного дисплея уйдет около 120 мкс при частоте процессора 8 МГц (не учитывая время, затраченное на преобразование данных).

В Программе 12.2 приведена одна из возможных реализаций данной подпрограммы на языке Си. Функция spi_write () 8 раз выдает 7-й бит переданного ей байта данных на вывод SDO и сдвигает значение этого байта влево. Предполагается, что оба вывода последовательного интерфейса SPI уже определены как соответствующие линии порта ввода/вывода микроконтроллера.

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

void spi_write(int datum)

{

      int k;

      for(k=0;k<8;k++)

      {

      if((datum & 0x80)) {SDO = 1;} /* Проверяем 7-й бит и ЕСЛИ TRUE, выставляем 1 */

      else {SDO = 0;} /* ИНАЧЕ выставляем 0 */

      SCK = 1; /* Загружаем бит в цепочку регистров */

      SCK = 0;

      datum = datum <<1; /* Сдвигаем байт данных влево и повторяем 8 раз */

      }

}

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

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

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

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

Сид Катцен

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

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

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

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

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

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