По поводу схемы: виноват, правил на скорую руку. Вот то, что в железе:
- 2.JPG
- (78.48 KiB) Скачиваний: 245
Уважаемый ВОВ51. Огромное спасибо за ваше участие в моей проблеме. Я только изучаю ассемблер, и могу допустить какие-то вещи, для людей с опытом совсем простые, но для меня еще не очевидные. Я просто хочу разобраться, где я накосячил, или есть какие-нибудь особенности в применении того, что я изобразил. Я не прошу дорабатывать, изменять или делать заново устройство, которое я тут наваял на другом контроллере, другими методами или как видите вы. Я просто хочу понять, что-бы не допускать каких-либо ошибок в дальнейшем. Ни в коем случае не хочу вас обидеть или задеть. По крайней мере я благодарен за те советы, что вы мне дали.
А пока..... Вопрос остается открытым. Если не придираться к алгоритму и реализации, почему программа работает в Протеусе и не работает в железе? Что я уже только не пробовал.... Кстати, дебаг в Атмел студио 7.0 для этого контроллера у меня не заработал...... Говорит нет инструмента для дебаггинга.....
Еще вопрос. Может глупый. А есть методы контроля регистров и переменных в живом контроллере? Ну, так-же, как в Протеусе? Загрузил программу и пошагово или по точкам останова ее выполняешь....
Добавлено after 1 hour 38 minutes 45 seconds:Вдогонку.... Вычитал в даташите вот такое примечание:
When changing the ISC10/ISC00 bits, INT0 must be disabled by clearing its Interrupt Enable bit in the GIMSK register. Otherwise
an interrupt can occur when the bits are changed.
Я правильно понял, что Атмел рекомендует сначала настроить биты ISC10/ISC00, а уже потом настраивать маску прерываний в регистре GIMSK? Я поменял строчки местами (стало так):
ldi temp,0b00000011
out MCUCR,temp ; настройка прерывания INT0 по фронту
ldi temp,0b01000000 ;настройка прерываний
out gimsk,temp ; разрешить внешнее прерывание по INT0
Глюк в Протеусе исчез. Значит не глюк? А вот в железе ничего не изменилось. И еще заметил, что если включить питание без синхронизации, происходит кратковременное включение нагрузки. Значит происходит прерывание? Почему? Из-за чего может подниматься флаг прерывания, если оно не вызывается внешним сигналом? Прерывание настраивается по фронту импульса.