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

gudsa

Members
  • Постов

    1
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Москва

Электроника

  • Стаж в электронике
    Более 20 лет
  • Сфера радиоэлектроники
    МК
  • Оборудование
    Много

Достижения gudsa

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Помогите пожалуйста. 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
×
×
  • Создать...