Привет. Как-то на форуме был задан вопрос об использовании
прерывания и как подключит МК к клавиатуре 4*4. Я ре шил объединить эти эти 2 темы в одну. Для
клавиатуры 4*4 не очень будет рационально использовать 8 портов МК. На рынках есть специальные
микросхемы (мультиплексом и шифратор)MM74С922, также нам будет необходимо
использовать инвертор (элемент НЕ) 7404. Даташиты к компонентам в файле
проекта. Эта схема будет выводить в терминал код
который наш драйвер клавиатуры(MM74С922) занес в порт "В". В АТМega8 портов прерываний 2, INT0 и INT1.
Создадим новый проект, настроем USART и External IRQ так как
показано на рисунку. И выставить прерывание по спаданию, то есть с высокого уровня в низкий. Схема: Код программы: #include <mega8.h>
// Standard Input/Output functions #include <stdio.h> int button=0; // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) // иницыализыцыя прерываний { // Place your code here button=PINB; // в переменную записываем код который нам отправил шефратор
printf ("Ch= %d \n\r",button); // отправить переменную в УАРТ }
void main(void) { // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00;
// Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00;
// Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00;
// External Interrupt(s) initialization // INT0: On // INT0 Mode: Falling Edge // INT1: Off GICR|=0x40; MCUCR=0x02; GIFR=0x40;
// USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33;
#asm("sei") while (1) { // Place your code here }; }
Вопросы на форум. Файлы проекта в разделе файлы.
|