Size: a a a

Ассемблер

2020 December 28

DB

Dima Bat in Ассемблер
почему подпрограмма обработки прерываний может не запускаться?
источник

DR

Dima Richev in Ассемблер
Наверное, у бабы Нины инфаркт
источник

DR

Dima Richev in Ассемблер
Код посмотреть хоть можно? Я не спец, но так хотя бы будет понятно, о чём речь
источник

A

Alex in Ассемблер
Dima Richev
Я не понимаю... Идёт человек на программиста.. А потом не решает задания, списывает лабораторные. Зачем? Зачем туда идти? Чем они руководствуются?
Они идут на эникейщиков и компьютерных мастеров на дом, а их тут думать заставляют
источник

DB

Dima Bat in Ассемблер
Dima Richev
Код посмотреть хоть можно? Я не спец, но так хотя бы будет понятно, о чём речь
/*
* AsmFile2.asm
*
*  Created: 28.12.2020 14:30:13
*   Author: dima
*/
.include "m324Pdef.inc"
; Replace with your application code
; FLASH ===================================================
;Инициализация стэка
   .CSEG    ; Кодовый сегмент
        RJMP   Reset
        RETI           ;2 (INT0) External Interrupt Request 0
        RETI           ;4 (INT1) External Interrupt Request 1
        RETI        ;6 PCINT0 прерывание 0 по изменению состояния выводов
        RETI           ;8(PCINT1) прерывание 1 по изменению состояния выводов
        RETI        ;0А(PCINT2)прерывание 2 по изменению состояния выводов
        RETI           ;0С(WDT)Таймаут сторожевого таймера
        RETI           ;0Е(TIMER2 COMPA) Совпадение А таймера счетчика Т2
        RETI           ;10(TIMER2 COMPB) Совпадение B таймера счетчика Т2
        RETI           ;12(TIMER2 OVF) Timer/Counter0 Overflow
        RETI           ;14(Timer1 CAPT)Захват таймера счетчика T1
        RETI        ;16(Timer1 COMPA)
        RETI           ;18Timer1 COMPB)
    RETI           ;1A(TIMER1 OVF)
        RETI        ;1C(TIMER0 COMPA)
    RETI           ;1E(TIMER0 COMPB)
        RETI           ;20(TIMER0 OVF)
        RETI           ;22(SPI,STC)Передача по SPI завершена
        RETI           ;24(USART RXC)USART прием завершен
        RETI           ;26(USART UDRE)регистр данных USART пуст
        RETI           ;28(USART,TXC) USART передача завершена
    RETI      ;2А(ADC) преобразование АЦП завершено
    RETI      ;2C(EE_RDY)EEPROM готово
    RETI      ;2E(ANA_COMP)Аналоговый компаратор
    RETI      ;30(TWI)Прерывание от модуля TWI
    RETI      ;32(SPM_RDY)Готовость SPM

   .ORG   INT_VECTORS_SIZE        ; Конец таблицы прерывани
Reset:  LDI R16,Low(RAMEND)  ; Инициализация стека
   OUT SPL,R16    ; Обязательно!!!

   LDI R16,High(RAMEND)
   OUT SPH,R16

;===============================================================================================
   RCALL Conf_Time
start:  RCALL delay2    ;вызов подпрограммы ожидания
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   RJMP start      ;зацикливаю программа

;Напишу элементарную процедуры задержки.
;================================================================================================
delay2:    ldi r19,60 ;устанавливаем максимальное число
delay:    dec r19         ;R19-- крутим цикл пока бит Z регистра SREG =1
     nop
     brne delay       ;переход если z=1 длится 63.5 мкС это не дела надо таймер
     ret           ;инструкция возврата из подпрограммы
     
;===============================================================================================      
;Процедура конфигурации таймера на прерывания по переполнения счетчика таймера
;Внимание при использовании этой процедуры старые настройки обнуляются, необходимо переписывать
;под свою задачу
Conf_Time: ;BSET SREG,7       ;установка флага I SREG(глобальное разрешение прерываний)
      sei           ;тоже самое
      ldi r18,1
      sts TIMSK0,r18     ;sts не out т.к. Memory Mapped
                ; TOIE0=1 разрешение прерываний по переполнению счетчика
      ;sbi TIMSK0,TOIE0   ; нельзя использовать регистр memory mapped?
      ldi r18,1;(1<<CS00)   ; режим работы без делителя
      out TCCR0B,r18
      ;sbi TCCR0B,0     неработает
      ret
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Dima Bat
/*
* AsmFile2.asm
*
*  Created: 28.12.2020 14:30:13
*   Author: dima
*/
.include "m324Pdef.inc"
; Replace with your application code
; FLASH ===================================================
;Инициализация стэка
   .CSEG    ; Кодовый сегмент
        RJMP   Reset
        RETI           ;2 (INT0) External Interrupt Request 0
        RETI           ;4 (INT1) External Interrupt Request 1
        RETI        ;6 PCINT0 прерывание 0 по изменению состояния выводов
        RETI           ;8(PCINT1) прерывание 1 по изменению состояния выводов
        RETI        ;0А(PCINT2)прерывание 2 по изменению состояния выводов
        RETI           ;0С(WDT)Таймаут сторожевого таймера
        RETI           ;0Е(TIMER2 COMPA) Совпадение А таймера счетчика Т2
        RETI           ;10(TIMER2 COMPB) Совпадение B таймера счетчика Т2
        RETI           ;12(TIMER2 OVF) Timer/Counter0 Overflow
        RETI           ;14(Timer1 CAPT)Захват таймера счетчика T1
        RETI        ;16(Timer1 COMPA)
        RETI           ;18Timer1 COMPB)
    RETI           ;1A(TIMER1 OVF)
        RETI        ;1C(TIMER0 COMPA)
    RETI           ;1E(TIMER0 COMPB)
        RETI           ;20(TIMER0 OVF)
        RETI           ;22(SPI,STC)Передача по SPI завершена
        RETI           ;24(USART RXC)USART прием завершен
        RETI           ;26(USART UDRE)регистр данных USART пуст
        RETI           ;28(USART,TXC) USART передача завершена
    RETI      ;2А(ADC) преобразование АЦП завершено
    RETI      ;2C(EE_RDY)EEPROM готово
    RETI      ;2E(ANA_COMP)Аналоговый компаратор
    RETI      ;30(TWI)Прерывание от модуля TWI
    RETI      ;32(SPM_RDY)Готовость SPM

   .ORG   INT_VECTORS_SIZE        ; Конец таблицы прерывани
Reset:  LDI R16,Low(RAMEND)  ; Инициализация стека
   OUT SPL,R16    ; Обязательно!!!

   LDI R16,High(RAMEND)
   OUT SPH,R16

;===============================================================================================
   RCALL Conf_Time
start:  RCALL delay2    ;вызов подпрограммы ожидания
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   RJMP start      ;зацикливаю программа

;Напишу элементарную процедуры задержки.
;================================================================================================
delay2:    ldi r19,60 ;устанавливаем максимальное число
delay:    dec r19         ;R19-- крутим цикл пока бит Z регистра SREG =1
     nop
     brne delay       ;переход если z=1 длится 63.5 мкС это не дела надо таймер
     ret           ;инструкция возврата из подпрограммы
     
;===============================================================================================      
;Процедура конфигурации таймера на прерывания по переполнения счетчика таймера
;Внимание при использовании этой процедуры старые настройки обнуляются, необходимо переписывать
;под свою задачу
Conf_Time: ;BSET SREG,7       ;установка флага I SREG(глобальное разрешение прерываний)
      sei           ;тоже самое
      ldi r18,1
      sts TIMSK0,r18     ;sts не out т.к. Memory Mapped
                ; TOIE0=1 разрешение прерываний по переполнению счетчика
      ;sbi TIMSK0,TOIE0   ; нельзя использовать регистр memory mapped?
      ldi r18,1;(1<<CS00)   ; режим работы без делителя
      out TCCR0B,r18
      ;sbi TCCR0B,0     неработает
      ret
Будь другом, такой длинный код в следующий раз на pastebin или хотя бы в тегах ` (но лучше в пастбин или т.п.).
источник

DB

Dima Bat in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Будь другом, такой длинный код в следующий раз на pastebin или хотя бы в тегах ` (но лучше в пастбин или т.п.).
ок
источник

ST

Saenro T in Ассемблер
Dima Bat
/*
* AsmFile2.asm
*
*  Created: 28.12.2020 14:30:13
*   Author: dima
*/
.include "m324Pdef.inc"
; Replace with your application code
; FLASH ===================================================
;Инициализация стэка
   .CSEG    ; Кодовый сегмент
        RJMP   Reset
        RETI           ;2 (INT0) External Interrupt Request 0
        RETI           ;4 (INT1) External Interrupt Request 1
        RETI        ;6 PCINT0 прерывание 0 по изменению состояния выводов
        RETI           ;8(PCINT1) прерывание 1 по изменению состояния выводов
        RETI        ;0А(PCINT2)прерывание 2 по изменению состояния выводов
        RETI           ;0С(WDT)Таймаут сторожевого таймера
        RETI           ;0Е(TIMER2 COMPA) Совпадение А таймера счетчика Т2
        RETI           ;10(TIMER2 COMPB) Совпадение B таймера счетчика Т2
        RETI           ;12(TIMER2 OVF) Timer/Counter0 Overflow
        RETI           ;14(Timer1 CAPT)Захват таймера счетчика T1
        RETI        ;16(Timer1 COMPA)
        RETI           ;18Timer1 COMPB)
    RETI           ;1A(TIMER1 OVF)
        RETI        ;1C(TIMER0 COMPA)
    RETI           ;1E(TIMER0 COMPB)
        RETI           ;20(TIMER0 OVF)
        RETI           ;22(SPI,STC)Передача по SPI завершена
        RETI           ;24(USART RXC)USART прием завершен
        RETI           ;26(USART UDRE)регистр данных USART пуст
        RETI           ;28(USART,TXC) USART передача завершена
    RETI      ;2А(ADC) преобразование АЦП завершено
    RETI      ;2C(EE_RDY)EEPROM готово
    RETI      ;2E(ANA_COMP)Аналоговый компаратор
    RETI      ;30(TWI)Прерывание от модуля TWI
    RETI      ;32(SPM_RDY)Готовость SPM

   .ORG   INT_VECTORS_SIZE        ; Конец таблицы прерывани
Reset:  LDI R16,Low(RAMEND)  ; Инициализация стека
   OUT SPL,R16    ; Обязательно!!!

   LDI R16,High(RAMEND)
   OUT SPH,R16

;===============================================================================================
   RCALL Conf_Time
start:  RCALL delay2    ;вызов подпрограммы ожидания
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   RJMP start      ;зацикливаю программа

;Напишу элементарную процедуры задержки.
;================================================================================================
delay2:    ldi r19,60 ;устанавливаем максимальное число
delay:    dec r19         ;R19-- крутим цикл пока бит Z регистра SREG =1
     nop
     brne delay       ;переход если z=1 длится 63.5 мкС это не дела надо таймер
     ret           ;инструкция возврата из подпрограммы
     
;===============================================================================================      
;Процедура конфигурации таймера на прерывания по переполнения счетчика таймера
;Внимание при использовании этой процедуры старые настройки обнуляются, необходимо переписывать
;под свою задачу
Conf_Time: ;BSET SREG,7       ;установка флага I SREG(глобальное разрешение прерываний)
      sei           ;тоже самое
      ldi r18,1
      sts TIMSK0,r18     ;sts не out т.к. Memory Mapped
                ; TOIE0=1 разрешение прерываний по переполнению счетчика
      ;sbi TIMSK0,TOIE0   ; нельзя использовать регистр memory mapped?
      ldi r18,1;(1<<CS00)   ; режим работы без делителя
      out TCCR0B,r18
      ;sbi TCCR0B,0     неработает
      ret
Зачем столько RETI? Они же всё равно не юзаются. На их месте лучше полезный код разместить.
источник

DR

Dima Richev in Ассемблер
Dima Bat
/*
* AsmFile2.asm
*
*  Created: 28.12.2020 14:30:13
*   Author: dima
*/
.include "m324Pdef.inc"
; Replace with your application code
; FLASH ===================================================
;Инициализация стэка
   .CSEG    ; Кодовый сегмент
        RJMP   Reset
        RETI           ;2 (INT0) External Interrupt Request 0
        RETI           ;4 (INT1) External Interrupt Request 1
        RETI        ;6 PCINT0 прерывание 0 по изменению состояния выводов
        RETI           ;8(PCINT1) прерывание 1 по изменению состояния выводов
        RETI        ;0А(PCINT2)прерывание 2 по изменению состояния выводов
        RETI           ;0С(WDT)Таймаут сторожевого таймера
        RETI           ;0Е(TIMER2 COMPA) Совпадение А таймера счетчика Т2
        RETI           ;10(TIMER2 COMPB) Совпадение B таймера счетчика Т2
        RETI           ;12(TIMER2 OVF) Timer/Counter0 Overflow
        RETI           ;14(Timer1 CAPT)Захват таймера счетчика T1
        RETI        ;16(Timer1 COMPA)
        RETI           ;18Timer1 COMPB)
    RETI           ;1A(TIMER1 OVF)
        RETI        ;1C(TIMER0 COMPA)
    RETI           ;1E(TIMER0 COMPB)
        RETI           ;20(TIMER0 OVF)
        RETI           ;22(SPI,STC)Передача по SPI завершена
        RETI           ;24(USART RXC)USART прием завершен
        RETI           ;26(USART UDRE)регистр данных USART пуст
        RETI           ;28(USART,TXC) USART передача завершена
    RETI      ;2А(ADC) преобразование АЦП завершено
    RETI      ;2C(EE_RDY)EEPROM готово
    RETI      ;2E(ANA_COMP)Аналоговый компаратор
    RETI      ;30(TWI)Прерывание от модуля TWI
    RETI      ;32(SPM_RDY)Готовость SPM

   .ORG   INT_VECTORS_SIZE        ; Конец таблицы прерывани
Reset:  LDI R16,Low(RAMEND)  ; Инициализация стека
   OUT SPL,R16    ; Обязательно!!!

   LDI R16,High(RAMEND)
   OUT SPH,R16

;===============================================================================================
   RCALL Conf_Time
start:  RCALL delay2    ;вызов подпрограммы ожидания
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   RJMP start      ;зацикливаю программа

;Напишу элементарную процедуры задержки.
;================================================================================================
delay2:    ldi r19,60 ;устанавливаем максимальное число
delay:    dec r19         ;R19-- крутим цикл пока бит Z регистра SREG =1
     nop
     brne delay       ;переход если z=1 длится 63.5 мкС это не дела надо таймер
     ret           ;инструкция возврата из подпрограммы
     
;===============================================================================================      
;Процедура конфигурации таймера на прерывания по переполнения счетчика таймера
;Внимание при использовании этой процедуры старые настройки обнуляются, необходимо переписывать
;под свою задачу
Conf_Time: ;BSET SREG,7       ;установка флага I SREG(глобальное разрешение прерываний)
      sei           ;тоже самое
      ldi r18,1
      sts TIMSK0,r18     ;sts не out т.к. Memory Mapped
                ; TOIE0=1 разрешение прерываний по переполнению счетчика
      ;sbi TIMSK0,TOIE0   ; нельзя использовать регистр memory mapped?
      ldi r18,1;(1<<CS00)   ; режим работы без делителя
      out TCCR0B,r18
      ;sbi TCCR0B,0     неработает
      ret
CTRL + A
SHIFT+M
источник

DB

Dima Bat in Ассемблер
Saenro T
Зачем столько RETI? Они же всё равно не юзаются. На их месте лучше полезный код разместить.
так не переходит даже на RETI
источник

ST

Saenro T in Ассемблер
лучше файлом)
источник

DR

Dima Richev in Ассемблер
Жесть, столько повторяющихся команд.
Как-то странно
Хотя я не писал для ATMega, увы, помочь не смогу. Но с кодом можно привлечь побольше людей к помощи
источник

DB

Dima Bat in Ассемблер
источник

DB

Dima Bat in Ассемблер
мож как-то сконфигурировать надо чтоб он сам по вектору прерывания прыгал?
источник

ST

Saenro T in Ассемблер
Это точно вектора с ATmega324P?
источник

DB

Dima Bat in Ассемблер
нет с 168, помоему, а они не одни и те же?
источник

ST

Saenro T in Ассемблер
Dima Bat
нет с 168, помоему, а они не одни и те же?
Ну так открой датащиты и сравни
источник

DB

Dima Bat in Ассемблер
Saenro T
Ну так открой датащиты и сравни
там ошибка 328p у меня.
источник

ST

Saenro T in Ассемблер
Include от ATmega324P
источник

DB

Dima Bat in Ассемблер
да без разницы, флаги везде верно ставятся
источник