afz писал(а): приходится городить ерунду (1<<SE)|(0<<SM2)|(0<<SM1)|(1<<SM0), из которой хрен что поймешь.
согласен с вами сам не догадался как присвоить поэтому нашел похожий пример в инете и позаимствовал от тутда. там написано было как у вас в выделеной мною цитате , но и моя конструкция тоже работает так же, проверял в отладчике авр студио. но в вашей понятнее что включается.))
[/quote]
LINKS_234 писал(а):смысла писать | (логическое "или"), а потом туда пихать нули - совершенно нету. логическим "или" присваивают необходимому биту(битам) значение 1. обнуляют логическим "и" - &
тоже согласен с вами , до всего доходил своими мозгами 2 вечера, тоже предпологал как вы говорите но решил перестраховаться))) ну не чего страшного если одна лишняя команда в скобочках затесалась.
vitalik_1984 писал(а):MCUCR|=(1<<5)|(1<<4)|(0<<3)|(0<<0)|(1<<0);
Сомневаюсь, что эта строчка работает так как бы вы хотели...
так работает и так как вы предложили, тоже работает. проверял в отладчике авр студо, после обработки данной функции галки встают в нужных местах.
работа странно начинается в отладчике до бита GIMSK=0x54; все идет построчно но потом передвигается на TIMSK0=0x02; и после этой строчки прыгает на
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(PINB.1)
#asm("cli");
}
----------
потом АCSR=0x80; и снова на строчку
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(PINB.1)
#asm("cli");
}
----------
затем ADCSRB=0x00; и снова на строчку
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(PINB.1)
#asm("cli");
}
----------
затем DIDR0=0x00; и снова на строку
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(PINB.1)
#asm("cli");
}
----------
потом DCSRA=0x00; и опять на строку
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(PINB.1)
#asm("cli");
}
и так вся программа работает. это если PINB.1 равен 0 а если 1 то все нормально построчно проходит до команды спать и на ней останавливается, но вот выход из слип в отладчике можно сделать как 0 так и единицей подавая их поочередно на pinb.1
но вот в протеусе это дело не работает . ??? почему что нужно писать в обработчике прерываний что бы при возникновении его на portb.4 появлялась 1 и начинался отсчет вермени по таймеру ??