Перейти к содержанию

Нужна помощь найти ошибку прошивки


gudsa

Рекомендуемые сообщения

Помогите пожалуйста. 3 дня ковырялся в прошивке для МК Atmega8A. В Atmel Studio все нормально, пошагово проходит всю программу как положено, со всеми реакциями. Схема планировалась как таймер задержки с реакцией на кнопку при каждом нажатии в течении 7 сек. Если в течении 7 сек кнопка не нажималась то потом отсчитывает 1, 2, 3-6 часов ( в зависимости сколько раз была нажата кнопка). Сделано для часового кварца. Загоняю прошивку в МК реакция на кнопку есть 7 сек отсчитывает, а потом все слетает и похоже срывается в бесконечный цикл. Замучался уже ковыряться, ткните пож. в ошибку.

Вот сама прошивка.

; Taimer_zaderjki.asm
;
; Created: 04.06.2018 11:58:36
; Author : Kiril
;
;start:
; inc r16
; rjmp start

;
; Amega8.asm
;
.include "m8adef.inc" ; открыть файл описаний

.cseg
.org 0
; ++++++++++++++++++++++++++++++++++++переопределение векторов прерываний

rjmp reset ;вектора прерываний
nop ;rjmp INT0;External Interrupt Request 0
nop; rjmp INT1; External Interrupt Request 1
rjmp zdjk; OC2; Timer/Counter2 Compare Match
nop ;rjmp OVF; Timer/Counter2 Overflow
nop ;rjmp ICP1; Timer/Counter1 Capture Event
rjmp zdjk; OC1A; Timer/Counter1 Compare Match A
nop ;stop2; OC1B; Timer/Counter1 Compare Match B;
nop; OVF1; Timer/Counter1 Overflow
nop ;rjmp OVF0; Timer/Counter0 Overflow
nop ;rjmp SPI; Serial Transfer Complete
nop ;rjmp URXC; USART, Rx Complete
nop ;rjmp UDRE; USART Data Register Empty
nop ;rjmp UTXC; USART, Tx Complete
nop ;rjmp ADCC; ADC Conversion Complete
nop ;rjmp ERDY; EEPROM Ready
nop ;rjmp ACI; Analog Comparator
nop ;rjmp TWI; 2-wire Serial Interface
nop ;rjmp SPMR; Store Program Memory Ready

reti

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

reset: ldi r16,high(ramend)
out sph,r16
ldi r16,low(ramend)
out spl,r16

ldi r17,0b11111111;
out portb,r17;
out ddrd,r17;

ldi r17,0b00000001;
out ddrb,r17;

ldi r17,0b00000000;
.equ ddel=255 ;


; ++++++++++++++++++++++++++++++++++++= начало циклов проверки сост кнопок замыкающихся на 0


.def rin=r18;
.def loop=r25
; ldi rin,0b11111111;
nop

ldi r20,0b00000000

ldi r19,0b00000101;
out tccr1b,r19;
ldi r19,0b00000000;
out tccr1a,r19;
ldi r19,0b00000111;
out tccr2,r19;
;
; ++++++++++++++++++++++++++++++++ проверка сост кнопки
;
sw: ldi r19,0b00000001 ;
out portd,r19 ;

; первое нажат кнопки

in rin,pinb;
sbrc rin,1;
rjmp sw;
rcall wait ;
ldi r19,0b00000010 ;
out portd,r19 ;
ldi r22,1;
rcall j1 ;
rcall z7 ;

; второе нажатие кнопки

rcall wait ;
ldi r19,0b00000100 ;
out portd,r19 ;
ldi r22,2;
rcall j1 ;
rcall z7 ;


; третье нажатие кнопки

rcall wait ;
ldi r19,0b00001000 ;
out portd,r19 ;
ldi r22,3;
rcall j1
rcall z7


; четвертое нажатие кнопки

rcall wait
ldi r19,0b00010000 ;
out portd,r19 ;
ldi r22,4;
rcall j1 ;
rcall z7 ;

; пятое нажатие кнопки

rcall wait ;
ldi r19,0b00100000 ;
out portd,r19 ;
ldi r22,5;
rcall j1 ;
rcall z7 ;


; шестое нажатие кнопки

rcall wait ;
ldi r19,0b00001000 ;
out portd,r19 ;
ldi r22,6;
rcall j1 ;
rcall z7 ;

rjmp sw;



; определение отсчета 30 мин

schet: ; ++++++++++++++++++++++++++++ определение маски прерывания ++++++++++++++++++
ldi r20,0b00010000;
out timsk,r20 ;
sei

out tcnt1h,r17;
out tcnt1l,r17;

.equ kdel=200 ;(ввести 57600 для полчаса)
inc r23;
ldi r19,high(kdel);
out ocr1ah,r19;
ldi r19,low(kdel);
out ocr1al,r19;
cyc: rjmp cyc ;

zdjk:
cli
cpi r22,1
breq s1
cpi r22,2
breq s2
cpi r22,3
breq s3
cpi r22,4
breq s4
cpi r22,5
breq s5
cpi r22,6
breq s6

s1:
cpi r23,2
breq end
rjmp schet
s2:
cpi r23,4
breq end
rjmp schet
s3:
cpi r23,6
breq end
rjmp schet

s4:
cpi r23,8
breq end
rjmp schet

s5:
cpi r23,10
breq end
rjmp schet

s6:
cpi r23,12
breq end
rjmp schet

; подпрограмма антидребезга
;********************************************************************************************************

wait: push loop
ldi loop,5 ;200
wt1: dec loop
brne wt1
pop loop
ret
;*********************************************************************************************************

; подпрограмма ожидание отжатия кнопки
;*********************************************************************************************************

j1: in rin,pinb;
sbrs r18,1
rjmp j1
ret
;**********************************************************************************************************


; подпрограмма отсчета 7 сек
;******************************************************************************************************

z7: ;
ldi r20,0b10000000;
out timsk,r20 ;
ldi r21,ddel ;
out ocr2,r21 ;
out tcnt2,r17;
sei
cz0: in rin,pinb;
sbrc rin,1;
rjmp cz0;
cli
ldi r20,0b00000000;
out timsk,r20 ;
ret
;************************************************************************************************
end:
cbi portb,0;

ldi r19,0b10000000 ;
out portd,r19 ;
rjmp end

nop

; end1: sbi portb,0 ;
; nop
; nop
; rjmp end1

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

У Вас два таймера вызывают один и тот же обработчик прерывания. Это происходит без инициализации счетных регистров. Возможно Ваша программа, в таком случае, вываливается "на большой круг".

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...