Страница 1 из 3
помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 22:21:33
sergo80zxc
Не кидайте помидорами я новичек

Помогите с прерываниями, никак не разберусь как инициализировать внешние прерывания
с инт1 атмега8а , на си видел, но я си не изучал, на астме надо, может кто то приведет пример? Хочу пин D3 на кноопку и на минус прикрутить, и нажав ее на порту C1 получить логическую 1. До посинения читал литературу по прерываниям так и не допер
Заранее благодарен
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 22:26:42
ИС-пытатель
прочтите еще Евстифеева. Справочник по AVR Tiny и Mega. )) Тот же даташит с примерами - только на русском. ) ТАм все просто.
А вообще порядок действий примерно такой: Есть два-три регистра. В одном из них отображаются флаги этих прерываний (событие произошло), а в остальных идет настройка, как будет оно случаться (низкий уровень, спад (переход с 1 в 0), подъем, любое изменение) и собственно разрешение именно этого прерывания. Пишете обработчик, sei - и все.
Сделайте хотя бы какую-то вялую попытку, а уж мы тут наставим на путь истинный.
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 22:37:56
sergo80zxc
теорию я раз 10 прочитал)) и про сей и про настройки)) как написать все это правильно и грамотно)
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 22:40:59
ИС-пытатель
Прочитайте еще раз, но медленно и вдумчиво.

Вам надо научиться учиться самому. А то когда достигнете уровня, что и спросить не у кого будет - то.. Плохо, кароч будет. ))
как написать все это правильно и грамотно)
Так прям берете названия регистров и выставляете флаги в них. ) попытку сделайте!
Или давайте так, что конкретно не ясно/не получается?
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 22:46:48
sergo80zxc
я сам пуду помогать) как опыта наберусь обещаю)) только помогите его набрать
а по делу ) напишите строки настройки INT1 ) дальше я сам напишу программу и если что выложу ее целиком сюда)
я до этого места дошел)
.include "m8Adef.inc"
.cseg
.org 0
;*********************************************************************
rjmp RESET ; Reset Handler
reti EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
reti TIM2_COMP ; Timer2 Compare Handler
reti TIM2_OVF ; Timer2 Overflow Handler
reti TIM1_CAPT ; Timer1 Capture Handler
reti TIM1_COMPA ; Timer1 CompareA Handler
reti TIM1_COMPB ; Timer1 CompareB Handler
reti TIM1_OVF ; Timer1 Overflow Handler
reti TIM0_OVF ; Timer0 Overflow Handler
reti SPI_STC ; SPI Transfer Complete Handler
reti USART_RXC ; USART RX Complete Handler
reti USART_UDRE ; UDR Empty Handler
reti USART_TXC ; USART TX Complete Handler
reti ADC ; ADC Conversion Complete Handler
reti EE_RDY ; EEPROM Ready Handler
reti ANA_COMP ; Analog Comparator Handler
reti TWSI ; Two-wire Serial Interface Handler
reti SPM_RDY ; Store Program Memory Ready Handler
;*************************************************************************
ldi temp,low(RAMEND) ;загрузка указателя стека
out SPL,temp
ldi temp,high(RAMEND) ;загрузка указателя стека
out SPH,temp
sei ;разрешаем прерывания
;*********************************************************************
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 22:51:21
BOB51
Прерывания для АВРок да под ассемблером лишь на первый взгляд простая штука (желательно токмо с одного на программу начинать).
А то действительно будет астма...

И че всех начинающих на 8-ю мегу тянет?
Там же начальной конфигурации...
Для avrstudio4.19 мож и набросаю...а насчет правильности и грамотности - правильно все что устойчиво работает, независимо то всего остального. Желательно конешно чтоб покрасивше и после полного забвения легко вспоминалось - но то со временем прийдет.
С Z80 под ассемблером дело имели?
МММ...
Общая шапка-заготовка под 8-ю:
а там уже можно и вставлять чего пожелаем...
Да и разрешение прерываний только в самом конце обшего для данной схемы участка начальной инициализации ВСЕЙ аппаратной начинки МК(в соответствии с заданной задачей).
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 22:59:27
sergo80zxc
Вов51) Я лузер по цифровой технике) с аналоговой вот перебираюсь) сам автоэлектриком работаю) время есть на работе, матчасть avr читаю) домой прихожу программатор, самодельная отладочная плата есть, расыпухи вагон) испытываю что на работе понял и вычитал) осцилограф вот потихоньку выбираю, на работе до 100 кгц не катит)
8 атмегу выбрал примеров по ней больше) на астме изучаю, потому что понять хочу лучше, а си планирую начать изучать как на астме аврки как семечки начну щелкать тогда)
так что прошу помощи и содействия))
на студии как рас 4 соплю)
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:02:23
BOB51
именно 4.19 или более ранняя?
Да и вот "шпоргалочка" под асм...
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:05:23
ИС-пытатель
Вам прежде, чем разрешить прерывания (sei) нужно их настроить. Иначе ничего работать не будет. Вот Вы написали в таблице векторов метку на обработчик Вашего прерывания, а саму метку нигде не поставили. Программа Должна выглядеть примерно так:
Код: Выделить всё
.cseg
;Таблица векторов
Reset: ; метка сброса. То место, откуда у вас стартует программа
;Инициализируете стек и остальное, что хотите
;Настраиваете прерывание
sei; разрешаете его
; между прерываниями программа ОБЯЗАТЕЛЬНО должна что-то делать.
; пусть это будет пустой цикл
main: rjmp main
; Поскольку на этом месте основной код закончился и программа в это место никак уже не попадет (если только специально не прыгнуть)
; то здесь разместим свой обработчик
EXT_INT1:
push r16; сохраняем используемые регистры (этих пушей может быть много)
in r16, SREG; сохраням флаги
push r16; и запихиваем их в стек
; делаем что хотим
pop r16; извлекаем из стека флаги в r16 (обратный порядок при извлечении из стека)
out SREG, r16; отправляем их обратно в регистр флагов
pop r16; восстанавливаем регистр r16
reti; возвращаемся из прерывания.
Вы, кстати, пропустили метку reset
В принципе, если у Вас в мейне (основная программа) никаких действий с регистром r16 не происходит и по условиям вы никуда прыгаете, можете обойтись без первых и последних 3-х команд в обработчике.
А теперь у меня вопрос к Вам: какие регистры отвечают за int1?
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:06:41
sergo80zxc
на этой AVR Studio 4.19 (08/2011)
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:17:08
ИС-пытатель
Осцилл, кстати, лучше какой-нить б/ушный на ebay закажите. я себе tecktronix там за 3500 (+3000 доставка из Америки обошлась) купил, с характеристиками как у нового нашего, который стоит в инете 35к. А в магазине и подавно все 45-50к. Так зато Tecktronix! Не маде ин Рашн-парашн
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:18:04
sergo80zxc
испытатель вам
SREG бит I - разрешено или запрещено, все прерыван
MCUCR- регистр управления ( настройка условия прерывания, фронт, состояние и тд)
GICR общий регистр управления прерываниями (Бит 7 - INT1 в 1 разрешено, Бит 6 - INT0 в 1 разрешено)
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:20:46
BOB51
Тогды вот заготовка проекта - распакуйте и далее измывайтесь. Единственно при компиляции запросит переподтвердить размещение файлов ассемблера в каталоге IDE (у меня студия на диске Е, а в большинстве случаев - на С) просто тыкайте "подтвердить" ничего более не меняя - матюкнется только первый раз, далее запоминает где чего находится и уже работает спокойно.
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:20:57
ИС-пытатель
Таааак! )) Забыли регистр флагов. Он нам тоже понадобится. )) Теперь давайте смотреть на это хозяйство подробнее. В MCUCR - нам надо установить биты, ответственные за тип срабатывания нужного нам прерывания. Какие биты? Устанавливайте!
BOB51 писал(а):Тогды вот заготовка проекта - распакуйте и далее измывайтесь.
Ну, что Вы не даете человеку самому подумать! ))
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:21:17
sergo80zxc
ИС-пытатель
да не хотелось бы выкинуть 6500 и ведро болтов через мес получить вместо осцила) вам повезло)
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:24:13
ИС-пытатель
Мне его так упаковали, что я потом полдня из комнаты выметал шарики пластика и куски пузырчатой пленки. ))))) Коробка была раза в 4 больше прибора. )) И получил я его через 2 недели.

Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:26:13
BOB51
ИС-пытатель писал(а):
Ну, что Вы не даете человеку самому подумать! ))
Вот пусть над программой и думает, а не над настройками среды IDEи компилятора с дебаггером

Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:27:26
ИС-пытатель
Аааа... )) Я думал, вы ему "рыбу" кинули! )) Коты очень любят рыбу! )))
Так, sergo, я спать. Вам задание задать тип прерывания Int1 в регистре MCUCR, разрешить его в GICR, сбросить флаг (на всякий случай) в GIFR, и общее разрешение прерываний. С утра проверю и расскажу почему именно в такой последовательности. Все, споки-ноки!
Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:37:27
BOB51
Дак то по сути и есть "рыба" - настроенный файл проекта для IDE и шапка-заголовок под АТmega8а (аналогия микрочиповского заголовка). А далее уж вставляй чего пожелается. Тонкости же настроек проекта человек и сам попозже освоит. Как и хелп для дебаггера по данному МК - когда отладкой займется тогда и про ограничения прочитает, а сейчас - даташит и Ефстефеева в лапы и за мозготрепку (да схемку бы для начала себе соорудил - ассемблер "отвлеченного" от железа мудрствования не очень-то любит).

Re: помогите инициализировать INT1 на астме
Добавлено: Чт апр 17, 2014 23:41:30
sergo80zxc
вов51
железо я люблю) схема давно около компа блестит пайкой)