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

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


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

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

 

Читать дальше

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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

Загрузка...
×
×
  • Создать...