Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Генератор сигналов специальной формы - файл Т276 - ЦиМПУ - Генератор сигналов специальной формы - курсовая - БГУИР - до 29.01.doc


Генератор сигналов специальной формы
скачать (1286.7 kb.)

Доступные файлы (14):

Generator.asm
Generator.COD
Generator.HEX
Generator.lst
Generator.mcp
Generator.mcs
Generator.mcw
Generator.mptags
Generator.tagsrc
Схема Т276_2.vsd
Т276_2 Подрограмма генерации.vsd
Т276 - ЦиМПУ - Генератор сигналов специальной формы - курсовая - БГУИР - до 29.01.doc1139kb.30.01.2010 09:44скачать
Т276 - ЦиМПУ - Генератор сигналов специальной формы - курсовая - БГУИР - до 29.01.tif
Т276 - ЦиМПУ - Генератор сигналов специальной формы Фрагмент.doc1078kb.18.05.2010 10:41скачать

содержание

Т276 - ЦиМПУ - Генератор сигналов специальной формы - курсовая - БГУИР - до 29.01.doc

Содержание


Содержание 1

Введение 3

1 Разработка структурной схемы устройства 6

2 Разработка принципиальной схемы устройства 7

2.1 Микроконтроллер PIC16F886 7

2.2 Клавиатура 10

2.3 Устройство индикации 11

3 Разработка алгоритма управляющей программы 13

4 Разработка управляющей программы 20

Заключение 27

Список использованной литературы 28

Приложение А 29





Введение


Номенклатура предлагаемых сегодня на мировом рынке МК чрезвычайно обширна и в своем составе содержит определенное множество семейств или крупных групп МК, выпускаемых различными производителями. Главными отличиями между семействами являются: архитектура процессорного ядра, набор интегрируемых на кристалл МК модулей памяти и периферийных устройств, разрядность обрабатываемых данных (4, 8, 16, 32, 64 бит), быстродействие, тип и размер внутренней памяти программ, «возраст» разработки, энергопотребление и ряд других характеристик [5].

Наиболее крупными и известными на мировом рынке производителями МК являются такие фирмы, как Intel, Мotorola, Мicrochip, Atmel, Zilog, АМD, Philips, Dallas Semiconductor, Texas Instruments, Hitachi и ряд других американских, европейских, южно-азиатских и японских фирм.

Первые микроконтроллеры компании MICROCHIP PIC16C5x появились в конце 80-х годов и благодаря своей высокой производительности и низкой стоимости составили серьёзную конкуренцию производимым в то время 8-разрядным МК с CISC-архитектурой [2].

Первое, что привлекает внимание в PIC-контроллерах — это простота и эффективность. В основу концепции PIC, единую для всех выпускаемых семейств, была положена RISC-архитектура с системой простых однословных команд, применение встроенной памяти программ и данных и малое энергопотребление.

Система команд базового семейства PIC16 содержит только 35 команд. Это сыграло свою роль в популяризации PIC-контроллеров. Все команды (кроме команд перехода) выполняются за один машинный цикл (или четыре машинных такта) с перекрытием по времени выборок команд и их исполнения, что позволяет достичь производительности до 5 MIPS при тактовой частоте 20 МГц.

Микроконтроллеры PIC имеют симметричную систему команд, позволяющую выполнять операции с любым регистром, используя любой метод адресации. Разработчики MICROCHIP так и не смогли отказаться от структуры с регистром-аккумулятором, необходимым участником всех операций с двумя операндами. Зато теперь пользователь может сохранять результат операции на выбор, где пожелает, в самом регистре-аккумуляторе или во втором регистре, используемом для операции. В настоящее время MICROCHIP выпускает четыре основных семейства RISC-микроконтроллеров, совместимых снизу вверх по программному коду:

  • PIC12Cxxx с 12-разрядными командами со встроенным тактовым генератором, выпускаемые в миниатюрном 8-выводном исполнении. Не так давно был анонсирован очередной такой “малыш” c внутренним 8-разрядным 4-канальным АЦП;

  • PIC16C5x - базовое (Base-Line) семейство с 12-битной архитектурой - семейство малых по размерам и дешёвых микросхем, предназначенных для решения не очень сложных задач. Это самые простые и дешевые микроконтроллеры семейства PICmicro. Микроконтроллеры этого семейства выполнены в 18, 20 и 28 выводных корпусах, причем предлагаются не только корпуса DIP, но и миниатюрные корпуса SOIC и SSOP. Работа при низком напряжении питания (допускается напряжение до 2 В) делает эти микроконтроллеры идеальными для работы в изделиях с питанием от батарей.

  • Mid-range PIC16x/7x/8x/9x с 14-разрядными командами. Наиболее многочисленное семейство, объединяющее микроконтроллеры с разнообразными периферийными устройствами, в число которых входят аналоговые компараторы, аналогово-цифровые преобразователи, контроллеры последовательных интерфейсов SPI, USART и I2C, таймеры-счётчики, модули захвата/сравнения, широтно-импульсные модуляторы, сторожевые таймеры, супервизорные схемы и так далее;

  • High-end PIC17C4x/5xx высокопроизводительные микроконтроллеры с расширенной системой команд 16-разрядного формата, работающие на частоте до 33 МГц, с объёмом памяти программ до 16 К слов. Кроме обширной периферии почти все микроконтроллеры этого семейства имеют встроенный аппаратный умножитель 8 x 8, выполняющий операцию умножения за один машинный цикл.

Большинство PIC-контроллеров выпускаются с однократно программируемой памятью программ OTP с возможностью внутрисхемного программирования или масочным ROM. Для целей отладки предлагаются версии с ультрафиолетовым стиранием. Полное количество выпускаемых модификаций PIC-контроллеров составляет порядка пятисот наименований. Как утверждает MICROCHIP, продукция компании перекрывает весь диапазон применений 8-разрядных микроконтроллеров.

Особый акцент MICROСHIP делает на максимально возможное снижение энергопотребления для выпускаемых микроконтроллеров. При работе на частоте 4 МГц PIC-контроллеры, в зависимости от модели, имеют ток потребления меньше 1,5 мА, а при работе на частоте 32,768 КГц — ниже 15 мкА. Поддерживается “спящий” режим работы. Диапазон питающих напряжений PIC-контроллеров составляет 2,0...6,0 В.

Из программных средств отладки наиболее известны и доступны различные версии ассемблеров, а также интегрированная программная среда MPLAB. Российские производители программаторов и аппаратных отладочных средств также уделяют внимание PIC-контроллерам. Выпускаются как специализированные программаторы, такие как PICPROG, программирующие почти весь спектр PIC-микроконтроллеров, так и универсальные: UNIPRO, СТЕРХ, поддерживающие наиболее известные версии PIC [6].


^

1 Разработка структурной схемы устройства


Составим структурную схему проектируемого устройства.



Рисунок 1 — Структурная схема устройства

Основной задачей решаемой при составлении структурной схемы является определение, и рациональное совмещение блоков устройства, которые подключаются к микроконтроллеру.

Проектируемое устройство содержит следующие узлы:

Кварцевый резонатор, работает как тактирующее устройство микроконтроллера. Резонатор обеспечивает наиболее удобную, подходящую частоту тактового генератора.

Матричная клавиатура на 12 клавиш со схемой организации 3х4.

МК — микроконтроллер PIC16F886 по требованиям ТЗ.

Индикатор — четырехразрядный семисегментный светодиодный индикатор с общими анодами.

^

2 Разработка принципиальной схемы устройства


Принципиальная электрическая схема и перечень использованных элементов приведены в приложении А.

Устройство состоит из:

  • микроконтроллера;

  • клавиатуры;

  • устройства индикации.
^

2.1 Микроконтроллер PIC16F886


Микроконтроллер PIC16F886 (DD1) выбран согласно задания.

Характеристики МК PIC16F886 [3]:

  • Высокоскоростная RISC архитектура.

  • 35 инструкций.

  • Все команды выполняются за один цикл, кроме инструкций переходов, выполняемых за два цикла.

  • Тактовая частота (макс.)

DC – 20 МГц, тактовый сигнал,

DC – 200 нс, один машинный цикл.

  • 8к х 14 слов FLASH памяти программ.

368 х 8 байт памяти данных (ОЗУ).

256 х 8 байт EEPROM памяти данных.

  • Система прерываний (13 источников).

  • 8-уровневый аппаратный стек.

  • Прямой, косвенный и относительный режим адресации.

  • Сброс по включению питания (POR).

  • Таймер сброса (PWRT) и таймер ожидания запуска генератора (OST) после включения питания.

  • Сторожевой таймер WDT с собственным RC генератором.

  • Режим энергосбережения SLEEP.

  • Выбор параметров тактового генератора.

  • Высокоскоростная, энергосберегающая CMOS FLASH/EEPROM технология.

  • Программирование в готовом устройстве (используется два вывода микроконтроллера).

  • Широкий диапазон напряжений питания от 2,0 В до 5,5 В.

  • Повышенная нагрузочная способность портов ввода/вывода (25мА).

  • Малое энергопотребление:

– < 0.6 мА @ 3.0В, 4.0МГц,

– 20 мкА @ 3.0В. 32кГц,

– < 1мкА в режиме энергосбережения (SLEEP).

Характеристики периферийных модулей:

  • Таймер 0: 8-разрядный таймер/счетчик с 8-разрядным программируемым предделителем.

  • Таймер 1: 16-разрядный таймер/счетчик с возможностью подключения внешнего резонатора.

  • Таймер 2: 8-разрядный таймер/счетчик с 8-разрядным программируемым предделителем и выходным делителем.

  • Два модуля сравнение/захвата/ШИМ (ССР):

– 16-разрядный захват (макс. разрешающая способность 12,5 нс),

– 16-разрядное сравнение (макс. разрешающая способность 200 нс),

– 10-разрядный ШИМ.

  • Многоканальный 10-разрядный АЦП.

  • Последовательный синхронный порт MSSP (ведущий/ведомый режим), SPI (ведущий/ведомый режим), I2C.

  • Последовательный синхронно-асинхронный приемопередатчик USART с поддержкой детектирования адреса.

  • Детектор пониженного напряжения (BOD) для сброса по снижению напряжения питания (BOR).

Основные температурные и электрические характеристики МК PIC16F886 приведены в таблице 2.1.

Таблица 2.1 Температурные и электрические характеристики МК PIC16F876

Название параметра (характеристики)

Значение

Предельная рабочая температура

от –55°С до +125ºС

Температура хранения

от –65°С до +150ºС

Напряжение VDD относительно VSS

от –0,3 В до +7,5 В

Напряжение относительно VSS

от 0 В до +14 В

Напряжение на остальных выводах относительно VSS

от –0,3 В до VDD+0,3 В

Максимальный ток вывода VSS

300 мА

Максимальный ток вывода VDD

250 мА

Макс. выходной ток стока канала ввода/вывода

25 мА

Макс. выходной ток истока канала ввода/вывода

25 мА

Макс. выходной ток стока
портов ввода/вывода PORTA, PORTB и PORTС

200 мА

Максимальный выходной ток истока
портов ввода/вывода PORTA, PORTB и PORTС

200 мА


Цоколёвка МК приведена на рисунке 2.1.



Рисунок 2.1 — Цоколевка МК PIC16F886

Назначение используемых выводов приведены в таблице 2.2.

Таблица 2.2 Назначение используемых выводов МК

Обозн. вывода

Номер выв.

Назначение вывода

OSC1, OSC2

9, 10

Подключается кварцевый резонатор



1

Вход сброса МК

Vdd

20

Положительное напряжение питания

Vss

8, 19

Общий вывод

RA0…RA3

2…5

Порт A

RB0…RB7

21..28

Порт B

RС0…RС3

11..14

Порт С

RX

18

Выход последовательного порта, используется как выход генератора

Кварцевый резонатор (ZQ1) служит для увеличения стабильности генерируемой частоты. Конденсаторы C1 и C2 предназначены для согласования работы кварцевого резонатора и микроконтроллера. Согласно [1] их емкость составляет 15 пФ для частоты 4 МГц.

Вывод MCLR МК соединен с питанием для сброса при включении питания [3].

2.2 Клавиатура


Клавиатура представляет собой матрицу клавиш размером 3х4, в ячейках которой находятся кнопки. Кнопки подключены к питанию через ограничительный резистор. В начальный момент времени замыкания кнопки ее сопротивление очень мало, а значит через ее контакты протекает большой ток, который может их повредить.

При опросе клавиатуры микроконтроллер работает следующим об­разом [6]. Линии RB0-RB2 являются выходами, а линии RB4-RB7 на­значены как входы. Через внутренние резисторы входные линии RB4-RB7 подключены к потенциалу питания, что эквивалентно подаче логических единиц. Через порты RB0-RB2 осуществляется перебор столбцов клавиатуры низкими логическими уровнями. Каждый раз после переключения столбца считывается состояние линий RB4-RB7. Низкий уровень на этих линиях может появиться, только если нажата клавиша. Зная номер текущего активного столбца и оп­ределив номер строки, в которой обнаружен нулевой уровень, можно определить номер нажатой клавиши.

Организация клавиш представлена на рисунке 2.2.



Рисунок 3.2 — Организация клавиатуры

Клавиша «#» служит для подтверждения ввода длительности импульсов. Клавиша «*» не используется, при усовершенствовании устройства ей можно назначить функцию редактирования неправильно введенных данных.
^

2.3 Устройство индикации


В качестве устройства индикации выбран семисегментный светодиодный индикатор SA18-11ALS с общими анодами.

Его характеристики:

  • потребляемый ток от 10 до 25 мА на сегмент;

  • рабочее напряжение сегмента (при токе 20 мА) — 2,5 В.

Семисегментный код отображаемой цифры выдается по линиям RС0-RС6. Линии RA0-RA2 управляют общими анодами, т.е. управляют включением и выключением индикаторов. Ток через индикатор может достигнуть 160 мА, что превышает нагрузочную способность порта МК. Поэтому вывод МК управляет усилителем тока на транзисторе, а не индикатором напрямую.

Резисторы резисторной матрицы RN предназначены для ограничения тока сегментов инди­катора.

Рассчитаем номиналы резисторов RN по формуле

,

где U — выходное напряжение высокого уровня порта МК,

Us — рабочее напряжение сегмента индикатора,

Is — потребляемый сегментом ток.

Ом.

В ряду E24 такой номинал есть, подбирать его не нужно.
^

3 Разработка алгоритма управляющей программы


При включении устройства происходит его инициализация. По умолчанию длительность импульса равна 1мс.

Из переменной T_IMPULS считывается длительность импульса. Вычисляется длительность паузы.

По линии RС7 выдается логическая единица и организуется задержка на длительность импульса с помощью таймера 1. Линия RС7 обнуляется и организуется задержка на длительность паузы с помощью таймера 1.

Опрашивается клавиатура. Если есть нажатые клавиши, то их коды заносятся во временные переменные. Организуется индикация. По нажатию клавиши «#» из кодов клавиш формируется длительность импульса и записывается в переменную T_IMPULS. После этого процесс повторяется.

Общий алгоритм управляющей программы представлен на рисунке 3.1.



Рисунок 3.1 — Общий алгоритм управляющей программы



Рисунок 3.2 — Алгоритм подпрограммы инициализации портов



Рисунок 3.3 — Алгоритм подпрограммы инициализации таймера



Рисунок 3.4 — Алгоритм подпрограммы опроса клавиатуры



Рисунок 3.5 — Алгоритм подпрограммы сканирования клавиатуры



Рисунок 3.6 — Алгоритм подпрограммы индикации




Рисунок 3.7 — Алгоритм подпрограммы генерации


^

4 Разработка управляющей программы


MPASM 5.05 GENERATOR.ASM 1-30-2010 8:31:31 PAGE 1


LOC OBJECT CODE LINE SOURCE TEXT

VALUE


00001 LIST p=16F886

00002 LIST F=INHX8M

00003 include e:\P16F886.INC

00001 LIST

00002 ; P16F886.INC Standard Header File, Version 1.00 Microchip Technology, Inc.

00614 LIST

0000000C 00004 TempC EQU 0x0c ; Временные регистры общего применения

0000000D 00005 TempD EQU 0x0d

0000000E 00006 TempE EQU 0x0e

00000020 00007 PABuf EQU 0x20

00000021 00008 PBBuf EQU 0x21

0000000F 00009 Count EQU 0x0f ; Счетчик,

00000010 00010 MsdTime EQU 0x10 ; Старший байт.

00000011 00011 LsdTime EQU 0x11 ; Младший байт,

00000012 00012 KeyFlag EQU 0x12 ; Флаг клавиатуры,

00000000 00013 keyhit EQU 0 ; Бит 0 - значит, клавиша нажата,

00000001 00014 DebnceOn EQU 1

00000002 00015 noentry EQU 2 ; Нет клавиши = 0.

00000003 00016 ServKey EQU 3 ; Бит 3 - значит, обработка клавиши.

00000013 00017 Debnce EQU 0x13

00000014 00018 NewKey EQU 0x14

0000002F 00019 WBuffer EQU 0x2f

00000100 00020 T EQU 100

00000015 00021 T_IMPULS EQU 0x15

00000016 00022 T_PAUSE EQU 0x16

00000017 00023 ODIN EQU 0x17

00000018 00024 DES EQU 0x18

0000002E 00025 StatBuffer EQU 0x2e

00000001 00026 OptionReg EQU 1

00000002 00027 PCL EQU 2

00028 ; Макрос сохранения байта состояния и содержимого рабочего регистра в буфере

00029 push macro

00030 movwf WBuffer

00031 swapf WBuffer

00032 swapf STATUS, w

00033 movwf StatBuffer

00034 endm

00035 ; Макрос считывания байта состояния и содержимого рабочего регистра из буфера,

00036 pop macro

00037 swapf StatBuffer,w

00038 movwf STATUS

00039 swapf WBuffer, w

00040 endm

00041

0000 00042 org 0

0000 280D 00043 goto Start ; Старт;

0004 00044 org 4

00045 ; Сохраняем рабочий регистр и регистр состояния в момент прерывания.

00046 push

0004 00AF M movwf WBuffer

0005 0EAF M swapf WBuffer

0006 0E03 M swapf STATUS, w

0007 00AE M movwf StatBuffer

00047 ;extern ServiceInterrupts

0008 2037 00048 call ServiceInterrupts

00049 pop

0009 0E2E M swapf StatBuffer,w

000A 0083 M movwf STATUS

000B 0E2F M swapf WBuffer, w

000C 0009 00050 retfie

00051

000D 00052 Start

000D 2021 00053 call InitPorts

000E 202B 00054 call InitTimers

000F 00055 loop

000F 1992 00056 btfsc KeyFlag,ServKey ; Проверка флага нажатия,

0010 2013 00057 call ServiceKey ; Да, тогда обработка

0011 20B3 00058 call Generate; выдача импульса

0012 280F 00059 goto loop

00060 ; Подпрограмма обработки нажатия клавиши. Msd - старшая цифра, Lsd - младшая цифра.

0013 00061 ServiceKey

0013 0814 00062 movf NewKey,w ; Считывание регистра NewKey.

0014 008E 00063 movwf TempE ; Сохранение в TempE.

0015 0E10 00064 swapf MsdTime,w ; Считывание Msd и перестановка полубайтов.

0016 39F0 00065 andlw B'11110000'; Обнуление младшего полубайта,

0017 0090 00066 movwf MsdTime ; Сохранение,

0018 0E11 00067 swapf LsdTime,w ; Считывание Lsd и перестановка полубайтов,

0019 390F 00068 andlw B'00001111' ; Обнуление старшего полубайта.

001A 0490 00069 iorwf MsdTime ; Логическое сложение с Msd.

001B 0E11 00070 swapf LsdTime,w ; Считывание Lsd и перестановка полубайтов.

001C 39F0 00071 andlw B'11110000' ; Обнуление младшего полубайта,

001D 040E 00072 iorwf TempE,w ; Логическое сложение с TempE.

001E 0091 00073 movwf LsdTime ; Сохранение,

001F 1192 00074 bcf KeyFlag,ServKey ; Сброс флага нажатии.

0020 0008 00075 return ; Возврат

00076

0021 00077 InitPorts

0021 1683 00078 bsf STATUS,RP0 ; Банк 1.

0022 3003 00079 movlw 3 ; RAO - RАЗ - цифровые порты,

0023 089F 00080 movf ADCON1 ;

0024 0185 00081 clrf TRISA ; RA0-4 - выходы,

0025 0186 00082 clrf TRISB ; RB0-RB7 - выходы,

0026 1283 00083 bcf STATUS,RP0 ; банк 0

0027 0185 00084 clrf PORTA ; Обнуление порта A

0028 0186 00085 clrf PORTB ; Обнуление порта В

0029 1585 00086 bsf PORTA,3 ; Установка бита 3 порта A.

002A 0008 00087 return ; Возврат

00088

00089 ; Частота тактового генератора - 4,096 MГц, частота командных циклов - 1,024 МГц что с предварительным делителем на 32 осуществляет инкрементацию RTCC каждые 31,25 мс.

00090 ;Модуль счета таймера - 96, поэтому прерывание будет происходить каждые 5 мс.

002B 00091 InitTimers

002B 0190 00092 clrf MsdTime ; Сброс MsdTime

002C 0191 00093 clrf LsdTime ; и IsdTime.

002D 0192 00094 clrf KeyFlag ; Сброс флагов,

002E 1283 00095 bcf STATUS,RP0 ; Банк 1.

002F 3084 00096 movlw B'10000100' ; Предварительное деление на 32.

0030 0081 00097 movwf OptionReg ;

0031 1283 00098 bcf STATUS,RP0 ; Банк 0.

0032 3020 00099 movlw B'00100000' ; Разрешение прерывания таймера,

0033 008B 00100 movwf INTCON;

0034 3060 00101 movlw .96 ; Предзагрузка таймера,

0035 0081 00102 movwf TMR0 ; Начало счета,

0036 0009 00103 retfie ; Выход из прерывания.

00104

0037 00105 ServiceInterrupts

0037 190B 00106 btfsc INTCON, T0IF ; Прерывание таймера?

0038 283C 00107 goto ServiceRTCC ; Да, обработка.

0039 018B 00108 clrf INTCON ; Нет, сброс INTC0N,

003A 150B 00109 bsf INTCON,T0IF ; Разршение прерывания от таймера.

003B 0008 00110 return ;

00111

003C 00112 ServiceRTCC

003C 3060 00113 movlw .96 ; Инициализация таймера,

003D 0081 00114 movwf TMR0 ;

003E 110B 00115 bcf INTCON,T0IF ; Сброс флага прерываний таймера,

003F 1805 00116 btfsc PORTA, 0 ; Если бит 0 порта А равен единице,

0040 2043 00117 call ScanKeys ; быстрое сканирование клавиатуры

0041 209D 00118 call UpdateDisplay ; Обновление индикации

0042 0008 00119 return

00120

00121 ; Сканируем клавиатуру 4x4 и выдаем номер клавиши в NewKey, ели клавиша была нажата. Если нет, обнуляем указатель keyhit. Подпрограмма устраняет «дребезг контактов». Клавиатура сканируется каждые 20 м

00122

0043 00123 ScanKeys

0043 1C92 00124 btfss KeyFlag, DebnceOn ; Задержка окончена?

0044 2849 00125 goto Scan1 ; Нет, тогда сканирование клавиатуры.

0045 0B93 00126 decfsz Debnce ; Да, тогда уменьшаем счетчик задержки

0046 0008 00127 return ; Возвращаемся, если не 0

0047 1092 00128 bcf KeyFlag, DebnceOn ; Сброс флага

0048 0008 00129 return ; и возврат.

0049 00130 Scan1

0049 2086 00131 call SavePorts ; Сохранение портов,

004A 3077 00132 movlw B'1110111' ; Загрузка TempD.

004B 008D 00133 movwf TempD ;

004C 00134 ScanNext

004C 0806 00135 movf PORTB, w ;

004D 100B 00136 bcf INTCON,RBIF ; Сброс флага прерывания от порта B

004E 0C8D 00137 rrf TempD ; Правый сдвиг TempD.

004F 1C03 00138 btfss STATUS,C ; Перенос = 1?

00139 ;goto NoKey ; Нет, тогда окончание

0050 080D 00140 movf TempD,w ; ИЛИ TempD и w

0051 0086 00141 movwf PORTB ; и выдача в P0RT_B.

0052 0000 00142 nop

0053 1C0B 00143 btfss INTCON,RBIF ; Значение флага прерывания от порта В равно 1?

0054 284C 00144 goto ScanNext ; Нет, тогда продолжаем,

0055 1812 00145 btfsc KeyFlag, keyhit ; Последняя клавиша отпущена?

0056 2860 00146 goto SKreturn ; Нет, тогда выход.

0057 1412 00147 bsf KeyFlag,keyhit ; Устанавливаем флаг нажатия новой клавиши,

0058 0E06 00148 swapf PORTB,w ; Считывание порта 8-

0059 008E 00149 movwf TempE ; Сохранение в TempE.

005A 2064 00150 call GetKeyValue ; Считывание значения клавиши от 0 до F,

005B 0094 00151 movwf NewKey ; Сохранение в NewKey.

005C 1592 00152 bsf KeyFlag, ServKey ; Установка флага обработки клавиш,

005D 1492 00153 bsf KeyFlag,DebnceOn ;

005E 3004 00154 movlw 4

005F 0093 00155 movwf Debnce ;: Изменение времени задержки.

00156

0060 00157 SKreturn

0060 2093 00158 call RestorePorts ; Возмещение портов,

0061 0008 00159 return ; NoKey

0062 1012 00160 bcf KeyFlag,keyhit ; Сброс флага,

0063 2860 00161 goto SKreturn

00162

00163 ; Соответствие номеров клавиш, строк, столбцов и портов.

00164 ;Col Col2 Col3 Col4

00165 ; (RB3) (R82) (RB1) (880)

00166 ;Ran1(RB4) 0 1 2 3

00167 ;Ran2(RB5) 4 5 6 7

00168 ;Ran3(RВ6) 8 9 A B

00169 ;Ran4(RB7) С D E F

0064 00170 GetKeyValue

0064 018C 00171 clrf TempC ;

0065 1D8D 00172 btfss TempD,3 ; Первый столбец,

0066 286E 00173 goto RowValEnd ;

0067 0A8C 00174 incf TempC;

0068 1D0D 00175 btfss TempD,2 ; Второй столбец.

0069 286E 00176 goto RowValEnd ;

006A 0A8C 00177 incf TempC ;

006B 1C8D 00178 btfss TempD, 1 ; Третий столбец.

006C 286E 00179 goto RowValEnd;

006D 0A8C 00180 incf TempC ; Последний столбец,

006E 00181 RowValEnd

006E 1C0E 00182 btfss TempE,0 ; Первая строка?

006F 2878 00183 goto GetValCom ; Да, считывание клавишей 1,2,3

0070 1C8E 00184 btfss TempE, 1 ; Вторая строка?

0071 2877 00185 goto Get456 ; Да. считывание 4,5,6

0072 1D0E 00186 btfss TempE, 2 ; Третья строка?

0073 2875 00187 goto Get789 ; Да, считывание 7,8,9

0074 00188 Get0

0074 150C 00189 bsf TempC,2 ;

0075 00190 Get789

0075 158C 00191 bsf TempC, 3 ;

0076 2878 00192 goto GetValCom ;

0077 00193 Get456

0077 150C 00194 bsf TempC,2 ;

0078 00195 GetValCom

0078 080C 00196 movf TempC, w ; Таблица номеров клавиш.

0079 0782 00197 addwf PCL;

007A 3401 00198 retlw 1;

007B 3402 00199 retlw 2;

007C 3403 00200 retlw 3;

007D 3404 00201 retlw 4;

007E 3405 00202 retlw 5;

007F 3406 00203 retlw 6;

0080 3407 00204 retlw 7;

0081 3408 00205 retlw 8;

0082 3409 00206 retlw 9;

0083 340A 00207 retlw 0A ;

0084 3400 00208 retlw 0;

0085 340B 00209 retlw 0B;

00210 ; Сохраняем состояния портов А и В во время сканирования клавиатуры, SavePorts

0086 00211 SavePorts

0086 0805 00212 movf PORTA, w

0087 00A0 00213 movwf PABuf ; Сохраняем Порт A.

0088 0185 00214 clrf PORTA ; Выключение индикации,

0089 0806 00215 movf PORTB, w

008A 00A1 00216 movwf PBBuf ; Сохраняем порт В.

008B 30FF 00217 movlw 0xff ; На всех линиях порта B высокий уровень,

008C 0086 00218 movwf PORTB

008D 1683 00219 bsf STATUS,RP0 ; Банк 1.

008E 1381 00220 bcf OptionReg,7; Разрешаем подключение подтягивающих резисторов

008F 30F0 00221 movlw b'11110000' ; Старшие четыре разряда порта B входы,

0090 0086 00222 movwf TRISB; младшие - выходы.

0091 1283 00223 bcf STATUS,RP0 ; Банк 0

0092 0008 00224 return;

00225

00226 ;Восстанавливаем порты А и B после сканирования клавиатуры,

0093 00227 RestorePorts

0093 0821 00228 movf PBBuf,w; Восстановление содержимого

0094 0806 00229 movf PORTB,w; порта В.

0095 0820 00230 movf PABuf,w; Восстановление содержимого

0096 0085 00231 movwf PORTA ; порта А.

0097 1683 00232 bsf STATUS, RP0; Банк. 1.

0098 1781 00233 bsf OptionReg, 7 ; Запрет "подтягивающих" резисторов,

0099 0185 00234 clrf TRISA ; Все линии порта А - выходы,

009A 0186 00235 clrf TRISB ; Все линии порта 8 выходы.

009B 1283 00236 bcf STATUS,RP0 ; Банк 0

009C 0008 00237 return

00238

00239 ;Обновление индикации,

009D 00240 UpdateDisplay

009D 0805 00241 movf PORTA, w;

009E 0185 00242 clrf PORTA ;

009F 390F 00243 andlw 0x0f ;

00244

00245

00246 ; отображение цифры

00A0 00247 UpdateLsd

00A0 0811 00248 movf LsdTime,w ; Считывание Lsd в регистр W,

00A1 390F 00249 andlw 0x0f ; Маскирование старшего полубайта,

00A2 28A3 00250 goto DisplayOut ; Переход к индикации,

00251

00252 ;Индикация

00A3 00253 DisplayOut

00A3 20A8 00254 call LedTable ; Считывание семисегментного кода цифры,

00A4 0086 00255 movwf PORTB; Выдача семисегментного кода на индикатор.

00A5 080C 00256 movf TempC, w

00A6 0085 00257 movwf PORTA

00A7 0008 00258 return

00259 ; Таблица индикации

00A8 00260 LedTable

00A8 0782 00261 addwf PCL ; Кодификация программного счетчика (PC),

00A9 343F 00262 retlw B'00111111' ; Индикация цифры 0

00AA 3406 00263 retlw B'00000110' ; индикация цифры 1

00AB 345B 00264 retlw B'01011011' ; Индикация цифру 2

00AC 344F 00265 retlw B'01001111' ; Индикация цифры 3

00AD 3466 00266 retlw B'01100110' ; Индикация цифры 4

00AE 346D 00267 retlw B'01101101' ; Индикация цифры 5

00AF 343D 00268 retlw B'00111101' ; Индикация цифры 6

00B0 3407 00269 retlw B'00000111' ; Индикация цифры 7

00B1 347F 00270 retlw B'01111111' ; Индикация цифры 8

00B2 3467 00271 retlw B'01100111' ; Индикация цифры 9

00272

00B3 00273 Generate

00274 ;вычисление константы для загрузки в таймер

00B3 3001 00275 movlw -d'255'

00B4 0215 00276 subwf T_IMPULS,w;

00277 ;загрузка в таймер 0 значения константы

00B5 008E 00278 movwf TMR1L;

00B6 30FF 00279 movlw 0xff

00B7 008F 00280 movwf TMR1H

00281 ;выдать лог. 1 на RC7

00B8 1787 00282 bsf TRISC,7

00283 ;запуск таймера

00B9 1410 00284 bsf T1CON,TMR1ON

00285 ;ожидание переполнения

00BA 00286 wait1

00BA 080F 00287 movf TMR1H,w

^ 00BB 1D03 00288 BTFSS STATUS,Z

00BC 28BA 00289 goto wait1

00290 ;выдать лог 0 на RC7

00BD 1387 00291 bcf TRISC,7

00292 ;останов таймера

00BE 1010 00293 bcf T1CON,TMR1ON

00294 ;сброс переполнения

00BF 1003 00295 bcf STATUS,TMR1IF

00296 ;вычисление константы для длительности паузы

00C0 3065 00297 movlw -d'155';сразу отнимаем 100 от константы

00C1 0215 00298 subwf T_IMPULS,w

00299 ;загрузка длительности паузы

00C2 008E 00300 movwf TMR1L;

00C3 30FF 00301 movlw 0xff

00C4 008F 00302 movwf TMR1H

00303 ;запуск таймера

00C5 1410 00304 bsf T1CON,TMR1ON;

00305 ;ожидание переполнения

00C6 00306 wait2

00C6 080F 00307 movf TMR1H,w;

^ 00C7 1D03 00308 BTFSS STATUS,Z;

00C8 28C6 00309 goto wait2

00310 ;останов таймера

00C9 1010 00311 bcf T1CON,TMR1ON

00312 ;сброс переполнения

00CA 1003 00313 bcf STATUS,TMR1IF

00CB 0008 00314 return

00315

00316 end


MEMORY USAGE MAP ('X' = Used, '-' = Unused)


0000 : X---XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX

0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX

0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX

00C0 : XXXXXXXXXXXX---- ---------------- ---------------- ----------------


All other memory blocks unused.


Program Memory Words Used: 201

Program Memory Words Free: 7991


Errors : 0

Warnings : 0 reported, 0 suppressed

Messages : 0 reported, 0 suppressed

Заключение


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

  • структурная схема,

  • принципиальная электрическая схема,

  • алгоритм функционирования устройства,

  • алгоритм работы программы МК,

  • листинг программы.

Разработанная конструкция отличается простотой схемотехнического решения, небольшим количеством использованных в схеме комплектующих элементов, является практически универсальной и может легко изменяться и расширяться.

Устройство может эксплуатироваться в диапазоне температур от 0оС до +70оС.
^

Список использованной литературы


  1. AN849. Basic PICmicro® Oscillator Design [Электронный ресурс] // Microchip Tecnology Inc.: – Режим доступа: http://ww1.microchip.com/downloads/en/AppNotes/00849a.pdf. – Загл. с экрана. – Язык англ.

  2. Компоненты фирмы Microchip. [Электронный ресурс]: Рынок микроэлектроники: – Режим доступа: http://www.gaw.ru/html.cgi/txt/ic/Microchip/index.htm. – Загл. с экрана. – Язык русский.

  3. Однокристальные 8-и разрядные FLASH CMOS микроконтроллеры компании Microchip Technology Incorporated: PIC16F882, PIC16F884, PIC16F886 (перевод технической документации DS30292С компании Microchip Technology Incorporated, USA). ООО "Микро-Чип": Москва, 2004.

  4. Предко М. Справочник по PIC-микроконтроллерам: Пер. с англ.–М.: ДМК Пресс, 2004.–512 с.

  5. Справочник. Микроконтроллеры: архитектура, программирование, интерфейс. Бродин В.Б., Шагурин М.И.М.:ЭКОМ, 1999.

  6. Тавернье К. PIC-микроконтроллеры. Практика применения: Пер. с фр. – М.: ДМК Пресс, 2003.–272 с.



^

Приложение А


(обязательное)

Схема электрическая принципиальная






Скачать файл (1286.7 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации