Блок-схема алгоритма разрабатываемой программы
![Реферат: Блок-схема алгоритма разрабатываемой программы](https://gugn.ru/work/8719083/cover.png)
Bred:; загружаем в регистр сравнения число. Rjmp T1OVF_interrupt; прерывание по переполнению. Rjmp T0OVF_interrupt; прерывание по переполнению. Разрешение приемника и передатчика USART. Настройка последовательного порта USART. Uart_send: sbis UCSRA, UDRE; Пропуск если нет флага. Uart_rcv:sbisUCSRA, RXC; Ждем флага прихода байта. Rjmp USART_TXC_ interrupt; USARTO, передача завершена. Выводим… Читать ещё >
Блок-схема алгоритма разрабатываемой программы (реферат, курсовая, диплом, контрольная)
Листинг программы
.INCLUDE:".appotes2312def.inc"; подключение файла со спецификацией
;регистров ввода/вывода
.DSEG; объявление сегмента данных
.ORG 0×60; начало пользовательского ОЗУ
.CSEG; объявление сегмента кода
; Таблица векторов прерываний
rjmp Reset ;вектор прерывания при сбросе и включении
rjmp INT1_ interrupt ; внешний запрос на прерывание по входу INTO
rjmp INT0_ interrupt; внешний запрос на прерывание по входу INT1
rjmp T1CAPT_interrupt ; прерывание по захвату таймера/счетчика 1
rjmp T1OVF_interrupt ; прерывание по переполнению
;таймера/счетчика 1
rjmp T0OVF_interrupt ; прерывание по переполнению
;таймера/счетчика 0
rjmpT0COMP_interrupt ; прерывание по совпадению таймера/счетчика 0
rjmp USART_RXC_ interrupt; USARTO, прием завершен
rjmp USART_TXC_ interrupt; USARTO, передача завершена
rjmp USART_UDRE _ interrupt; USARTO буфер данных пуст
; Инициализация микроконтроллера
Reset:
; Настройка указателя стека
ldi r16, 0x7 °F.
out SPL, r16.
; Настройка последовательного порта USART
;Настройка линии PD1 на вывод данных
ldi r17, 0×02.
out DDRD, r17.
;Разрешение приемника и передатчика USART
;Разрешение прерываний по окончанию приема и передачи байта данных
ldi r17, 0xD8.
out UCSRB, r17.
; Формат кадра — 8 бит для USART
ldi r17, 0×86.
outUCSRC, r16.
;Настраиваем таймер/счетчик 1 на счет внешних импульсов (захват по ;положительному фронту)
ldi r17, 0×07.
out TCCR1B, r17.
;Разрешение прерывания по переполнению таймера/счетчика 0
ldi r17, 0×02.
out TIMSK, r17.
;Глобальное разрешение прерываний
sei.
; Подпрограмма отправки байта
uart_send: sbis UCSRA, UDRE; Пропуск если нет флага
;готовности
rjmpuart_send; ждем готовности — флага UDRE
out UDR, r20; шлем байт
ret; Возврат
;Подпрограмма ожидания байта
uart_rcv:sbisUCSRA, RXC; Ждем флага прихода байта
rjmp uart_rcv ; вращаясь в цикле
in r19, UDR; байт пришел — забираем.
ret ; Выходим. Результат в R19
main:
rcall uart_rvc ;Вызываем подпрограмму ожидания байта
cp r16, 0x3 °F ; Проверяем поступление символа «?»
breq schet ; Если получили «?», переходим к преобразованию
;частоты в двоичный код
brne uart_rcv ;Если нет, возвращаемся ожидать символ
; Отсчет эталонного интервала (4 сек)
schet:
сlr r0; очищаем счетчик событий
ldi r26, 0x0 °F ; необходимое число переполнений таймера/счетчика 0
ldi r27, 0xA0 ; число для сравнения, необходимое для подсчета 4 сек.
;Настраиваем таймер/счетчик 0 на работу от внутреннего генератора с ;коэффициентом деления K=1024
ldi r17, 0×05.
out TCCR0, r17.
bred: ; загружаем в регистр сравнения число
out OCR0A, r27.
; Подпрограмма преобразования частоты в двоичный код
freq:
in r21, TCNT1 ; Получение значения частоты
lrs r21 ;нормирование с учетом 4-секунд
lsr r21.
ldi r22, 0xC8 ; калибровка относительно 0
sbc r21, r22.
mov r25, r21.
ldi r23, 0xFF ; заносим число итераций для 1 цикла
ldi r24, 0×10 ; заносим число итерации для 2 цикла
ckl1:; умножаем частоту на 255
adc r21, r25.
dec r23.
breq ckl1.
ckl2: ; делим частоту на 1024
lsr r21.
dec r24.
breq ckl2.
;выводим полученное значение через USART
rcall uart_send.
ret.
rjmp main.
; Обработчики прерываний
INT1_ interrupt:
reti.
INT0_ interrupt :
reti.
T1CAPT_interrupt :
reti.
T1OVF_interrupt :
clr TCNT1.
reti.
T0OVF_interrupt :
;Обработчик прерываний по переполнению таймер/счетчика 0
inc r0; увеличиваем счетчик событий на 1.
cp r0, r26.
breq pred.
clr TCNT0.
reti.
rjmpT0COMP_interrupt:
; Обработчик прерывания по совпадению таймера/счетчика 0
; Остановка таймера/счетчика 0
clr r3.
out TCCR0, r3.
rjmp frenq.
reti.
rjmp USART_RXC_ interrupt :
reti.
rjmp USART_TXC_ interrupt :
reti.
rjmp USART_UDRE _ interrupt:
reti.