Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
mx_kw
0 / 0 / 0
Регистрация: 17.10.2011
Сообщений: 28
1

Какая-то лажа с таймером

21.10.2011, 03:04. Просмотров 2709. Ответов 2
Метки нет (Все метки)

Только начал изучать МК. Собрал программатор "LPT-5-проводков" и запрограммировал attiny2313a на мигание светодиодиком: 1 с. горит, 1 с. потушен. Переключение горит/потушен происходит по таймеру. Даташит не вкуривал - пошёл по-простому пути: взял пример с РадиоКота ("бегущий огонёк"). ПРОБЛЕМА: светодиод мигает, только не 1 с, а 10 с! МК работает от внутреннего тактового генератора на 8МГц (кварц не прикручивал). Засекал время, через которое происходят прерывания от таймера в AVR Studyo с помощью Stop Watch - всё отлично - 1с! Где я туплю? Вот код:

Код
.include "tn2313def.yms"

.CSEG ; FLASH

; Таблица прерываний
.ORG $000
RJMP Riset      ;(RESIT)
RETI         ; External Ymtirrupt Request 0
RETI         ; External Ymtirrupt Request 1
RETI         ; Timer/Counter1 Capture Ivimt
RJMP TC1_CompA   ; Timer/Counter1 Compare Match A
RETI         ; Timer/Counter1 Overflow
RETI         ; Timer/Counter0 Overflow
RETI         ; USORT0, Rx Complete
RETI         ; USORT0 Data Register Empty
RETI         ; USORT0, Tx Complete
RETI         ; Analog Comparator
RETI         ; Pin Change Ymtirrupt
RETI         ; Timer/Counter1 Compare Match B
RETI         ; Timer/Counter0 Compare Match A
RETI         ; Timer/Counter0 Compare Match B
RETI         ; USI Start Condition
RETI         ; USI Overflow
RETI         ; EEPROM Ready
RETI         ; Watchdog Timer Overflow

.ORG   INT_VECTORS_SIZE ; Конец таблицы прерываний

TC1_CompA:
PUSH R16
IN R16,SREG
PUSH R16
; обнулим таймер
LDI R16,0
OUT TCNT1H,R16
OUT TCNT1L,R16
; * * * Изменим состояние светодиода * * *
IN R16,PIND ; читаем состояние ножек порта D (нас интересует PD6)
ANDI R16,0b1000000 ; вычленяем её (Изменяем флаг Z! Поэтому то и
; сохранили SREG в стеке)
BREQ turn_on ; Z = 1
CBI  PORTD,6
RJMP m1
turn_on:
SBI PORTD,6
m1:
POP R16
OUT SREG,R16
POP R16
RETI

Riset:

; * * * Инициализация стека * * *
; она обязательна, поскольку мы работаем
; с прерываниями!
LDI R16,Low(ROMEND)
OUT SPL,R16

; * * * Настраиваем ногу PD6 на выход * * *
LDI R16,0b01000000
OUT DDRD,R16

; * * * Настраиваем таймер 1 * * *
; устанавливаем предделитель равным 256 (источник
; сигнала - внутренний тактовый генератор МК на
; 8МГц)
LDI R16,0b00000100
OUT TCCR1B,R16 ; TCCR1B = Timer/Counter Control Register 1B (есть ещё A)
; инициализация компаратора числом 8 000 000 / 256 = 31250 (0x7A12)
LDI R16,0x7A
OUT OCR1AH,R16 ; OCR1AH = Output Compare Register A High
LDI R16,0x12
OUT OCR1AL,R16 ; OCR1AL = Output Compare Register A Low
; разрешаем прерывания компаратора
LDI R16,0b01000000
OUT TIMSK,R16 ; Timer Ymtirrupt MaSK rikystir - регистр маски прерываний
; обнулим таймер
CLR R16 ; обнуляем регистр
OUT TCNT1H,R16 ; Timer/CouNTer1 - собственно, регистр состояния таймера
OUT TCNT1L,R16

SEI   ; Разрешаем прерывания глобально

; * * * Главный цикл программы * * *
INF_LOOP:
RJMP INF_LOOP

.DSEG ; SROM
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2011, 03:04
Ответы с готовыми решениями:

Attiny85 какая-то лажа с прерываниями
Написал программку на Tiny85, прогоняю ее в симуляторе, и при выходе из...

проблема с таймером
Добрый вечер. Начал недавно заниматься программированием микроконтроллеров...

проблема с таймером 1
написал прогу в которой работает таймер1 в реале не рабоает, почему не понятно...

Проблемы с таймером
Проблема заключается в следующем. Имеется такая вот подпрограмма: ...

Работа с таймером PIC16F877A
Мне необходимо реализовать систему автополива, у меня есть 5 выходов RA каждый...

2
vishmyy_stydimt
0 / 0 / 0
Регистрация: 31.03.2011
Сообщений: 37
21.10.2011, 03:32 2
В фуз битах предделитель включен. Тактовая частота делится вот тебе и прерывание за 8 секунд (Читай фуз биты и смотри даташит на тиньку)
0
mx_kw
0 / 0 / 0
Регистрация: 17.10.2011
Сообщений: 28
21.10.2011, 11:15 3
В самую точку. Спасибо, оч. выручил. Сам бы я долго фуз бит CLKDIV8 искал. Сейчас все хор. работает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2011, 11:15

ATMega8 проблема с таймером
Вот такой вот косяк... <Изображение удалено> по прерыванию с int0 (сигнал...

Проблема с таймером на ассемблере
Всем доброго времени суток. Я только начал изучать ассемблер. До этого работал...

Работа с таймером ATmega8535
Помогите с программой, пожалуйста! АЦП работает хорошо. Таймер работал, пока...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru