реклама на сайте
подробности

 
 
> Помогите новичку с таймером на Меге16, в чем моя ошибка?
DimaSPB
сообщение Dec 1 2007, 18:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 22-08-07
Пользователь №: 29 972



Я - любитель и только начал разбираться с Мегой16. Глядя в книжки и даташит написал учебную программу, сигнализирующую переполнение таймера 1 в нормальном режиме хотя бы один раз. Ниже прилагаю код. Увы, эффекта нет((( Ломаю голову уже 16 часов, сил больше нет...
Прошу помощи! В чем ошибка???

; АТМега16
; Учебная программа работы с таймером 1 в нормальном режиме
; Первое прерывание по любому событию таймера 1 зажигает светодиод

.include "m16def.inc" ; Присоединение файла описаний
.list ; Включение листинга

.def temp = r16 ; Определение главного рабочего регистра

;------------------------- Вектора прерывания
rjmp RESET
reti ;rjmp Прерывание 1
reti ;rjmp Прерывание 2
reti ;rjmp Прерывание 3
reti ;rjmp Прерывание 4
rjmp TIM1 ;Прерывание 5 Захват таймера-счетчика 1
rjmp TIM1 ;Прерывание 6 Совпадение А таймера-счетчика 1
rjmp TIM1 ;Прерывание 7 Совпадение В таймера-счетчика 1
rjmp TIM1 ;Прерывание 8 Переполнение таймера-счетчика 1
reti ;rjmp Прерывание 9
reti ;rjmp Прерывание 10
reti ;rjmp Прерывание 11
reti ;rjmp Прерывание 12
reti ;rjmp Прерывание 13
reti ;rjmp Прерывание 14
reti ;rjmp Прерывание 15
reti ;rjmp Прерывание 16
reti ;rjmp Прерывание 17
reti ;rjmp Прерывание 18
reti ;rjmp Прерывание 19
reti ;rjmp Прерывание 20

RESET:
cli ; общий запрет прерываний

ldi temp, 0x80 ;Выключение компаратора
out ACSR, temp

;-------------------------- Инициализация стека

ldi temp, 0x7F ; Выбор адреса вершины стека
out SPL, temp ; Запись его в регистр стека


;-------------------------- Инициализация портов ВВ
ldi temp, 0xFF ; Запись числа $FF в регистр temp
out DDRB, temp ; Запись этого числа в DDRB (порт PB на вывод)
out PORTB, temp ; Запись то же числа в PORTB (потушить светодиод)

;--------------------------- Инициализация таймера-счетчика 1
out TIMSK, temp ;Разрешение прерываний по любому событию таймеров

ldi temp,0b00000000
out TCCR1A, temp ;Нормальный режим Таймера 1

ldi temp,0b00000011 ;Нормальный режим Таймера 1, Предделитель 1/64
out TCCR1B, temp
;---------------------------

sei ; общее разрешение прерываний

;-------------------------- Основной пустой цикл
main:
nop
rjmp main ; К началу цикла

;-------------------------- Прерывания по таймеру 1
; Если хотя бы раз происходит прерывание, загорается светодиод
TIM1:
ldi temp, 0x00 ; Записываем число $00 в регистр temp
out PORTB, temp ; Записываем число 0x00 в PORTB (включить светодиод)
reti
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DimaSPB
сообщение Dec 2 2007, 07:54
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 22-08-07
Пользователь №: 29 972



Здравствуйте! Спасибо всем за участие!!! beer.gif
Я выспался wassat.gif 1111493779.gif

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

"1) никогда (тем более при отладке) не разрешайте ВСЕХ прерываний - программа улетит куда-нибудь, потом не найдете; 2) если таймер работает в режиме нормала, странно от него ожидать генерации прерываний по захвату и сравнению..."

Как я понимаю, у меня прерывния разрешены только от таймеров. Разве остальные не замкнуты на возврат? Все события от таймера 1 я указал от отчаяния smile3046.gif , чтобы не прозевать чего от таймера rolleyes.gif
Кстати, попутно практический вопрос - если надо использовать только одно прерывание обязательно ли воспроизводить всю таблицу, замыкая ненужные на reti?

В SPH у Меги16 записать FF?

"Вообще хорошо бы у автора спросить - он без всяких прерываний светодиод то зажег?"

Да, зажег. При переносе кода из прерывания:
ldi temp, 0x00 ; Записываем число $00 в регистр temp
out PORTB, temp ; Записываем число 0x00 в PORTB (включить светодиод)

перед основным циклом светодиод зажигается сразу после запуска. Мега стоит на макетке вместе с самодельным аналогом STK200.
К сожалению, я пока не умею работать симуляторами, код делаю в AVR-студии... Там же и эмулировать можно?

Сообщение отредактировал DimaSPB - Dec 2 2007, 07:56
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 06:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016