Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Порядок обмена по интерфейсу RS-232
Принципиальная схема
Алгоритм работы МК
АЛГОРИТМ РАБОТЫ МИКРОКОНТРОЛЛЕРА. Мы имеем клавиатуру (каждая клавиша подключена к параллельному порту МК), с которой поступают сигналы на микроконтроллер, затем формируется скан-код, который передается на внешнее устройство (например ПК). Это реализовано следующим образом: По прошествии 100 мс мы опрашиваем входы МК и определяем, что клавиша была нажата. (задержкой в 100 мс формируем программную защиту от дребезга контактов). После нажатия клавиши передаем скан-код по UART. Выбор номиналов резисторов R2- R7 осуществляется исходя из соображений незначительности падающего на них напряжения при нажатии на клавиши. При указанных на схеме значениях и напряжении питания 5В логические уровни составляют 0.6В для лог. “0” и 4.95В для лог. “1”. Пятивольтовый стабилизатор (LM 7805) (входное напряжение от 7 до 30 вольт) обеспечивает на выходе стабильные 5 вольт, требующиеся для питания схемы.
Листинг программы: ;Пример кода, использующий функцию выходного сравнения таймера 1
.INCLUDE "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\2313def.inc"
;Определение сегмента данных .DSEG .ORG 0x60
.DEF knopka1 = r5 ;первые 8 кнопок .DEF knopka2 = r6 ;кнопки под номерами 8,9
flag1: .byte 1
;Определение сегмента кода .CSEG .ORG 0x0000
.equ XTAL = 8000000 .equ baudrate = 9600 .equ bauddivider = XTAL/(16*baudrate)-1
;Таблица векторов прерываний rjmp Reset rjmp INT0_interrupt rjmp INT1_interrupt rjmp T1CAPT_interrupt rjmp T1COMP_interrupt rjmp T1OVF_interrupt rjmp T0OVF_interrupt rjmp UART_RX_interrupt rjmp UART_UDRE_interrupt rjmp UART_TX_interrupt rjmp ANCOMP_interrupt
Reset: ;Инициализация периферии МК ;Настройка указателя стека ldi r16, 0x7F out SPL, r16
;Инициализация переменной значением 0х00 ldi r17, 0x00 sts flag1, r17
;Инициализация регистра выходного сравнения значением 0х0100 ldi r17, 0x01 out OCR1AH, r17 ldi r17, 0x00 out OCR1AL, r17
;Включение таймера ;Настройка таймера на обнуление при срабатывании компаратора ;Выбор делителя системной частоты 1024 ldi r17, 0x0D out TCCR1B, r17
;Разрешение прерывания от функции выходного сравнения ldi r17, 0x40 ;01000000b out TIMSK, r17
;Настроить порт D на ввод out DDRD,r22
;Настроить порт B на ввод out DDRB,r6
;Глобальное разрешение прерываний sei
ldi r16, low(bauddivider) out UBRRL,r16 ldi r16, high(bauddivider) out UBRRH, r16
ldi r16,0 out UCSRA, r16
; Прерывания разрешены, прием-передача разрешен. ldi r16, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE)|(0<<UDRIE) out UCSRB, r16
; Формат кадра - 8 бит, пишем в регистр UCSRC, за это отвечает бит селектор ldi r16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1) out UCSRC, r16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Процедура отправки байта translate: sbis UCSRA, UDRE ; Пропуск если нет флага готовности rjmp uart_snt ; ждем готовности - флага UDRE
out UDR, R16 ; шлем байт ret ; Возврат
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Main: ;Код пользователя, выполняется циклически с периодом, который задается с помощью ;функции выходного сравнения
;Вводим данные с портов d и b в регистры In knopka1, portb ; in knopka2, portd ;
;проверяем установлена ли 1 в каком-либо бите
sbrc knopka1, 0 breq translate1 ;если нажата клавиша 1
sbrc knopka1, 1 breq translate1 ;если нажата клавиша 2
sbrc knopka1, 2 breq translate1 ;если нажата клавиша 3
sbrc knopka1, 3 breq translate1 ;если нажата клавиша 4
sbrc knopka1, 4 breq translate1 ;если нажата клавиша 5
sbrc knopka1, 5 breq translate1 ;если нажата клавиша 6
sbrc knopka1, 6 breq translate1 ;если нажата клавиша 7
sbrc knopka2, 4 breq translate1 ;если нажата клавиша 8
sbrc knopka2, 5 breq translate1 ;если нажата клавиша 9
translate1 : mov r16, knopka1 translate ;передаем байт соответствующий кнопкам 0-7
clr r16 ;очищаем регистр r16
mov r16, knopka2 ;убираем лишние данные в регистре rol r16 rol r16 rol r16 rol r16
ror r16 ror r16 ror r16 ror r16 ror r16 ror r16 ror r16
translate ;передаем данные
clr knopka1; обнуляем кнопку1 clr knopka2; обнуляем кнопку2
cycle: ;Ожидание установки флаговой переменной lds r0, flag1 cp r0, r17 breq cycle
sts flag1, r17
rjmp Main
;Обработчики прерываний INT0_interrupt: reti INT1_interrupt: reti T1CAPT_interrupt: reti
T1COMP_interrupt: ;В обработчике прерывания выполняется установка флаговой переменной flag1
ldi r20, 0xFF sts flag1, r20
reti
T1OVF_interrupt: reti T0OVF_interrupt: reti UART_RX_interrupt: reti
UART_UDRE_interrupt: reti UART_TX_interrupt: reti ANCOMP_interrupt: reti
Перечень элементов
ЗАКЛЮЧЕНИЕ В процессе работы был разработан проект контроллера клавиатуры, написано ПО опроса клавиатуры и обслуживания дискретных входов и выходов. Это устройство является звеном в системе сбора данных и управляет исполнительным устройством.
Литература 1. Конспект лекций по курсу микроконтроллеры 2010г 2. http://atmel.ru 3. http://www.gaw.ru 4. http://easyelectronics.ru/avr-uchebnyj-kurs-peredacha-dannyx-cherez-uart.html#more-48 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-05-29; просмотров: 233. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |