Вот пример кода из CodeVision:
файл init.c
Код: Выделить всё
#include <tiny2313.h>
void port_init(void) //DDR 1-выход, 0-вход
{
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTB=0xFF;
DDRB=0x00;
// Port D initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0x7F;
}
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// Interrupt on any change on pins PCINT0-7: Off
void init_devices(void)
{
#asm("cli")
port_init();
GIMSK = 0b01000000; //01000000 разрешение прерывания INT0, INT1
//GIMSK = 0b00100000; //00100000 прерывания по входам PORTB разрешены
MCUCR = 0b00000010; //00001010 INT0 по спаду
//MCUCR=0x00;
//PCMSK = 0x07; //прерывания по входам PB0, PB1, PB2
//EIFR=0x01000000;
//ACSR = 0x80;
//DIDR = 0x03;
#asm("sei")
}Код: Выделить всё
#include <tiny2313.h>
#include "init.h"
//ToggleBit не использовать с операцией
#define SetBit(x,y) (x|=(1<<y))
#define ClrBit(x,y) (x&=~(1<<y))
#define ToggleBit(x,y) (x^=(1<<y))
#define TestBit(x,y) (x&(1<<y))
interrupt [EXT_INT0] void ext_int0_isr(void)
{
unsigned char k;
SetBit(PORTD,4);
for(k=0; k<255; k++) {;}
ClrBit(PORTD,4);
}
interrupt [PC_INT] void pin_change_isr0(void)
{
unsigned char k;
SetBit(PORTD,4);
for(k=0; k<255; k++) {;}
ClrBit(PORTD,4);
}
void main(void)
{
init_devices();
while (1) {;}
}


