помогите инициализировать INT1 на астме
испытатель подожди)) дай несчастные 3 строчки настройки инта1)) мне нельзя без стимулятора)
глаза боятся, а руки что то не делают))
- Реклама
вов51 я что то не совсем понял что вы мне скинули) адреса занятые регистрами) , заголовочный файл без векторов) , и егу с километр)
глаза боятся, а руки что то не делают))
m8Adef.inc - содержит все необходимое ( в том числе и вектора....
Блин,погнали от компа спатки

Блин,погнали от компа спатки
спокойной ночи, пойду читать..
глаза боятся, а руки что то не делают))
верно я настроил INT1 ?
- Вложения
-
- Новая папка (2).rar
- (4.98 КБ) 129 скачиваний
глаза боятся, а руки что то не делают))
- Реклама
неверно. Но попытка была хорошая.
Проблема в том что Вы не умеете считать, как программист. Программисты считают не с 1, а с 0.
Поэтому 7-й бит - это бит №8 в обычном понимании. ))


Вы выставили зарезервированное значение.
А GICR и GIFR настроили для INT0
Я Вам дам хороший совет, чтобы не путаться в нулях и единицах.
Заместо 0b01000000 (заметьте, выставлен 6-й бит) лучше написать (1<<6) (единица или 0b00000001 сдвинутая влево 6 раз, как раз 6-й бит или бит №7)
А еслиу вас 0b01000100, то можно записать так: (1<<6) | (1<<2) (объединить по ИЛИ единицу сдвинутую на 6 бит и единицу сдвинутую на 2 бита)
0b10011001 = (1<<7) | (1<<4) | (1<<3) | (1<<0) (единица сдвинутая на 0 бит - это та же единица)
и т. д.
А чтобы сбросить биты пишем так:
А еще у Вас в инклуд-файле, который Вы в начале добавили, уже обозначены все регистры и биты в них и можно записать так:
Код: Выделить всё
ldi r16, 0b00000100
out MCUCR, r16 ; INT1 по спадающемуфронту
ldi r16, 0b01000000
out GICR, r16 ; 7 бит для INT1
ldi r16, 0b01000000
out GIFR, r16 ;Вы выставили зарезервированное значение.
А GICR и GIFR настроили для INT0
Я Вам дам хороший совет, чтобы не путаться в нулях и единицах.
Заместо 0b01000000 (заметьте, выставлен 6-й бит) лучше написать (1<<6) (единица или 0b00000001 сдвинутая влево 6 раз, как раз 6-й бит или бит №7)
А еслиу вас 0b01000100, то можно записать так: (1<<6) | (1<<2) (объединить по ИЛИ единицу сдвинутую на 6 бит и единицу сдвинутую на 2 бита)
0b10011001 = (1<<7) | (1<<4) | (1<<3) | (1<<0) (единица сдвинутая на 0 бит - это та же единица)
и т. д.
А чтобы сбросить биты пишем так:
Код: Выделить всё
in r16, MCUCR
andi r16, ~( (1<<7) | (1<<4)) ; сбросить биты 7 и 4 (мы их как бы сначала усанавливаем, а потом инвертируем и по операции И на них 0 попадает, т.е. сброс
out MCUCR, r16Код: Выделить всё
ldi r16, (1<<ISC11) ; (ISC10 мы здесь не устанавливаем) можно написать так: ldi r16, (1<<ISC11) | (0<<ISC10)
out MCUCR, r16
ldi r16, (1<<INT1)
out GICR, r16
ldi r16, (1<<INTF1) ; Эту строчку можно не ставить, поскольку бит INT1 = бит INTF1 = 7
out GIFR, r16- Вложения
-
- Настройка INT.png
- (61.82 КБ) 624 скачивания
-
- GIFR.png
- (8.4 КБ) 550 скачиваний
Последний раз редактировалось ИС-пытатель Пт апр 18, 2014 13:12:08, всего редактировалось 6 раз.
Код: Выделить всё
ldi r16, 0b00000100
out MCUCR, r16 ; [s]INT1 по спадающемуфронту[/s] прерывание по любому переключению на входе INT1
ldi r16, 0b01000000
out GICR, r16 ; [u]7 бит для INT1[/u] правильный комментарий и неправильная установка
; ldi r16, 0b01000000; этой командой сбрасывается INT0
out GIFR, r16 ;
Последний раз редактировалось akl Пт апр 18, 2014 13:04:38, всего редактировалось 1 раз.
Чтобы не путаться в номерах битов, понимать что они значат и легко переносить код на другой контроллер (где этот бит обзывается так же, но сидит под другим номером), советую на будущее вместо "магических цифр" вроде 0b01000000 использовать конструкцию такого вида:
где 1 - это то что сделать с битом (1 - установить, 0 - не устанавливать), << - это сдвиг на X бит влево, а ISC11 это имя бита из даташита (определяется в def-файле именно тем самым номером X). Если нужно установить несколько бит, скобки соединяются логическим сложением (знак |):
ldi r16, (1<<ISC11)|(1<<ISC10) ; - во переднему фронту
Код: Выделить всё
ldi r16, (1<<ISC11)
out MCUCR, r16 ; INT1 по спадающемуфронту
ldi r16, (1<<ISC11)|(1<<ISC10) ; - во переднему фронту
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
по переднему фронту 10Engineer_Keen писал(а): ldi r16, (1<<ISC11)|(1<<ISC10) ; - во переднему фронту
Просто нужно Евстифеева параллелить с последним актуальным даташитом на камень. ) Мне сейчас лень. В целях обучения сойдетakl писал(а):ИС-пытатель не пользуйтесь старыми DS. Для MEGA8A прерывания INT1 будут такими
исправил вроде
- Вложения
-
- Новая папка (2).rar
- (4.97 КБ) 141 скачивание
глаза боятся, а руки что то не делают))
Выкладывайте свернутый код. Архив неудобен.
Теперь будет работать. Только вот символьное обозначение битов Вы пропустили мимо ушей, лап и хвоста. ) А что у Вас за любовь такая к КУКАм и СУКАм? ))
P.S. Не забудьте подтянуть ножку к + питанию. (внешним резистором или программно настройкой порта) иначе у Вас нога будет все подряд ловить. И схема не будет правильно работать
Теперь будет работать. Только вот символьное обозначение битов Вы пропустили мимо ушей, лап и хвоста. ) А что у Вас за любовь такая к КУКАм и СУКАм? ))
P.S. Не забудьте подтянуть ножку к + питанию. (внешним резистором или программно настройкой порта) иначе у Вас нога будет все подряд ловить. И схема не будет правильно работать
Последний раз редактировалось ИС-пытатель Пт апр 18, 2014 13:37:26, всего редактировалось 3 раза.
Rising Edge - передний фронт. Последняя строка таблиц 2.65 и 31-1 - ISC="11".ИС-пытатель писал(а):по переднему фронту 10
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
А, прошу прощения. ) Не тудой глянул. )) Перепутал с фронтом, который хотел указать ТС
Нарастающий, т.е. переходящий от 0[V] к +E[V].Engineer_Keen писал(а):Rising Edge - передний фронт.
Можно и так, это был не дословный перевод, смысл один. Знаю людей (тут на форуме), для которых есть просто фронт (0->1) и спад (1->0).
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
sergo80zxc, объяснять, почему должна быть такая последовательность настройки или сами догадались уже?
всем спс) хотел спросить как выкладывать код,что бы зеленым подсвечивало как у вас?
Engineer_Keen возьму на заметку)
испытатель долго вы меня мучили так и плешивым стать не долго
Engineer_Keen возьму на заметку)
испытатель долго вы меня мучили так и плешивым стать не долго
глаза боятся, а руки что то не делают))
Зато читать научились и научились осмысливать то, что прочли

Это так называемые BB-коды. Когда сообщение пишите, между заголовком сообщения и окном ввода сообщения кнопочки потыкайте.выкладывать код,что бы зеленым подсвечивало как у вас?
Последний раз редактировалось ИС-пытатель Пт апр 18, 2014 13:46:01, всего редактировалось 1 раз.
испытатель не догадаюсь если не трудно объясните) думаю собратьям аналогичным лопухам тоже будет интересно)
глаза боятся, а руки что то не делают))
sergo80zxc, Тег Code (5-й слева вверху). Если что-то длинное, то еще полезный тег spoiler, теги можно комбинировать.
PS упс, опять я влез
PS упс, опять я влез
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)


