Дипломы, курсовые, рефераты, контрольные...
Срочная помощь в учёбе

Блок-схема алгоритма разрабатываемой программы

РефератПомощь в написанииУзнать стоимостьмоей работы

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.

Показать весь текст
Заполнить форму текущей работой