Автор: Пользователь скрыл имя, 21 Декабря 2011 в 20:05, курсовая работа
Таким образом основные функции МПУ:
а) прием и обработка сигнала с датчика угла;
б) отображение H на четырехразрядном цифровом индикаторе;
в) осуществлять установку/снятие защиты;
г) вывод сигналов управления при срабатывании защиты.
Взаимодействие МПУ с индикатором и органами управления представлено на рисунке 1.
1 Функциональная спецификация и системные требования……………………...
2 Системно – алгоритмическое проектирование…………………………………..
3 Разработка аппаратных средств…………………………………………………..
4 Разработка программы…………………………………………………………...
5 Трансляция и автономная отладка программы…………………………………
6 Комплексная отладка программы………………………………………………
Список использованных источников……………………………………………...
Приложения А – Исходный текст програм
Сформируем константы для загрузки в управляющие регистры:
Init_PE EQU b’00000100’ (биты 1,0 – вывод)
Init_AD1 EQU b' 00001110' (включены линии PORTE, результат АЦП влево)
Диаграммы сигналов CS, CLK, а также форматы слова конфигурации для MC14489BP и слов данных приведены на рисунке 3. Слово конфигурации длиной один байт определяет:
- режим потребляемой мощности (C0);
-
режимы декодирования разрядов (С1 – С7).
Иницилизация MC14489 выполняется подпрограммой
«подпрограмма инициализации MC14489»
Рисунок 3 – Диаграммы сигналов
В
соответствии с электрической схемой
МПУ кнопки «Установка/снятие защиты»
подключена к линиии 1 порта PORTB . Обозначим
соответствующий разряд порта RB1. Активному
(нажатому) состоянию кнопки соответствует
низкий потенциал на линии порта PORTB. Пассивному
(отжатому) состоянию кнопки соответствует
высокий потенциал, который обеспечивается
встроенными подтягивающими резисторами.
Включаются подтягивающие резисторы установкой
разряда –RBPU=0 в регистре OPTION_REG. Для настройки
модуля PORTB воспользуемся таблицей
2. Настройка линий определяется содержимым
управляющего регистра TRISB.
Таблица 2 – Регистры и биты, связанные с работой PORTB
Адрес | Имя | Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
06h, 106h | PORTB | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1 | RB0 |
86h, 186h | TRISB | Регистр направления данных PORTB | |||||||
81h, 181h | OPTION_REG | -RBPU | INTEDG | T0CS | T0SE | PSA | PS2 | PS1 | PS0 |
Сформируем константы для загрузки в управляющие регистры:
Init_OPT EQU b’01000000’ (включение подтягивающего резистора);
Init_PB
EQU b’11110111’ (бит 3 вывод);
В качестве индикации включения /отключения защиты и сигнализации о срабатывании защиты будем использовать светодиоды, которые в
соответствии
с электрической схемой МПУ, подключены
к 0 – 1 линиям порта PORTD. Для настройки
модуля PORTD воспользуемся таблицей
4. Настройка линий определяется содержимым
управляющего регистра TRISD.
Таблица 4 – Регистры и биты, связанные с работой PORTD
Адрес | Имя | Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
08h | PORTD | RD7 | RD6 | RD5 | RD4 | RD3 | RD2 | RD1 | RD0 |
88h | TRISD | Регистр направления данных PORTD | |||||||
89h | TRISE | IBF | OBF | IBOV | PSPMODE | - | Рег. напр. данных PORTE |
Сформируем константу для загрузки в управляющий регистр:
INIT_PD EQU b’00000000’ (все линии порта на вывод).
Кроме трех портов в проекте используется встроенный модуль 10-разрядного АЦП. Для работы с модулем АЦП в микроконтроллере используется 4 регистра:
- регистр результата ADRESH (старший байт);
- регистр результата ADRESL (младший байт);
- регистр управления ADCON0;
- регистр управления ADCON1.
Для
настройки модуля АЦП воспользуемся
таблицей 5 . Настройка работы определяется
содержимым управляющих регистров ADCON0
и ADCON1.
Таблица 5 – Регистры и биты, связанные с работой модуля АЦП
Сформируем константы для загрузки в управляющие регистры:
Init_PA EQU b'00111111' ;все линии ввод
Init_ACP EQU b' 01000001' (Fosc/8, канал AN0, включить модуль АЦП);
Init_AD1 EQU b' 00000100' (результат A/D преобразования
влево, канал AN0 и AN1 аналоговые).
4
Разработка программы
Сначала следует принять принципиальные решения, определяющие структуру программы. Прежде всего, необходимо определиться, как должен реагировать МК на основные события:
а) ввод данных с модуля АЦП;
б) формирование выходных сигналов;
в) нажатие кнопки S1 в произвольные моменты времени.
Для всех основных событий подходит программная реализация.
Представим принятые решения в виде схемы представленной на рисунке 4.
Алгоритмизацию и программирование отдельных функций можно выполнять совместно. Но сначала необходимо выбрать язык
программирования. Языки программирования низкого уровня в настоящее время называются ассемблерами. Основу ассемблера составляют машинные команды процессора в мнемоническом представлении. Кроме машинных команд современные языки ассемблера, как правило, включат директивы, определяющие ход трансляции, а также средства создания макрофункций. Рассмотрим вариант программирования на языке ассемблера.
Перейдем к формированию исходного текста программы. Текст программы должен начинаться с директивы установки адреса сброса 0x000. Чтобы использовать средства внутрисхемной отладки, следующей командой должна быть nop. Так как тексты всех подпрограмм принято размещать до ссылок на них в основной программе, то следующей должна быть команда перехода на начало программы. Здесь первой командой должна быть команда запрета прерываний на время инициализации. Необходимо выполнить инициализацию всех используемых встроенных модулей МК, контроллера MC14489 и ячеек памяти. Для вывода информации используем подпрограмму, которую назовем Display.
Так как МПУ должен однократно реагировать на нажатие кнопоки, то переход на начало цикла возможен только после отпускания кнопки. Поэтому опрос кнопки должен выполняться дважды: сначала анализ на нажатое состояние, а затем анализ на отжатое состояние.
Ниже
приводится текст основы программы,
полученной с учетом принятых решений.
ORG 0x000 ;вектор сброса
nop
goto Begin ;переход на начало программы
Все используемые подпрограммы
Операторы инициализации модулей МК
Операторы инициализации MC14489
Инициализация ячеек памяти
Основной цикл
END
Полный
текст программы приведен в приложении
А.
Рисунок
4 – Алгоритм программы
Информация,
выводимая в контроллер индикаторов,
должна быть представлена в последовательном
коде. Информационное слово, изображенное
на рисунке 5, состоит из 24 разрядов, из
них младшие 20 разрядов (D0 – D19) содержат
пять тетрад кода отображаемых символов,
разряды D20 – D22 управляют сегментами h
(точка), разряд D23 – управляет яркостью
свечения сегментов. Так как используются
только четыре индикатора, то разряды
D16-D19 можно задавать произвольно.
Рисунок
5 – Информационное слово
Для вывода на индикаторы необходимо показания значений подъема стрелы H упаковать в два байта (в BCD), для их хранения используем ячейки:
- R0 – управление децимальными точками;
- R1 – разряды 3-2 7сегм.;
- R2 –разряды 1-0 7сегм..
Так как данные должны передаваться в последовательном коде, необходим буфер данных Indval, используемый как сдвигающий регистр, и счетчик разрядов Cntind. Тогда вывод одного байта можно свести к загрузке буфера Indval, инициализации счетчика Cntind и последовательности сдвигов буфера влево, пока Cntind ≠ 0. После сдвига выводимый разряд байта будет находиться в разряде STATUS<C>. При этом каждый сдвиг должен сопровождаться формированием фронта синхроимпульса Clk. При условии, что байт находится в аккумуляторе w, алгоритм вывода можно представить в виде подпрограммы Send8:
Send8 bcf Clk
movwf Indval
movlw 8
movwf Cntind
SendLoop bcf Data_in
rlf Indval,f
btfsc STATUS,C
bsf Data_in
nop
bsf Clk
nop
bcf Clk
decfsz CntInd,f
goto SendLoop
return
Процесс вывода информации можно представить, как последовательный вывод трех восьмиразрядных слов при выборе контроллера MC14489 (CS=0):
Display bcf Cs
movlw 30h
call Send8
movf R1,w
call Send8
movf R2,w
call Send8
bsf Cs
return
Все
механические кнопки имеют одно негативное
свойство, известное как “дребезг
контактов”, которое обусловлено
колебаниями упругих контактов
при их замыкании и размыкании.
Длительность колебаний составляет
всего несколько миллисекунд. При этом
вместо “чистого” прямоугольного импульса
получается искаженный импульс или пачка
импульсов. Идеальный и реальный сигналы,
формируемые при нажатии и отпускании
кнопки, представлены на рисунке 6.