codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
//Обработка прерываний через порты int1 int2 #include <mega8.h> #include <delay.h> //Прерывание_________________________________________________________________________________________________________ interrupt(2) void ExtInt0(void); // Обработка прерываний на рорте Int0 (порт PD2, Вывод 4) { PORTC=0b1; delay_ms(200); PORTC=0b10; delay_ms(200); } interrupt(3) void ExtInt1(void); // Обработка прерываний на рорте Int1 (порт PD3, Вывод 5) { PORTC=0b100000; delay_ms(200); PORTC=0b010000; delay_ms(200); } //Настройка портов и регистров________________________________________________________________________ void main(void) { DDRC=0b1111111; //Все порты С сконфигурированы как выходы DDRD=0b11110011; //Вне порты кроме PD2 и PD3 выходы (2 и 3 это прерывания) delay_ms(10); // задержка нужна для зарядки антидребезгого конденсатора для правельной работы GICR=0b11000000; /* Регистр eneral Interrupt Control Register разрешает внешнее прерывание 10 000000 - по выводу int1 01 000000 - по выводу int0 11 000000 - по всем выводам */ MCUCR=0b00001111; /* Регистр Micro Controller Unit Control Registr настраиваетпрерывания на срабатывание: int1 int0 0000 10 10 - по спадающему фронту сигнала на выводе 0000 11 11 - по нарастающему фронту 0000 00 00 - по низкому уровню сигнала 0000 01 01 - по любому игменению уровня сигнала */ #asm("sei") // или SREG=(1<<7); Status Register разрешает общее прерывание //Основная программа___________________________________________________________________________________________ while(1) { PORTC=0b1; delay_ms(50); PORTC=0b10; delay_ms(50); PORTC=0b100; delay_ms(50); PORTC=0b1000; delay_ms(50); PORTC=0b10000; delay_ms(50); PORTC=0b0100000;delay_ms(50); PORTC=0b10000; delay_ms(50); PORTC=0b1000; delay_ms(50); PORTC=0b100; delay_ms(50); PORTC=0b10; delay_ms(50); PORTC=0b1; delay_ms(50); } }
Private
[
?
]
Run code
Submit