Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2





НазваниеПрограмма по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2
страница2/12
Дата публикации19.02.2014
Размер1.28 Mb.
ТипДокументы
100-bal.ru > Информатика > Документы
1   2   3   4   5   6   7   8   9   ...   12

Что такое микроконтроллер AVR?

Сразу определимся с терминами и прочим “по умолчанию”. Рассматривать будем восьмиразрядные микроконтроллеры семейства AVR (далее - МК). Считаем, что читатель имеет представление о цифровой технике, знает, за какой конец держится паяльник и знает хотя бы Бейсик.

Не рассматривайте этот учебник как абсолютно полный и точный - наверное, это просто невозможно. Я хочу написать предельно простое и понятное пособие для первого ознакомления с МК, которое не запугает начинающего до смерти :-)

Итак, что же представляет собой типичный МК? Это микросхема, в которой на одном кристалле умещается уйма разнообразнейших устройств. Управляет всем арифметико-логическое устройство (АЛУ). К АЛУ подключен тактовый генератор, частота которого определяется, как правило, внешним кварцем, подключенным к выводам XTAL1 и XTAL2. Для AT90S8535 максимальная частота тактового генератора – 8 МГц, соответственно период, или длительность одного такта – 125 нс. Именно за это время выполняется большинство команд МК. Но не будем торопиться.

 Итак, на АЛУ поступает тактовый сигнал (TCK), АЛУ выбирает из ПЗУ команду и выполняет ее. А вот тут надо как-то одновременно рассказать и о командах, и о том, что они, собственно, изменяют и на что влияют… И рассказать желательно одновременно, поскольку все между собой тесно завязано. Наверное, все-таки начнем со второго.

Несмотря на такое, казалось бы, различие между этими двумя МК (8535 и Tiny15) - ядро и система команд у них практически одинаковы


АЛУ подключено к регистрам общего назначения (РОН), регистрам ввода-вывода и встроенному ОЗУ. Регистров общего назначения всего 32, причем некоторые из них имеют специфическое предназначение, размер встроенного ОЗУ в зависимости от МК – от нуля  до 512 байт. И регистры, и ОЗУ имеют байтовый формат, то есть состоят из восьми бит. Ну и на всякий случай упомяну, что бит – это по сути минимальная единица информации, может принимать значения 0 и 1. 

Отличаются же регистры и ОЗУ тем, что в ОЗУ можно только записывать данные из регистров (ну и читать в регистры, естественно), а с регистрами можно делать все что угодно – арифметические, логические операции, короче – в ОЗУ данные лежат, а в регистрах кипит работа.

Ну и еще уточним - не все регистры одинаковы. Младшие (см. таблицу) не могут работать с непосредственным операндом. R0 используется в команде LPM,  регистры R26-R27, R28-R29 и R30-R31 образуют регистровые пары X, Y и Z, которые тоже не одинаковы - регистровая пара X не дает обращаться к памяти со смещением, а Z кроме обычных действий позволяет делать косвенный переход и читать память программ.

Но никто не запрещает использовать эти "специальные" регистры и как обычные.

Итак, с регистрами общего назначения вроде разобрались. Что дальше? А дальше - регистры ввода-вывода.

Регистры ввода-вывода – это связь АЛУ с внешним миром и собственной периферией. Хотя сам по себе термин “периферия” идет с тех времен, когда микропроцессор был только микропроцессором и не более того. Все, начиная от генератора тактовых импульсов и кончая таймером – это были отдельные микросхемы или даже блоки. Ну да ладно, периферия так периферия, главное – понятно, что это такое. Под регистры ввода-вывода отведено 64 байта в адресном пространстве, но в различных МК реально задействовано разное их количество.

Впрочем, порты ввода-вывода мы рассмотрим на следующем уроке, поподробнее.

Еще в МК есть ПЗУ команд. Оно никак не связано с адресным пространством ОЗУ и регистров, по умному это называется гарвардской архитектурой. ПЗУ имеет 16-ти разрядную организацию, размер его у различных МК – от 1 кБайт до 8 кБайт. Как записать туда программу - рассмотрим в другой раз.

0x00-0x1F

Регистры общего назначения,
R0-R31

R0-R15 младшие

R16-R31 старшие

0x20-0x5F

Регистры ввода-вывода

0x00-0x3F для команд IN,OUT

0x60-

Внутреннее ОЗУ

Размер и наличие зависит от модели МК

Адресное пространство МК

 

R0

используется в команде LPM

R1-R15

используются произвольно

Младшие регистры

 

R16-R25

используются произвольно

R26

Регистровая пара X

R27

R28

Регистровая пара Y

R29

R30

Регистровая пара Z

R31

Старшие регистры

Следует заметить, что к РОН и регистрам ввода-вывода можно обратиться и как к ОЗУ. Так, запись в ячейку ОЗУ с адресом 1 эквивалентна записи в R1, а чтение ОЗУ из адреса $22 – эквивалентно команде IN xxx,$02. Впрочем, к этому мы еще вернемся – не все сразу…




Упомянем еще биты блокировки памяти и биты конфигурации. Они никак не связаны с адресным пространством и не читаемы программно, изменяются только программатором.

Первые предназначены для защиты от пиратства - будучи установленными, запрещают чтение ПЗУ программ снаружи. На работу программы не влияют, и сбрасываются только при очистке кристалла.

Вторые определяют режимы работы МК и не изменяются при стирании кристалла. Количество их  разных МК - от одного до двух десятков. Подробнее мы их рассмотрим позже.
ПОРТЫ

Порты A, B, C и D - это двунаправленные восьмиразрядные порты ввода-вывода. Они  имеют аналогичную структуру. Каждый порт представлен тремя регистрами: PORTx, PINx и DDRx. Каждый бит регистров соответствует выводу МК. Так, PORTA.0, PINA.0 и DDRA.0 соответствуют выводу 40 МК AT90s8535 (см. рисунок).

Каждый вывод порта может быть настроен на ввод или на вывод. Да... Не звучит. Вывод на вывод. Давайте условимся - контакт(вывод) МК будем обзывать pin.  Итак - каждый pin может быть настроен на ввод или вывод в любых комбинациях. 

Для того, чтобы pin стал выходом, надо записать лог. "1" в соответствующий разряд регистра DDRx. В этом случае то, что будем записывать в регистр PORTx - будет отображаться на pin МК, то есть управлять внешней схемой, зажигать светодиод или еще что...




Если pin настроен на вход, то состояние pin-а может быть прочитано МК в регистре PINx. Регистр PORTx в этом случае управляет подтягивающим резистором (на Vcc) - при записи "1" в соответствующий разряд PORTx он включается. Входное сопротивление настроенного на ввод pin-а велико, и если он никуда не подключен  ("болтается в воздухе"), то достаточно поднести к устройству руку, чтобы МК начал читать оттуда все что угодно, но чаще - наводку 50 Гц

Почти каждый pin модет выполнять альтернативную функцию (а в некоторых МК - более одной). Естественно, что использовать его в качестве обычной линии ввода-вывода нельзя. Альтернативные функции (на рисунке - в скобках) включаются при разрешении и соответствующей настройке соответствующих им периферийных устройств. Но режим ввод/вывод надо настроить самому.

Так, если нужно использовать USART (асинхронный последовательный интерфейс), то нужно включить USART, разрешить работу приемника и передатчика и настроить PORTD.1 на выход (на вход без подтягивающих резисторов все линии всех портов настроены по сбросу).

Регистры ввода-вывода

Как мы уже упомянули в прошлом уроке, в адресном пространстве МК отведено 64 байта под регистры ввода-вывода (далее-РВВ). В зависимости от модели МК число реально имеющихся РВВ различно, физическая суть тоже отличается очень сильно. Наверное, лучше всего взять какой-то конкретный МК и коротко расписать его РВВ. Для более подробной информации - кликайте по имени. Поскольку AT90s8535 наиболее универсален, рассмотрим его в качестве примера. 

Некоторые существенные отличия семейств Меga и Tiny смотрите в  Система команд(Mega)

Прошу извинить что тут еще не все регистры описаны подробно - не успел. 


Адрес РВВ и имя

Краткое описание

$3F ($5F)  SREG

 Слово состояния процессора. 

$3E ($5E)  SPH
$3D ($5D)  SPL

 Указатель стека (младший и старший байты)

$3B ($5B) GIMSK 
$3A ($5A)  GIFR

 Общий регистр маски прерываний и общий регистр флагов прерываний 

$39 ($59) TIMSK
$38 ($58) TIFR 

 Регистр маски и регистр флагов прерываний таймеров

$35 ($55) MCUCR
$34 ($54) MCUSR

 Регистры управления и статуса МК

$33 ($53) TCCR0
$32 ($52) TCNT0 

 8-ми разрядный таймер

$2F ($4F) TCCR1A
$2E ($4E) TCCR1B
$2D ($4D) TCNT1H
$2C ($4C) TCNT1L
$2B ($4B) OCR1AH
$2A ($4A) OCR1AL
$29 ($49) OCR1BH
$28 ($48) OCR1BL
$27 ($47) ICR1H
$26 ($46) ICR1L 

 16-ти разрядный таймер 1 с двумя регистрами сравнения и регистром захвата. 

 Подробнее см. тут

$25 ($45) TCCR2 
$24 ($44) TCNT2
$23 ($43) OCR2
$22 ($42) ASSR

 8-ми разрядный таймер 2 с устройством сравнения

$21 ($41) WDTCR

Сторожевой таймер

$1F ($3E) EEARH
$1E ($3E) EEARL
$1D ($3D) EEDR
$1C ($3C) EECR

 Управление энергонезависимой памятью

$1B ($3B) PORTA
$1A ($3A) DDRA
$19 ($39) PINA

Порты A, B, C и D в принципе одинаковы, кроме альтернативных функций, выполняемых   линиями портов. 

См. подробное описание.

$18 ($38) PORTB
$17 ($37) DDRB
$16 ($36) PINB

$15 ($35) PORTC
$14 ($34) DDRC
$13 ($33) PINC

$12 ($32) PORTD
$11 ($31) DDRD
$10 ($30) PIND

$0F ($2F) SPDR
$0E ($2E) SPSR
$0D ($2D) SPCR

SPI ( синхронный последовательный интерфейс )

$0C ($2C) UDR
$0B ($2B) USR
$0A ($2A) UCR
$09 ($29) UBRR

 Асинхронный приемопередатчик ( USART , или RS232)   См. также  tonkosti

$08 ($28) ACSR

 Аналоговый компаратор

$07 ($27) ADMUX
$06 ($26) ADCSR
$05 ($25) ADCH
$04 ($24) ADCL

 Аналого - цифровой преобразователь (10 бит) 



Время летит быстро - не успел оглянуться, как classic AVR уже устарели, и им на смену пришли Mega и Tiny... И при всех своих преимуществах еще и стоят дешевле :-)

Итак, какие же основные отличия их от classic? Опять же сразу оговорюсь - я вряд ли смогу на этой страничке ухватить все... Но с чем сам работал - постараюсь не забыть. 

Итак, начнем с системы команд. Тут тоже надо оговориться - не все команды присутствуют во всех новых МК. 

MUL Rd,Rr

Беззнаковое умножение байта на байт. Регистры Rd,Rr - любые, результат всегда в R1:R0. Есть еще аналогичные команды умножения - знаковое MULS, знаковое на беззнаковое MULSU, и аналоги всех вышеперечисленных - со сдвигом результата ( FMUL, FMULS и FMULSU ). Параметры те же.  Я из всех этиз команд использовал только обычное беззнаковое - когда делал умножение "в столбик", полезность остальных оценить не могу :-)

JMP

Аналогична  RJMP, но может адресовать до 4M слов, соответственно занимает 2 слова памяти команд. В МК с большой памятью команд именно она, а не RJMP,  должна стоять в области векторов!

CALL

Аналогична RCALL, но может адресовать до 4M слов, соответственно занимает 2 слова памяти команд. 

MOVW Rd,Rr

Аналогична MOV, но копируется пара регистров. Rd, Rr - должны быть четными (0,2,4...). Время - 1 такт! то есть использование ее выгодно во всех отношениях.

LPM

Аналогична LPM у classic, но усовершенствована - можно указать регистр результата (у classic был жестко определенный R0), кроме того, можно автоинкрементировать Z. По сути получаем три разные команды - LPM, LPM Rd,Z и LPM Rd,Z+

SPM

 Запись слова программной памяти. Адрес слова в Z, само слово в R1:R0. Тонкости выполнения команды, думаю, надо смотреть в даташите, сам я никогда не применял.

 

Основное отличие архитектуры - настраиваемый тактовый генератор. Точное описание надо смотреть в даташите на конкретный МК, поскольку возможности и "умолчание" могут сильно отличаться, но основные отличия от classic таковы:

Тактовый генератор может работать не только от внешнего кварца, но и от внешнего генератора и - самое главное - от встроенного RC генератора. Последний режим - по умолчанию, кроме того, частота этого  RC генератора может выбираться установкой fuse-бит. У большинства МК по умолчанию - 1 МГц встроенный RC по умолчанию. Но, например, у Tiny2313 по другому!

Сразу хочу предупредить - с установкой fuse надо быть осторожным, помнить о том, что "галочка" или "1" - это состояние НЕЗАПРОГРАММИРОВАНО! Многие на этом обламывались :-) да и я сам. Помните о том, что неверная комбинация fuse бит может привести к неработоспособности МК!

Описания регистров.

SREG  $3F ($5F)  

Слово состояния процессора. Биты этого РВВ отображают результаты выполнения команд процессора:

C - перенос , 
Z
-ноль, 
N
- отрицательный результат, 
V
- переполнение, 
H
- перенос из младшей тетрады, 
S
 - знак, 
T
- копируемый бит, 
I
- общее разрешение прерываний. 

Все биты, кроме I и T, изменяются в зависимости от результата выполнения процессором арифметических и логических операций. Так, если результат операции равен нулю, будет установлен в лог."1" бит Z. Все биты могут быть изменены и прочитаны программно, и все они определяют работу команд ветвления. 

Обязательно должен сохраняться при входе в прерывание и восстанавливаться перед выходом из него! Делается это примерно так:

Timer_int:push R16
          in R16,SREG
          push R16
    ; тут собственно обработка прерывания
          pop R16
          out SREG,R16
          pop R16
          reti

SPL $3D ($5D), SPH  $3E ($5E)  

Два регистра - SPL и SPH - образуют 10-ти битный указатель стека. 

Вообще-то я почти уверен, что понятие "стек" читающего эти строки не пугает. Добавлю только, что стек у AVR растет вниз, указатель декрементируется ПОСЛЕ выполнения команды PUSH. То есть инициализировать указатель стека надо занесением туда адреса последней ячейки SRAM.

ldi R16, lo(RAMEND)
out SPL,R16
ldi R16, hi(RAMEND)
out SPH, R16

Константа RAMEND обычно определена в .inc файле соответствующего процессора. Надо еще отметить, что в некоторых МК, размер SRAM которых менее 256 байт, указатель стека не имеет старшего байта.

GIMSK $3B ($5B), GIFR  $3A ($5A)  

 Эти два регистра предназначены для управления внешними прерываниями. Внешнее прерывание программы вызывается фронтом, спадом или уровнем на выводе INTx МК в том случае, если установлен общий флаг разрешения прерывания I в SREG и соответствующий флаг INTx в регистре GIMSK.

Если ваша программа работает с прерываниями, то регистр GIFR вам, в общем-то, и не нужен. В нем устанавливается в "1" флаг INTFx в том случае, если прерывание запрещено, а ситуация возникновения прерывания имеется. Программа может опрашивать эти флаги и предпринимать какие-либо действия.

Следует только помнить, что флаги в регистре GIFR автоматически сбрасываются при обработке прерывания, если же прерывания запрещены - то сбросить их программно можно, записывая в соответствующий бит "1" (нелогично? но именно так и есть)

Если вы знаете, что такое прерывания - далее можете не читать. А я попробую простым языком изложить суть прерываний. На мой взгляд, это очень важная тема, без понимания механизма прерываний построить эффективную realtime программу для МК просто невозможно.

Допустим, нужно создать на МК устройство, которое должно выполнять какое-нибудь достаточно сложное вычисление (занимающее, например, 0,1 секунды) и в то же время переключать один из своих pin-ов с частотой 1 кГц. Как это сделать?

Ну, время считать будет таймер - это естественно. Настроили таймер так, чтобы он через 1 мс выставлял  флажок переполнения. А дальше? Вставлять в программу через 10 команд проверку этого флага? Это уже не программа будет, а сыр с дырками. Да к тому же 10 команд можно написать таких, что выполняться они будут и в течение секунды. Как быть?

А вот тут-то и надо использовать прерывание. Таймер у нас настроен на переполнение через 1 мс, так разрешим прерывание переполнения. Кроме этого. должен быть установлен флаг общего разрешения прерываний. Что же произойдет при переполнении таймера?

Закончив выполнение текущей команды, МК сохранит значение счетчика команд в стеке, после чего выполнение передастся на соответствующий вектор прерывания, а проще - конкретный адрес, закрепленный за прерыванием. См. таблицу векторов для МК 8535

Таблица векторов построена так, чтобы по соответствующему адресу можно было поставить одну команду - RJMP обработчик. Следовательно, завершив (прервав!) выполнение текущей программы, МК передает управление на процедуру обработки прерывания. Требования к ней следующие:

Процедура обработки прерывания должна заканчиваться командой RETI - возврат из прерывания. По этой команде МК восстановит из стека счетчик команд, сохраненный там после возникновения прерывания, то есть вернется к выполнению основной программы.

В начале процедуры обработки прерывания нужно сохранить в стеке SREG и изменяемые регистры. Так, если в процедуре обработки мы изменяем R16, то она должна начинаться с команд:

push R16
in R16, SREG
push R16

и заканчиваться командами:

pop R16
out SREG,R16
pop R16
RETI

В этом случае основная программа просто ничего не заметит, и требуемое действие будет выполнено именно тогда, когда возник запрос, независимо от того что делала в это время основная программа. 

Адрес
вектора

Описание вектора прерывания

$000

Старт программы после сброса, включения питания или сброса по сторожевому таймеру

$001

Внешнее прерывание 0 (pin INT0)

$002

Внешнее прерывание 1 (pin INT1)

$003

Таймер 2 - сравнение

$004

Таймер 2 - переполнение

$005

Таймер 1 - захват

$006

Таймер 1 - сравнение A

$007

Таймер 1 - сравнение B

$008

Таймер 1 - переполнение

$009

Таймер 0 - переполнение

$00A

Прерывание SPI - цикл обмена завершен

$00B

Прерыванние USART - принят байт

$00C

Прерыванние USART - регистр данных пуст

$00D

Прерыванние USART - передача закончена

$00E

АЦП - преобразование завершено

$00F

EEPROM - готово

$010

Аналоговый компаратор

Таблица векторов для МК AT90s8535

ВНИМАНИЕ! Несохранение чего-либо, что изменяется в процедуре обработки прерывания и используется в основной программе, приведет к неверной ее работе или вообще ее краху. Представьте себе ситуацию, когда в основной программе выполняется, допустим, вычитание числа 10 из регистра R3. R3 - это регистр "младший", эти регистры не работают с непосредственным операндом, то есть нельзя написать

subi R3, 10

В этом случае нужно написать

ldi R16, 10
sub R3, R16

Ничего тут не поделаешь - так уж устроен AVR. У него много тонкостей, на которых по неопытности можно понабивать шишек, смотри тут подробнее. Но мы отвлеклись. Представьте себе , что прерывание возникает между этими двумя командами (на то оно и прерывание, чтобы возникать когда угодно!) и в процедуре обработки прерывания мы изменим содержимое региcтра R16. Думаю, ясно, что результат работы программы после этого непредсказуем.

В заключение надо упомянуть, что время обработки прерывания не должно быть больше, чем период  его возникновения, иначе основная программа просто не будет выполняться

TIMSK $39 ($59), TIFR  $38 ($58)  

 Эти два регистра предназначены для управления прерываниями от таймеров. У МК 8535 три таймера, таймер 0 может генерировать только прерывание по переполнению счетчика, таймер 2 - по переполнению счетчика и по совпадению с регистром сравнения, а таймер 1 - целых четыре: по переполнению, по сравнению(2) и по сигналу захвата. Подробнее - см. в описании таймеров.

Так вот в регистре TIMSK установкой соответствующего бита в "1" прерывание разрещается (не забывайте по общий флаг разрешения прерывания в SREG!). Если прерывание не разрешено, а событие возникновения этого прерывания произошло, то соответствующий бит (по расположению совпадает с TIMSK) будет установлен в регистре TIFR - регистре флагов прерываний таймеров. Программа МК может эти флаги анализировать, чтобы сбросить - надо записать туда "1".

MCUCR $35 ($55)

 

 

 

 

MCUCR.6

SE

Разрешение SLEEP режима

MCUCR.5

SM1

Выбор SLEEP режима (11=Power Ssave, 10=Power Down, 00=Idle). Подробнее о SLEEP режимах см. ниже

MCUCR.4

SM0

MCUCR.3

ISC11

Выбор режима прерывания INT1 (00-низкий уровень, 10-спад, 11-фронт)

MCUCR.2

ISC10

MCUCR.1

ISC01

То же - прерывания INT0

MCUCR.0

ISC00

 

Внешнее прерывание вызывается при изменении состояния pin-ов INT1 (PORTD.3) и INT0 (PORTD.2). Спад - прерывание вызывается при переходе pin-а из состояния лог. "1" в "0", фронт - при переходе из "0" в "1". Низкий уровень - означает, что запрос на прерывание будет устанавливаться постоянно, пока соответствующий pin находится в лог. "0". Сказать честно - никогда таким режимом не пользовался, он нужен только для вывода МК из режима SLEEP power down - там прерывания по фронту и спаду не работают. 

В новых МК (Tiny, Mega) добавлен режим 01 - прерывание по любому изменению состояния pin-а, то есть и по фронту, и по спаду. Вот это режим точно полезен.



Режимы SLEEP

В МК AT90s8535 предусмотрены три режима энергосбережения, или SLEEP-режима. В этот режим МК входит по специальной команде SLEEP, в том случае, когда этот режим разрешен в регистре MCUCR (см. выше).

Idle - в этом режиме вся периферия продолжает функционировать, останавливается только сам процессор. В обычный режим МК выходит по любому прерыванию (естественно, они должны быть разрешены!) и по сбросу.

Power Down - останавливается не только процессор, но и тактовый генератор. Вернуть МК в нормальный режим можно внешним сбросом, сбросом сторожевого таймера или внешним прерыванием по уровню. При этом надо иметь в виду, что на "раскачку" тактового генератора требуется время!

Power Save - аналогично Power Down, дополнительно продолжает работать таймер 2 - если он сконфигурирован на работу в асинхронном режиме (работает не от системного тактового генератора, а от TOSC1),  и МК в нормальный режим возвращают (кроме сброса) прерывания этого таймера.

MCUSR  $34 ($54)

Регистр статуса MCUSR нужен для определения причины сброса процессора. В нем определены только два бита - PORF (MCUSR.0) и EXTRF (MCUSR.1). В зависимости от того, из-за чего произошел сброс (говоря иначе - пуск программы с 0 адреса) - биты MCUSR будут установлены следующим образом:

Установлен в "1" бит PORF - по сути, это и не сброс вовсе, а старт программы по включению питания. Но так как при включении питания программа стартует с вектора 0 - считается сбросом по включению питания.

Установлен в "1" бит EXTRF - сброс произошел из-за подачи низкого уровня на pin Reset

Есть еще одна возможная причина сброса - сторожевой таймер, если он включен. В этом случае биты PORF и EXTRF  не изменяются.

Следовательно, если в программе нужно определять режим сброса - то после анализа этих бит их просто нужно установить в "0". Тогда сброс по сторожевому таймеру можно будет определить по отсутствию "1" в вышеописанных битах

TCCR0 $33 ($53), TCNT0  $32 ($52)   >>Следующий

Таймер 0 - самый простой из таймеров, присутствует практически во всех МК AVR. В своем составе он имеет 8-ми разрядный счетчик TCNT0 и регистр управления TCCR0. 

TCCR0 - определяет скорость и режим счета таймера. В него записывается число от 0 до 7 (3 разряда):

0

Таймер остановлен (состояние по сбросу)

1

На вход таймера подается тактовая частота МК ( TCK ). Так, если МК работает с кварцем 8 МГц, то на вход таймера поступают импульсы с частотой 8 МГц (период 125 нс)

2

На вход таймера подается TCK / 8

3

На вход таймера подается TCK / 64

4

На вход таймера подается TCK / 256

5

На вход таймера подается TCK / 1024

6

На вход таймера подается сигнал с pin-а T0, таймер переключается по спаду сигнала (переход из лог. "1" в лог. "0").

7

То же - по фронту. Частота внешнего сигнала должна быть меньше TCK!

 При переполнении (переход из состояния 0xFF в 0x00) счетчика таймера устанафливается флаг TOV0 в регистре TIFR, и если разрешено прерывание (установлен TOIE0 в TIMSK и I в SREG - будет выполнено прерывание по вектору 0x009. Никаких других "фишек" таймер 0 не имеет.

ТАЙМЕР1   >>Следующий

Таймер 1 - наиболее сложный таймер. Счетчик у него 16-ти разрядный,  доступ к нему со стороны процессора осуществляется через два регистра - TCNT1L и TCNT1H. Кроме него, таймер 1 содержит еще три 16-ти разрядных регистра - OCR1A, OCR1B и ICR1( Кстати, обратите внимание на порядок их чтения и записи!). Но не будем торопиться и начнем с регистров управления.

Биты
TCCR1A


Название

Описание

7

COM1A1

Пары бит COM1A и COM1B определяют поведение пинов OC1A и OC1B соответственно при совпадении регистров TCNT и OCR1x:
00 - отключено
01 - переключение
10 - установка в "0"
11 - установка в "1"

6

COM1A0

5

COM1B1

4

COM1B0

биты 2,3 не используются

1

PWM11

Эта пара бит определяет режим работы ШИМ.
00 - ШИМ не используется,
01 - ШИМ 8 разрядов,
10 - ШИМ 9 разрядов,
11 - ШИМ 10 разрядов.

0

PWM10

 

Биты
TCCR1B


Название

Описание

7

ICNC1




6

ICES1




5

не используются, всегда читаются как 0

4

3

CTC1




2,1,0

CS12:CS11:CS10

0:0:0

Таймер остановлен (состояние по сбросу)

0:0:1

На вход таймера подается тактовая частота МК ( TCK ). Так, если МК работает с кварцем 8 МГц, то на вход таймера поступают импульсы с частотой 8 МГц (период 125 нс)

0:1:0

На вход таймера подается TCK / 8

0:1:1

На вход таймера подается TCK / 64

1:0:0

На вход таймера подается TCK / 256

1:0:1

На вход таймера подается TCK / 1024

1:1:0

На вход таймера подается сигнал с pin-а T1, таймер переключается по спаду сигнала (переход из лог. "1" в лог. "0").

1:1:1

То же - по фронту. Частота внешнего сигнала должна быть меньше TCK!
1   2   3   4   5   6   7   8   9   ...   12

Похожие:

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Проектно-образовательная деятельность по формированию у детей навыков безопасного поведения на улицах и дорогах города
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Цель: Создание условий для формирования у школьников устойчивых навыков безопасного поведения на улицах и дорогах
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
«Организация воспитательно- образовательного процесса по формированию и развитию у дошкольников умений и навыков безопасного поведения...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Цель: формировать у учащихся устойчивые навыки безопасного поведения на улицах и дорогах, способствующие сокращению количества дорожно-...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Конечно, главная роль в привитии навыков безопасного поведения на проезжей части отводится родителям. Но я считаю, что процесс воспитания...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Поэтому очень важно воспитывать у детей чувство дисциплинированности и организованности, чтобы соблюдение правил безопасного поведения...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Всероссийский конкур сочинений «Пусть помнит мир спасённый» (проводит газета «Добрая дорога детства»)
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Поэтому очень важно воспиты­вать у детей чувство дисциплинированности, добиваться, чтобы соблюдение правил безопасного поведения...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...



Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск