Пожалуйста помогите найти ошибку в программе для avr.
Пожалуйста помогите найти ошибку в программе для avr.
По идеи на $0006 программа должна перейти только один раз (по прерыванию), а на деле получается постоянно.
.include "m16def.inc"
.CSEG
rjmp VECT_END
.ORG $0006 ;адрес вектор прерывания по совпадению Т2
rjmp START ;прерывание по совпадению (TIMER2)
VECT_END:
;***** инициализация стека
ldi r19,0x04 ;инициализация указателя стека
out SPH,r19
ldi r19,0x5F
out SPL,r19
;***** инициализация таймера
LDI R19,0b01000001
OUT TCCR2,R19 ; Т2, режим ШИМ, предделитель 1
LDI R20,50
out OCR2, r20 ;Число для сравнения
LDI R21,0b10000000
OUT TIMSK, R21 ;разрешение прерывания по совпадению таймера Т2
sei ;разрешение глобальных прерываний
LOOP:
RJMP LOOP
START:
LDI R16,10
.include "m16def.inc"
.CSEG
rjmp VECT_END
.ORG $0006 ;адрес вектор прерывания по совпадению Т2
rjmp START ;прерывание по совпадению (TIMER2)
VECT_END:
;***** инициализация стека
ldi r19,0x04 ;инициализация указателя стека
out SPH,r19
ldi r19,0x5F
out SPL,r19
;***** инициализация таймера
LDI R19,0b01000001
OUT TCCR2,R19 ; Т2, режим ШИМ, предделитель 1
LDI R20,50
out OCR2, r20 ;Число для сравнения
LDI R21,0b10000000
OUT TIMSK, R21 ;разрешение прерывания по совпадению таймера Т2
sei ;разрешение глобальных прерываний
LOOP:
RJMP LOOP
START:
LDI R16,10
- Реклама
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Пожалуйста помогите найти ошибку в программе для avr.
Иииииии? Всё???astrgan писал(а): START:
LDI R16,10
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Пожалуйста помогите найти ошибку в программе для avr.
да.
Ну конечно недоделана, и вообще учебная программа.
Ну конечно недоделана, и вообще учебная программа.
Re: Пожалуйста помогите найти ошибку в программе для avr.
Почему-то на метку START когда нужно не переходит.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Пожалуйста помогите найти ошибку в программе для avr.
ППЦ.
При наступлении прерывания МК прыгает на метку START, делает там LDI R16,10 и... продолжает идти дальше. А дальше у чистого МК находятся одни NOP'ы до конца флэша.
При наступлении прерывания МК прыгает на метку START, делает там LDI R16,10 и... продолжает идти дальше. А дальше у чистого МК находятся одни NOP'ы до конца флэша.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Реклама
Re: Пожалуйста помогите найти ошибку в программе для avr.
Что тут такого?
Когда эта часть заработает( прыгнит когда надо), буду дописывать.
Когда эта часть заработает( прыгнит когда надо), буду дописывать.
Re: Пожалуйста помогите найти ошибку в программе для avr.
Ну пусть будет так:
.include "m16def.inc"
.CSEG
rjmp VECT_END
.ORG $0006 ;адрес вектор прерывания по совпадению Т2
rjmp START ;прерывание по совпадению (TIMER2)
VECT_END:
;***** инициализация стека
ldi r19,0x04 ;инициализация указателя стека
out SPH,r19
ldi r19,0x5F
out SPL,r19
;***** инициализация таймера
LDI R19,0b01000001
OUT TCCR2,R19 ; Т2, режим ШИМ, предделитель 1
LDI R20,50
out OCR2, r20 ;Число для сравнения
LDI R21,0b10000000
OUT TIMSK, R21 ;разрешение прерывания по совпадению таймера Т2
sei ;разрешение глобальных прерываний
LOOP:
RJMP LOOP
START:
LDI R16,10
RJMP LOOP
.include "m16def.inc"
.CSEG
rjmp VECT_END
.ORG $0006 ;адрес вектор прерывания по совпадению Т2
rjmp START ;прерывание по совпадению (TIMER2)
VECT_END:
;***** инициализация стека
ldi r19,0x04 ;инициализация указателя стека
out SPH,r19
ldi r19,0x5F
out SPL,r19
;***** инициализация таймера
LDI R19,0b01000001
OUT TCCR2,R19 ; Т2, режим ШИМ, предделитель 1
LDI R20,50
out OCR2, r20 ;Число для сравнения
LDI R21,0b10000000
OUT TIMSK, R21 ;разрешение прерывания по совпадению таймера Т2
sei ;разрешение глобальных прерываний
LOOP:
RJMP LOOP
START:
LDI R16,10
RJMP LOOP
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Пожалуйста помогите найти ошибку в программе для avr.
Код: Выделить всё
START:
LDI R16,10
RJMP LOOP
Код: Выделить всё
START:
LDI R16,10
RETI
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Пожалуйста помогите найти ошибку в программе для avr.
А в чем отлаживаете? Как это пролазит?:
Код: Выделить всё
sei ;разрешение глобальных прерыванийDocendo discimus
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Пожалуйста помогите найти ошибку в программе для avr.
ППЦastrgan писал(а):START:
LDI R16,10
RJMP LOOP
Код: Выделить всё
START:
LDI R16,10
RETI[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Пожалуйста помогите найти ошибку в программе для avr.
Всем БОЛЬШОЕ спасибо!)
Re: Пожалуйста помогите найти ошибку в программе для avr.
Извиняюсь что вопросы глупые но всеже, как потом изменить ocr?
Код: Выделить всё
.include "m16def.inc"
.CSEG
rjmp VECT_END
.ORG $0006 ;адрес вектор прерывания по совпадению Т2
rjmp START ;прерывание по совпадению (TIMER2)
VECT_END:
;***** инициализация стека
ldi r19,0x04 ;инициализация указателя стека
out SPH,r19
ldi r19,0x5F
out SPL,r19
ldi r17, 0b11111111 ;инициализация порта на вывод
out DDRA, r17
MAS: .DB 0x1A,0x2A,0x3A,0x4A
LDI ZL, low(MAS*2)
LDI ZH, High(MAS*2)
LDI R22,0b000000001
;***** инициализация таймера
; Т2, режим ШИМ, предделитель 1
LDI R16,10
out OCR2, r16 ;Число для сравнения
LDI R21,0b10000000
LDI R19,0b01000001
OUT TCCR2,R19
OUT TIMSK, R21 ;разрешение прерывания по совпадению таймера Т2
sei ;разрешение глобальных прерываний
LOOP:
RJMP LOOP
START:
CLI
LPM R16,Z+
out OCR2, r16
com R22
ANDI R22,0b00000001
OUT PORTA,R22
sei
RETI
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Пожалуйста помогите найти ошибку в программе для avr.
Видимо, остановив таймер?astrgan писал(а):Извиняюсь что вопросы глупые но всеже, как потом изменить ocr?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Пожалуйста помогите найти ошибку в программе для avr.
Пожалуйсто подскажите еще раз.
Почемуто не срабатывает прерывание?
Почемуто не срабатывает прерывание?
Код: Выделить всё
.include "m128def.inc"
.CSEG
RJMP VECT_END
.ORG $0018 ;Вектор прерывания таймера T1 при совпадении
RJMP SINOUT ;Адрес подпрограммы обработки прерывания
VECT_END:
;***** инициализация стека
ldi r19,0x04
out SPH,r19
ldi r19,0x5F
out SPL,r19
;***** инициализация таймера
LDI r19,0
OUT OCR1AH, r19 ;в регистр совпадений таймера T1
LDI r19, 50
OUT OCR1AL, r19 ;в регистр совпадений таймера T1
LDI R16,0b00000001
OUT TCCR1A,R16
LDI R17,0b00001001
OUT TCCR1B,R17
LDI R18, 0b00010000
OUT TIMSK,R18
SEI
LOOP:
RJMP loop
SINOUT:
LDI R22,10
RETI
Re: Пожалуйста помогите найти ошибку в программе для avr.
Вы установили режим Fast PWM, 8-bit
Re: Пожалуйста помогите найти ошибку в программе для avr.
А какой нужен?
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Пожалуйста помогите найти ошибку в программе для avr.
На каком основании сделан вывод, что прерывание не срабатывает? Все работает.
Re: Пожалуйста помогите найти ошибку в программе для avr.
Смотря что Вы хотите сброс при совпадении или PWMastrgan писал(а):А какой нужен?
Re: Пожалуйста помогите найти ошибку в программе для avr.
ILYAUL
Нужен PWM.
Engineer_Keen
На AVR Studio 4 симулирую (DEBUG), TCNT1 доходит до значения в OCR и нечего не происходит(кажется иногда он даже перепрыгивает это число).
Нужен PWM.
Engineer_Keen
На AVR Studio 4 симулирую (DEBUG), TCNT1 доходит до значения в OCR и нечего не происходит(кажется иногда он даже перепрыгивает это число).
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Пожалуйста помогите найти ошибку в программе для avr.
Если код написан в соответствии с даташитом, но в симуляторе почему-то не работает очевидный кусок, значит кривой симулятор. Нужен либо другой симулятор, либо реальный контроллер. Связка 2х симуляторов позволяет отлавливать баги друг друга. Проверял в протеусе. Переход на RJMP SINOUT происходит раз в 256us (Fclk=1МГц).astrgan писал(а):На AVR Studio 4 симулирую (DEBUG), TCNT1 доходит до значения в OCR и нечего не происходит.
А в этом нет ничего удивительного, TCNT1 и должен в этом режиме считать по кругу 0-65535 и прерывание по совпадению будет всегда раз в 256мкс, независимо от значения OCR.astrgan писал(а):(кажется иногда он даже перепрыгивает это число)


