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

• На практике подобные подпрограммы часто возвращают всякую ерунду из-за дребезга контактов, а также различных наводок в проводах, соединяющих клавиатуру и электронные узлы. Один из возможных вариантов решения этой проблемы приведен в Программе 11.3. В этой программе для опроса клавиатуры используется подпрограмма SCAN_IT, код которой был приведен в Программе 11.2. Сохраняя в памяти значение, полученное при предыдущем опросе, можно отслеживать любые изменения состояния клавиатуры. Подпрограмма GET_IT возвращает код кнопки только в том случае, если состояние клавиатуры не менялось на протяжении 256 последовательных опросов. В зависимости от качества клавиатуры, уровня помех и частоты процессора надежность считывания можно увеличить (при этом возрастет время отклика), добавив в тело цикла короткую задержку или увеличив размер счетчика до двух байтов.

Программа 11.3. Сканирование клавиатуры с защитой от дребезга

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

; * ФУНКЦИЯ: Сканирует клавиатуру 4 х 3 и возвращает номер клавиши *

; * ФУНКЦИЯ: (имеется защита от дребезга) *

; * ВХОД: Нет *

; * ВЫХОД: Номер клавиши в W ([МЕМ]=10, [0]=11, [SET]=12) *

; * ВЫХОД: Возвращает -1 (h’FF’), если не нажато ни одной клавиши *

; * ОКРУЖЕНИЕ: Переменные COUNT, NEW_KEY, OLD_KEY *

; * ОКРУЖЕНИЕ: Подпрограмма SCAN_IT *

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

           cblock ; Три глобальные переменные

             COUNT 1, NEW_KEY:1, OLD_KEY:1

           endc

GET_IT clrf COUNT; Обнуляем счетчик

GLOOP call SCAN_IT; «Сырое» значение находится в W

            movwf NEW_KEY; Сохраняем новое значение

            subwf OLD_KEY,w; Отличается от предыдущего?

            btf sc STATUS,Z

               goto EQUAL; ЕСЛИ одинаковы, ТО переходим к EQUAL

;Результат отличается от предыдущего, поэтому:

            movf NEW_KEY,w; Переписываем предыдущее значение новым

            movwf OLD KEY

               goto GET_IT; и начинаем цикл опроса сначала

; ЕСЛИ значения одинаковы, ТО —

EQUAL incfsz COUNT,f; Инкрементируем счетчик. ЕСЛИ нет

               goto GLOOP; переполнения, считываем новое значение

            movf OLD_KEY,w; ИНАЧЕ возвращаем требуемое значение!

            return

Программа 11.4. Подпрограмма сканирования клавиатуры на Си

unsigned int scan_it(void)

{

      unsigned int key, pattern;

      key=1; pattern = 0xFE; /* Начальное значение маски b’11111110’ */

      while(key<13) /* У нас 12 клавиш */

      {

          PORT_B = pattern; /* Выбираем строку */

          if(!COL1) {break;} /* Считываем состояние каждого столбца, */

          key++; /* выходя из цикла при нулевом значении */

          if(!COL2) {break;} /* ИНАЧЕ инкрементируем счетчик цикла */

          kеу++;

          if(!COL3) {break;}

          kеу++;

          pattern = pattern << 1; /* Сдвигаем маску на один бит влево */

       }

       if(key==13) {key = 0xFF;} /* Если в счетчике число 13, нажатые клавиши */

       return key; /* отсутствуют */

}

В Программе 11.4 приведен текст Си-программы для компилятора CCS, которая выполняет те же действия, что и код в Программе 11.2. При этом предполагается, что порт В уже сконфигурирован следующим образом:

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

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

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

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

Сид Катцен

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

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

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

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

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

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