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

 
 
> Помогите новичку с таймером на Меге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



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 21:26
Рейтинг@Mail.ru


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