Составители:
15
Бит AS0: Разрешение асинхронного режима таймера/счетчика T/C0. При
установленном (= 1) бите на вход предделителя таймера/счетчика 0
поступают импульсы с внешнего кварцевого генератора.
Теперь нужно разрешить прерывания при совпадении кодов OCR0 и
TCNT0 (рис.1.6). Для этого нужно записать 1 в бит OCIE0 регистра масок
прерываний TIMSK
7 6 5 4 3 2 1 0
Разряд
OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0
Рис.1.6.6. Регистр масок прерываний для таймеров/счетчиков – TIMSK.
В соответствии с изложенным процедура инициализации таймера0
будет выглядеть следующим образом:
procedure Init_Timer0Async; //== настройка Таймера0 для работы от кварца с
//== частотой 32768Гц
begin
TCCR0:=$0D;//== бит CS00=CS02=1(предделитель=128), WGM01=1(сброс
счетчика при совп.)
OCR0:=$FF; //== регистр кода совпадения (256-1): 32768/128/256=ровно 1Гц
//== режим совпадения предпочтительнее режима
//== переполн., т.к. вместо FF можно выбирать другие значения
ASSR.3:=1; //== бит AS0=1 - переходим в асинхронный режим Timer0 от
//== кварца с резонансной частотой 32768Гц
TIMSK.1:=1;//== бит OСIE0:=1 - разрешить прерывания при совпадении
//== текущего значения таймера0 с кодом в регистре совпадения OCR0
end;
Переключение светодиода и подача звукового сигнала будут
производиться в процедуре обработчике прерывания с символическим
именем (адресом) TIMER0COMP:
var b: boolean;
var i,t0: byte;
interrupt TIMER0COMP; //== обработчик прерывания при совпадении кодов
//== таймера0 (счетчик TCNT0) и регистра OCR0
begin
b:=not b; //== инвертируем бит ‘b’
PORTE.7:= b; //== и выводим его на катод светодиода
for t0:=0 to 6 do //== теперь "тикаем"
sound:=not sound; //== формируем меандр _|`|_|`|_|`| (инвертируя бит sound)
PORTD.7:=sound; //== и выводим его на пьезодинамик
for i:=0 to 255 do endfor; //== длительность полуволны "тика"
endfor;
Страницы
- « первая
- ‹ предыдущая
- …
- 13
- 14
- 15
- 16
- 17
- …
- следующая ›
- последняя »