Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Интересное:
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
2020-08-21 | 146 |
5.00
из
|
Заказать работу |
|
|
цифровой вольтметр микроконтроллер индикатор
Подпрограмма обработки прерывания таймера Т0 должна выполнять следующие действия:
- декрементировать счетчик переполнения таймера tcou и, в случае если 0 не был достигнут, закончить подпрограмму;
- перегрузить tcou и содержимое таймера Т0;
декрементировать счетчик cou 01 и, в случае если был достигнут 0, перегрузит cou 01 и установить признак метки времени 100 мс;
выключить все индикаторы;
выдать на порт РС данные по указателю данных индикатора;
включить соответствующий анод индикатора;
инкрементировать указатель данных индикатора и, в случае, если он вышел за область буфера, загрузить его начальным адресом.
Рисунок 5. Блок-схема алгоритма основной программы
Блок-схема алгоритма подпрограммы обработки прерывания таймера Т0 приведена на рисунке 6.
Описание программы
Управляющая программа написана на языке ассемблера в среде AVR Studio версии 3.5. Полный текст программы приведен в приложении 1. Программа содержит 422 байта кода.
Рисунок 6. Блок-схема алгоритма обработки прерывания
Время выполнения основного цикла программы составляет не более 750 машинных циклов, время выполнения подпрограммы обработки прерывания - не более 35 машинных цикла.
В программе использовались следующие глобальные переменные:
- flag - регистр пользовательских флагов,
§ бит 0 (tf) - флаг метки времени 100 мс;
§ бит 1 (kre) - текущее состояние кнопки переключения диапазонов;
§ бит 2 (kon) - флаг нажатия кнопки переключения диапазонов;
§ бит 3 (minus) - флаг отрицательного входного напряжения.
- tcou - счетчик переполнения таймера Т0, в программе обработки прерывания используется также как рабочий регистр;
|
- cou 01 - счетчик для формирования интервала 100 мс из интервалов в 5 мс;
- mux - переменная хранения номера текущего интервала измерения;
- anod - переменная для хранения кода включения анодов семисегментных индикаторов;
- zero - регистр, содержащий 0
- buf - трехбайтовая переменная для хранения данных, выводимых на индикатор;
- Y - указатель видео буфера.
В программе использовались следующие подпрограммы:
- key - опрос кнопки переключения диапазонов, формирование флагов kre и kon в регистре flag;
- range - анализ состояния флага kon и переключение на следующий диапазон измерения;
- measure - запуск АЦП на измерение, ожидание конца измерения;
- calc - расчет бинарного кода величины, подлежащей индикации по формуле, приведенной в п. 4.3.
- visio - преобразование расчетной величины в цифры, кодированные семисегментным кодом, загрузка буфера индикации, включение светодиодов масштаба;
- tim 0 - подпрограмма обработки прерывания, формирование меток времени 5 мс и 100 мс, поддержка динамической индикации;
- init - инициализация портов, АЦП, пуск таймера Т0;
- mulw - беззнаковое 16-битное умножение, является аналогом библиотечной функции, поставляемой в комплекте с AVR Studio (файл “avr200.asm”);
- div 10 - деление двухбайтовой величины на 10, является модифицированной версией функций деления, представленных в файле “avr200.asm”.
Литература
1. Atmel AVR.
2. Analog Devices REF198.
. Analog Devices ADM660.
. Analog Devices OP177.
Приложение 1. Текст программы
.include "8535def.inc"
.equ ledV =0; номер бита для светодиода "V"
.equ ledmV =1; номер бита для светодиода "mV"
.equ min =4; номер бита для сегмента "минус"
.def zero =r2
.def mux =r3
.def anod =r4
.def cou01 =r5
.def tcou =r22
.def flag =r23
; биты регистра flag
.equ tf =0
.equ kre =1
.equ kon =2
.equ minus =3
.equ buf =$60; буфер для индикации, 3 байта
rjmp start
.org OVF0addrtim0: ldi r16, low(RAMEND)spl, r16r16, high(RAMEND)sph, r16init: sbrs flag, tf; ожидание метки времени
rjmp loop
cbr flag, 1<<tf; сброс флага
rcall key; опрос кнопки
rcall range; установка канала измерения
|
rcall measure; оцифровка
rcall calc; расчет выходного значения
rcall visio; формирование видео буфера
rjmp loop
;********************************
; Out: биты kre и kon регистра flag
key: cbr flag, 1<<kon
sbic pinD, 0
rjmp ClrKre
sbrc flag, kre
retflag, (1<<kre)|(1<<kon): cbr flag, 1<<kre
;********************************: sbrs flag, konmuxr16, 3mux, r16pc+2mux
out ADMUX, mux
;*********************************
; Out: r17:r16
calc: sbr flag, 1<<minusr16, ADCL
in r17, ADCHr16, low(512) r17, high(512)
brpl ca1; если разность отрицательна
cbr flag, 1<<minus; взять модуль
ldi r18, 1; и сформировать признак минуса
com r16r17r16, r18
adc r17, zero
;: ldi r18, low(503)
ldi r19, high(503)mulwr16, r19 r17, r14
lsl r18; округление после умножения
adc r16, zeror17, zero
ret
;*********************************
visio: ldi r18, low(1000); проверка выхода за
ldi r19, high(1000); границы диапазона
cp r16, r18
cpc r17, r19
brsh vis2
ldi xl, buf+3; преобразование в цифры
vis1: rcall div10; семисегментного кода и
rcall code7; сохранение в buf
st -x, r0
cpi xl, bufvis1vis3
vis2: ldi r16, $ab; выход за диапазон
sts buf, r16; заполнение буфера
sts buf+1, r16; символами "ппп"
sts buf+2, r16
;: in r16, portBr16, (1<<min)|(1<<ledV)|(1<<ledmV)flag, minusr16, 1<<min; включение минуса
;muxvis4r16, 1<<ledmV; включение светодиода "mV"mux, 1vis5r17, buf+1; включение запятой
cbr r17, 1<<7; во второй позиции
sts buf+1, r17
rjmp vis5
;
vis4: cbr r16, 1<<ledV; включение светодиода "V"
lds r17, buf; включение запятой
cbr r17, 1<<7; в первой позиции
sts buf, r17: out portB, r16
;*********************************:sbi ADCSR, ADSC; старт АЦПADCSR, ADSCpc-1
; ldi r16, $9b
; out ADCL, r16
; ldi r16, 0
; out ADCH, r16
;*********************************
; Преобразование в семисегментный код
; In: r18, Out: r0
code7: ldi zl, low(Tab7<<1)zh, high(Tab7<<1)zl, r18zh, zero
; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9:.db $c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90
;****************************
; Обработка прерывания
tim0: in r24, sreg
push r24
dec tcou
brne endtim
; вход в точку каждые 5 ms
ldi tcou, -(136-13); 13 - коррекция задержки
out TCNT0, tcou; на вхождение в прерывание
;
dec cou01
brne pc+4
; вход в точку каждые 100 ms
sbr flag, 1<<tftcou, 20cou01, tcou
;tcou, portB; выключить все аноды
ori tcou, $e0portB, tcour24, y+
out portC, r24; включить катодыtcou, anod portB, tcou; включить нужный анод
;
sec; подготовить следующий анод
ror anod
cpi yl, buf+3; все индикаторы?
brne pc+4
ldi tcou, $7f; перегрузить анод и
mov anod, tcou; видео указатель
ldi yl, buf
;
ldi tcou, 19+1; перегрузить счетчик
; переполнения таймера
endtim:pop r24sreg, r24
reti
;****************************: clr zeror17, $ff
; инициализация портовr16, $f8portA, r16ddrA, zeroportB, r17r16, 0b11110011ddrB, r16portC, r17ddrC, r17portD, r17ddrD, zero
; инит. АЦП, 125 кГц тактирования
ldi r16, 0b10000011
out ADCSR, r16
;tcou, 1cou01, tcouflag
; диапазон 10V mux
out ADMUX, mux
; начальные значения анодов и видео указателя
ldi yl, low(buf)yh, high(buf)r16, $7fanod, r16
|
;
clr xh
; разрешить прерывание по таймеру Т0
ldi r16, 1<<TOV0TIMSK, r16
; запустить таймер Т0
ldi r16, 1
out TCCR0, r16
;*****************************
; r19:r18*r17:r16=r15:r14:r19:r18
; Usage: r21 - count: clr r14r15r21, 16r19r18pc+3r14, r16
adc r15, r17r15r14r19r18
dec r21
brne pc-8
;***************************
; div10 r17:r16/10=r17:r16(r18): ldi r18, 11: subi r17, $28dd1r17, -$28pc+2
dd1: secr16r17r18dd0r18, r17
lsr r18r18r18
andi r17, 7
ret
Приложение 2. Схема электрическая принципиальная
|
|
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!