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

 
 
> Помогите новичку с таймером на Меге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
Ответов
Leen
сообщение Dec 2 2007, 03:38
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343



Так... Все чудесатее и чудлесатее...
хекс:
Код
:020000020000FC
:1000000014C018951895189518951FC01EC01DC0CE
:100010001CC0189518951895189518951895189549
:1000200018951895189518951895F89400E808B93A
:100030000FE70DBF0FEF07BB08BB09BF00E00FBD07
:1000400003E00EBD78940000FECF00E008BB1895D9
:00000001FF

В самом деле, здесь вроде все в порядке...

Дизасм в аврстудии
Код
11:       rjmp RESET
+00000000:   C014        RJMP    PC+0x0015        Relative jump
12:       reti;rjmp Ïðåðûâàíèå 1
+00000001:   9518        RETI                     Interrupt return
13:       reti;rjmp Ïðåðûâàíèå 2
+00000002:   9518        RETI                     Interrupt return
14:       reti;rjmp Ïðåðûâàíèå 3
+00000003:   9518        RETI                     Interrupt return
15:       reti;rjmp Ïðåðûâàíèå 4
+00000004:   9518        RETI                     Interrupt return
16:       rjmp TIM1;Ïðåðûâàíèå 5 Çàõâàò òàéìåðà-ñ÷åò÷èêà 1
+00000005:   C01F        RJMP    PC+0x0020        Relative jump
17:       rjmp TIM1;Ïðåðûâàíèå 6 Ñîâïàäåíèå À òàéìåðà-ñ÷åò÷èêà 1
+00000006:   C01E        RJMP    PC+0x001F        Relative jump
18:       rjmp TIM1;Ïðåðûâàíèå 7 Ñîâïàäåíèå  òàéìåðà-ñ÷åò÷èêà 1
+00000007:   C01D        RJMP    PC+0x001E        Relative jump
19:       rjmp TIM1; прер. 8 - переп. ТС1
+00000008:   C01C        RJMP    PC+0x001D        Relative jump
20:       reti;rjmp Ïðåðûâàíèå 9
+00000009:   9518        RETI                     Interrupt return
21:       reti;rjmp Ïðåðûâàíèå 10
+0000000A:   9518        RETI                     Interrupt return
22:       reti;rjmp Ïðåðûâàíèå 11
+0000000B:   9518        RETI                     Interrupt return
23:       reti;rjmp Ïðåðûâàíèå 12
+0000000C:   9518        RETI                     Interrupt return
24:       reti;rjmp Ïðåðûâàíèå 13
+0000000D:   9518        RETI                     Interrupt return
25:       reti;rjmp Ïðåðûâàíèå 14
+0000000E:   9518        RETI                     Interrupt return
26:       reti;rjmp Ïðåðûâàíèå 15
+0000000F:   9518        RETI                     Interrupt return
27:       reti;rjmp Ïðåðûâàíèå 16
+00000010:   9518        RETI                     Interrupt return//здесь оказываемся по прерыванию
28:       reti;rjmp Ïðåðûâàíèå 17
+00000011:   9518        RETI                     Interrupt return
29:       reti;rjmp Ïðåðûâàíèå 18
+00000012:   9518        RETI                     Interrupt return
30:       reti;rjmp Ïðåðûâàíèå 19
+00000013:   9518        RETI                     Interrupt return
31:       reti;rjmp Ïðåðûâàíèå 20
+00000014:   9518        RETI                     Interrupt return

Странно... Какие мысли? Кто не прав? Может, студия? Платформу назначил правильно, мега 16, версия студии 4.12.460.
Go to the top of the page
 
+Quote Post



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

 


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


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