В принципе, можно написать по-разному (была бы фантазия), я ничтоже сумняшеся все запихал в обработчик прерывания (за это меня здесь могут даже поругать).
Код: Выделить всё
#include <tiny2313.h>
unsigned char x;
interrupt [EXT_INT0] void ext_int0(void)
{
x=++x;
switch (x)
{
case 1:
PORTB = 0x99;
break;
case 2:
PORTB = 0x81;
break;
case 3:
PORTB = 0xAA;
x=0;
}
return;
}
void main(void)
{
x=0;
DDRB=0xFF; // порт В весь на выход
PORTB=0x00;
DDRD=0xFB; // порт PD2 как вход для прерывания
PORTD=0x00;
GIMSK=0b01000000;// Разрешаем прерывания INT0
MCUCR=0b0000011; // прерывание будет по заднему фронту
EIFR=0b01000000; //флажок прерывания сбрасываем - иначе улетим по вектору после ресета
#asm("sei") // Разрешаем глобальные прерывания
{
//тут можно еще что-нибудь написать)
}
while(1);
}
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )




