помогите инициализировать INT1 на астме

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

sergo80zxc писал(а):если не трудно объясните
Да что тут думать. Все просто. Чтобы что-то использовать - нам нужно это прежде всего настроить (регистр MCUCR). Это золотое правило. Если Вы сначала включаете, а потом настраиваете, то у Вас до момента настройки прерывание или что-то еще может сработать от других факторов, не от тех, которые Вы планируете. А сброс флагов - это еще одно золотое правило. Всегда инициализируйте регистры, переменные и т.д. Начальными значениями, даже если уверены, что там то, что Вам надо.
Во время настройки прерывания или до таковой у Вас флаг прерывания мог установиться по событию. (например зажали кнопку во время старта контроллера - флаг до настройки прерывания появится). Вот мы, чтобы не получилось неожиданностей на всякий случай скидываем его.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 113
Зарегистрирован: Пт апр 04, 2014 09:34:08
Откуда: Санкт-Петербург

Сообщение sergo80zxc »

Спойлер

Код: Выделить всё

.cseg
.include "m8Adef.inc"

;***********************************************************************

.org	$000 rjmp RESET           ; Reset Handler
;.org	$001 reti	                    ;rjmp EXT_INT0 ; IRQ0 Handler
.org	$002 rjmp KUKA	            ;rjmp EXT_INT1 ; IRQ1 Handler
;.org	$003 reti	                    ;rjmp TIM2_COMP ; Timer2 Compare Handler
;.org	$004 reti	                    ;rjmp TIM2_OVF ; Timer2 Overflow Handler
;.org	$005 reti 	                    ;rjmp TIM1_CAPT ; Timer1 Capture Handler
;.org	$006 reti	                    ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
;.org	$007 reti	                    ;rjmp TIM1_COMPB ; Timer1 CompareB Handler
;.org	$008 reti	                    ;rjmp TIM1_OVF ; Timer1 Overflow Handler
;.org	$009 reti	                    ;rjmp TIM0_OVF ; Timer0 Overflow Handler
;.org	$00a reti	                    ;rjmp SPI_STC ; SPI Transfer Complete Handler
;.org	$00b reti	                    ;rjmp USART_RXC ; USART RX Complete Handler
;.org	$00c reti	                    ;rjmp USART_UDRE ; UDR Empty Handler
;.org	$00d reti	                    ;rjmp USART_TXC ; USART TX Complete Handler
;.org	$00e reti	                    ;rjmp ADC ; ADC Conversion Complete Handler
;.org	$00f reti	                    ;rjmp EE_RDY ; EEPROM Ready Handler
;.org	$010 reti	                    ;rjmp ANA_COMP ; Analog Comparator Handler
;.org	$011 reti	                    ;rjmp TWSI ; Two-wire Serial Interface Handler
;.org	$012 reti	                    ;rjmp SPM_RDY ; Store Program Memory Ready Handler

;***********************************************************************

Reset: 
          ldi r16,low(RAMEND)       ;загрузка указателя стека
          out SPL,r16
          ldi r16,high(RAMEND) 
          out SPH,r16

	  ldi r16, 0b00000010        ; порт С на вых
	  out DDRC, r16
     
          ldi r16, 0b00001000
          out MCUCR, r16              ; 
          ldi r16, 0b10000000
          out GICR, r16                 ; 
          ldi r16, 0b10000000
          out GIFR, r16                  ;

sei                                           ; разрешаете прерывания

;***********************************************************************

main: 

           ldi r16, 0
       
LOOP:  dec r16
	   brne LOOP

           rjmp main

;*********************************************************************

KUKA:

push r16                  ; сохраняем используемые регистры (этих пушей может быть много)
in r16, SREG            ; сохраням флаги
push r16                  ; и запихиваем их в стек

                               ; делаем что хотим
ldi r16, 0b00000010
out PORTC, r16

pop r16                     ; извлекаем из стека флаги в r16 (обратный порядок при извлечении из стека)
out SREG, r16            ; отправляем их обратно в регистр флагов
pop r16                     ;  восстанавливаем регистр r16
reti                           ;  возвращаемся из прерывания


вроде получилось
Последний раз редактировалось sergo80zxc Пт апр 18, 2014 15:57:35, всего редактировалось 4 раза.
глаза боятся, а руки что то не делают))
Реклама
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Не так.
Выделяете текст и жмёте тег Code. Выделяете текст вместе с тегом Code и жмёте тег spoiler
Последний раз редактировалось akl Сб апр 19, 2014 04:38:58, всего редактировалось 1 раз.
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Сержио, у Вас текст должен быть МЕЖДУ тегами. А у Вас теги отдельно - текст отдельно. Только спойлер правильно слелали
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 113
Зарегистрирован: Пт апр 04, 2014 09:34:08
Откуда: Санкт-Петербург

Сообщение sergo80zxc »

пойду вечером на железе проверять что накодил или нашкодил :))

мне вообще советовали с СИ начинать в этот мирок заходить))
наверное правильно с астма начал?)
глаза боятся, а руки что то не делают))
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Да, правильно. Я тоже с него начинал - не жалею. Времени больше ушло на освоение - зато лучше понимаю, что где происходит. Писать на СИ хорошо, когда знаешь архитектуру, чтобы в случае ошибки уметь найти ее. А без знания архитектуры СИ мало полезен. Только как ускорялка написания говнокода.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

sergo80zxc, Вы асм по какому учебнику осваиваете?
Встал на лапы
Аватара пользователя
Сообщения: 113
Зарегистрирован: Пт апр 04, 2014 09:34:08
Откуда: Санкт-Петербург

Сообщение sergo80zxc »

ИС-пытатель я по avr и осваиваю) раньше никогда не сталкивался с програмированием и с цифровой техникой.

аналогом вполне дружу, но век транзисторов конденсаторов прошел видно)
не хватает мне расыпухи частенько) вот 3 недели изучаю литературу по мк до посинения) на работе часа 4 и дома часа 3)
мечтаю собрать передатчик) который записывает аудио сигнал, пишет его на память, потом коротким импульсом передает запись например записанную в течении 3 часов, приемник и передатчик имеют вшитый код, без которого запись не читабельна)
ну и возможно скачки по частотам)
что то размечтался я)) ну ничего, дойду до такого уровня)
с детства помню у химички и физички реактивы и приборы выпрашивал) но в этом направлении не получилось пойти) надо
наверствывать)
глаза боятся, а руки что то не делают))
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

http://rutracker.org/forum/viewtopic.php?t=3731955

Вот это почитайте. ) Хорошая весчь. Я даже сейчас иногда в нее заглядываю
Встал на лапы
Аватара пользователя
Сообщения: 113
Зарегистрирован: Пт апр 04, 2014 09:34:08
Откуда: Санкт-Петербург

Сообщение sergo80zxc »

испытатель спс)) есть такой у меня)) читаю)
глаза боятся, а руки что то не делают))
Встал на лапы
Аватара пользователя
Сообщения: 113
Зарегистрирован: Пт апр 04, 2014 09:34:08
Откуда: Санкт-Петербург

Сообщение sergo80zxc »

Спойлер

Код: Выделить всё

;прога использует прерывание INT1 по низкому уровню срабатывания


;****************************************************************************************
.cseg
.include "m8Adef.inc"

;***********************************************************************

.org   $000 rjmp RESET              ;Reset Handler
;.org   $001 reti                       ;rjmp EXT_INT0 ; IRQ0 Handler
.org   $002 rjmp KUKA               ;rjmp EXT_INT1 ; IRQ1 Handler
;.org   $003 reti                       ;rjmp TIM2_COMP ; Timer2 Compare Handler
;.org   $004 reti                       ;rjmp TIM2_OVF ; Timer2 Overflow Handler
;.org   $005 reti                        ;rjmp TIM1_CAPT ; Timer1 Capture Handler
;.org   $006 reti                       ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
;.org   $007 reti                       ;rjmp TIM1_COMPB ; Timer1 CompareB Handler
;.org   $008 reti                       ;rjmp TIM1_OVF ; Timer1 Overflow Handler
;.org   $009 reti                       ;rjmp TIM0_OVF ; Timer0 Overflow Handler
;.org   $00a reti                       ;rjmp SPI_STC ; SPI Transfer Complete Handler
;.org   $00b reti                       ;rjmp USART_RXC ; USART RX Complete Handler
;.org   $00c reti                       ;rjmp USART_UDRE ; UDR Empty Handler
;.org   $00d reti                       ;rjmp USART_TXC ; USART TX Complete Handler
;.org   $00e reti                       ;rjmp ADC ; ADC Conversion Complete Handler
;.org   $00f reti                       ;rjmp EE_RDY ; EEPROM Ready Handler
;.org   $010 reti                       ;rjmp ANA_COMP ; Analog Comparator Handler
;.org   $011 reti                       ;rjmp TWSI ; Two-wire Serial Interface Handler
;.org   $012 reti                       ;rjmp SPM_RDY ; Store Program Memory Ready Handler

;***********************************************************************

Reset: 
     ldi r16,low(RAMEND)       ;загрузка указателя стека
     out SPL,r16
     ldi r16,high(RAMEND) 
     out SPH,r16

     ldi r16, 0b00000010       ; порт С на вых
     out DDRC, r16
     
     ldi r16, 0b00000000   ; грузим в рон конст
     out DDRD, r16         ; порт D на вход
     ldi r16, 0b11111111   ; грузим в рон конст
     out PORTD, r16        ; подтяжка внутрених рез порта D

     ldi r16, 0b00000000       ; настройка прерываний
     out MCUCR, r16               
     ldi r16, 0b10000000
     out GICR, r16                  
     ldi r16, 0b10000000
     out GIFR, r16                  

sei                            ; разрешаете прерывания

;***********************************************************************

main: 
      rjmp main

;*********************************************************************

KUKA:

     push r16                  ; сохраняем используемые регистры (этих пушей может быть много)
     in r16, SREG              ; сохраням флаги
     push r16                  ; и запихиваем их в стек
                          		 
          ldi r16, 0b01010101   
          out PORTC, r16     ; зажигаем светодиоды
       
          ldi r16,0          ; загружаем в РОНы константы
          ldi r17,0
          ldi r18,10

Loop1:    dec r16            ; декрементируем, отнимаем 1 от константы в РОНе
          brne Loop1         ; переход к метке, если результат предыдущего действия - не ноль, если ноль, то выполняется следующая команда

          dec r17
          brne Loop1
          
          dec r18
          brne Loop1 

          ldi r16, 0b00000000 
          out PORTC, r16     ; гасим светодиоды
                 

     pop r16                   ; извлекаем из стека флаги в r16 (обратный порядок при извлечении из стека)
     out SREG, r16             ; отправляем их обратно в регистр флагов
     pop r16                   ; восстанавливаем регистр r16
reti                           ; возвращаемся из прерывания


Бядааааааааа :( :facepalm: опять меня преследует горение светодиода в полнакала, почему так не пойму?
другой прошивкой ярко горят , аппаратная часть значит непричем
глаза боятся, а руки что то не делают))
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

По мне, светики будут гореть при нажатой кнопке на INT1, если настроить PORTC на вывод

Код: Выделить всё

Reset:
     ldi r16,low(RAMEND)       ;загрузка указателя стека
     out SPL,r16
     ldi r16,high(RAMEND)
     out SPH,r16

	ldi r16, 0b01010101   
;     ldi r16, 0b00000010       ; порт С на вых
     out DDRC, r16
Встал на лапы
Аватара пользователя
Сообщения: 113
Зарегистрирован: Пт апр 04, 2014 09:34:08
Откуда: Санкт-Петербург

Сообщение sergo80zxc »

Аки спс , ночное время суток негативно влияет по ходу на мою внимательность)
исправил, все работает :)


Спойлер

Код: Выделить всё

;прога использует прерывание INT1 по низкому уровню срабатывания


;****************************************************************************************
.cseg
.include "m8Adef.inc"

;***********************************************************************

.org   $000 rjmp RESET              ;Reset Handler
;.org   $001 reti                       ;rjmp EXT_INT0 ; IRQ0 Handler
.org   $002 rjmp KUKA               ;rjmp EXT_INT1 ; IRQ1 Handler
;.org   $003 reti                       ;rjmp TIM2_COMP ; Timer2 Compare Handler
;.org   $004 reti                       ;rjmp TIM2_OVF ; Timer2 Overflow Handler
;.org   $005 reti                        ;rjmp TIM1_CAPT ; Timer1 Capture Handler
;.org   $006 reti                       ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
;.org   $007 reti                       ;rjmp TIM1_COMPB ; Timer1 CompareB Handler
;.org   $008 reti                       ;rjmp TIM1_OVF ; Timer1 Overflow Handler
;.org   $009 reti                       ;rjmp TIM0_OVF ; Timer0 Overflow Handler
;.org   $00a reti                       ;rjmp SPI_STC ; SPI Transfer Complete Handler
;.org   $00b reti                       ;rjmp USART_RXC ; USART RX Complete Handler
;.org   $00c reti                       ;rjmp USART_UDRE ; UDR Empty Handler
;.org   $00d reti                       ;rjmp USART_TXC ; USART TX Complete Handler
;.org   $00e reti                       ;rjmp ADC ; ADC Conversion Complete Handler
;.org   $00f reti                       ;rjmp EE_RDY ; EEPROM Ready Handler
;.org   $010 reti                       ;rjmp ANA_COMP ; Analog Comparator Handler
;.org   $011 reti                       ;rjmp TWSI ; Two-wire Serial Interface Handler
;.org   $012 reti                       ;rjmp SPM_RDY ; Store Program Memory Ready Handler

;***********************************************************************

Reset: 
     ldi r16,low(RAMEND)       ;загрузка указателя стека
     out SPL,r16
     ldi r16,high(RAMEND) 
     out SPH,r16

     ldi r16, 0b11111111       ; порт С на вых
     out DDRC, r16
     
     ldi r16, 0b00000000   ; грузим в рон конст
     out DDRD, r16         ; порт D на вход
     ldi r16, 0b11111111   ; грузим в рон конст
     out PORTD, r16        ; подтяжка внутрених рез порта D

     ldi r16, 0b00000000       ; настройка прерываний
     out MCUCR, r16               
     ldi r16, 0b10000000
     out GICR, r16                  
     ldi r16, 0b10000000
     out GIFR, r16                  

sei                            ; разрешаете прерывания

;***********************************************************************

main: 
      rjmp main

;*********************************************************************

KUKA:

     push r16                  ; сохраняем используемые регистры (этих пушей может быть много)
     in r16, SREG              ; сохраням флаги
     push r16                  ; и запихиваем их в стек                             
    	 
          ldi r16, 0b01010101   
          out PORTC, r16     ; зажигаем светодиоды
       
          ldi r16,0          ; загружаем в РОНы константы
          ldi r17,0
          ldi r18,10

Loop1:    dec r16            ; декрементируем, отнимаем 1 от константы в РОНе
          brne Loop1         ; переход к метке, если результат предыдущего действия - не ноль, если ноль, то выполняется следующая команда

          dec r17
          brne Loop1
          
          dec r18
          brne Loop1 

          ldi r16, 0b00000000 
          out PORTC, r16     ; гасим светодиоды
                 
     pop r16                   ; извлекаем из стека флаги в r16 (обратный порядок при извлечении из стека)
     out SREG, r16             ; отправляем их обратно в регистр флагов
     pop r16                   ; восстанавливаем регистр r16
reti                           ; возвращаемся из прерывания
глаза боятся, а руки что то не делают))
Друг Кота
Сообщения: 5431
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий

Сообщение petrenko »

Эамечательно !
Ну тогда уж и название темы попросите модераторов изправить - всё же не медицинский форум.. :wink:
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6339
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Да, астма - паршивая болезнь :)
Ответить

Вернуться в «AVR»