Помогите пожалуйста. 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