#include <pic.h>
__CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);
#define _XTAL_FREQ 4000000
void main (void)
{
TRISA = 0b11110000;
TRISB = 0b11111111;
PORTA = 0;
PORTB = 0;
RBPU = 1;
while(1)
{
while(1)
{
m1: //pri luboj oshibke suda
RA2=1; // signal zapreta vvoda, zawita ot perebora koda
__delay_ms(5000); //vrema zaderwki zawitu
RA2=0;
m12: //pri ne najatoj pervoj knopke suda, cikl poka ne budet najata knopka
if (PORTB == 0b00000001) //najata pravilnaja knopka
{
RA0=1; //signal najatia knopki
__delay_ms(500);
RA0=0;
goto m2; //esli pervaja knopka najata verno, to perehod k obrabotke vtoroj
}
else if (PORTB == 0b00000000)
{
__delay_ms(50);
goto m12;
}
//pri najatii luboj knopki gorid diod
//krome pravilnoy
else
{
RA0=1;
__delay_ms(500);
RA0=0;
goto m12;
}
}
while(1)
{
m2:
if (PORTB == 0b00000010)
{
RA0=1;
__delay_ms(500);
RA0=0;
goto m3;
}
else if (PORTB == 0b00000000)
{
__delay_ms(50);
goto m2;
}
else //esli najata ne vernaja knopka
{
RA0=1; //signal najatija
__delay_ms(500);
RA0=0;
goto m12; //sbros koda
}
}
while(1)
{
m3:
if (PORTB == 0b00000100)
{
RA0=1;
__delay_ms(500);
RA0=0;
goto ENTR;
}
else if (PORTB == 0b00000000) //ojidanie najatija knopki
{
__delay_ms(50);
goto m3;
}
else
{
RA0=1;
__delay_ms(500);
RA0=0;
goto m12;
}
}
while(1)
{
ENTR:
if (PORTB == 0b00001000)
//Otkrivaem zamok port RA3
{
__delay_ms(50);
RA3=1;
__delay_ms(2000);
RA3=0;
goto m1;
}
}
}
}
|