- #include <p24fj128ga010.h>
- //Konfiguracja dla Explorer 16 z progr. icd2
- _CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & FWDTEN_OFF)
- _CONFIG2(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRI)
- #define SCALE 308L
- int bitEnty(int nat, int numer)
- {
- int a=0,i;
- int tab[8]={0};
- int temp[8]={0};
- while(nat!=0)
- {
- temp[a]=nat%2;
- a++;
- nat/=2;
- }
- a=0;
- for (i=7;i>=0;i--)
- {
- tab[i]=temp[a];
- a++;
- }
- return tab[7-numer];
- }
- int main(void){
- unsigned long j,k;
- unsigned long i;
- unsigned char display;
- PORTA=0x0000;
- TRISA=0xFF00;
- TRISD=0xFFFF;
- again:
- func0:
- display=0;
- for (;;)
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- if (PORTDbits.RD13 == 0)
- {
- goto func1;
- }
- else if (PORTDbits.RD6 == 0)
- {
- goto func8;
- }
- else
- {
- Nop();
- PORTA=(unsigned int) display;
- for(i=500L*SCALE;i>0;i--) Nop();
- display=display+1;
- }
- }
- func1:
- display=255;
- for (;;)
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- if (PORTDbits.RD13 == 0)
- {
- goto func2;
- }
- else if (PORTDbits.RD6 == 0)
- {
- goto func0;
- }
- else
- {
- PORTA=(unsigned int) display;
- for(i=500L*SCALE;i>0;i--) Nop();
- display=display-1;
- }
- }
- func2:
- display=0;
- for(;;)
- {
- for (k=1; k<=9; k++)
- {
- for (j=0;j<=9;j++)
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- for(i=500L*SCALE;i>0;i--) Nop();
- if (PORTDbits.RD13 == 0)
- {
- goto func3;
- }
- else if (PORTDbits.RD6 == 0)
- {
- goto func1;
- }
- else
- {
- display=display+1;
- PORTA=(unsigned int) display;
- }
- }
- display = 0;
- display = 16*k;
- PORTA=(unsigned int) display;
- }
- display =0;
- }
- func3:
- for (;;)
- {
- Nop();
- for (k=9; k>0; k--)
- {
- display = 16*k+9;
- PORTA=(unsigned int) display;
- for (j=0;j<=9;j++)
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- if (PORTDbits.RD13 == 0)
- {
- goto func4;
- }
- else if (PORTDbits.RD6 == 0)
- {
- goto func2;
- }
- else
- {
- display=display-1;
- PORTA=(unsigned int) display;
- }
- }
- }
- display =9;
- for (j=0;j<=9;j++)
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- if (PORTDbits.RD13 == 0)
- {
- goto func4;
- }
- else if (PORTDbits.RD6 == 0)
- {
- goto func2;
- }
- else
- {
- display=display-1;
- PORTA=(unsigned int) display;
- }
- }
- display=0;
- }
- func4:
- display=0;
- unsigned char displayX=0;
- for (;;)
- {
- if (PORTDbits.RD6 == 0)
- {
- goto func3;
- }
- else if (PORTDbits.RD13 == 0)
- {
- goto func5;
- }
- else
- {
- PORTA=(unsigned int) displayX;
- for(i=500L*SCALE;i>0;i--) Nop();
- displayX=display^(display/2);
- display=display+1;
- }
- }
- func5:
- {
- unsigned char displayX=0;
- for(;;)
- {
- PORTA=(unsigned int) displayX;
- if (PORTDbits.RD6 == 0)
- goto func4;
- else if (PORTDbits.RD13 == 0)
- goto func6;
- else
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- displayX=display^(display/2);
- display=display-1;
- }
- }
- }
- func6:
- display = 0;
- for (;;){
- for(i=500L*SCALE;i>0;i--) Nop();
- Nop();
- PORTA=(unsigned int) display;
- if (PORTDbits.RD13 == 0)
- {
- goto func7;
- }
- else if (PORTDbits.RD6 == 0)
- {
- goto func5;
- }
- else
- if (display<7)
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- display=display+1;
- PORTA=(unsigned int) display;
- for(i=500L*SCALE;i>0;i--) Nop();
- display=display+2;
- PORTA=(unsigned int) display;
- for(i=500L*SCALE;i>0;i--) Nop();
- display=display+4;
- PORTA=(unsigned int) display;
- }
- else
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- display = display << 1;
- }
- }
- func7:
- display=0;
- for (;;)
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- Nop();
- PORTA=(unsigned int) display;
- if (PORTDbits.RD13 == 0)
- {
- goto func8;
- }
- else if (PORTDbits.RD6 == 0)
- {
- goto func6;
- }
- else
- if (display==0)
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- display=128;
- PORTA=(unsigned int) display;
- for(i=500L*SCALE;i>0;i--) Nop();
- display=display+64;
- PORTA=(unsigned int) display;
- for(i=500L*SCALE;i>0;i--) Nop();
- display=display+32;
- PORTA=(unsigned int) display;
- }
- else
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- display = display >> 1;
- }
- }
- func8:
- display = 1;
- for (;;)
- {
- if (PORTDbits.RD13 == 0)
- {
- goto func0;
- }
- else if (PORTDbits.RD6 == 0)
- {
- goto func7;
- }
- else
- {
- for(i=500L*SCALE;i>0;i--) Nop();
- PORTA=(unsigned int) display;
- int wynik=0;
- wynik=bitEnty(display,0)^bitEnty(display,1);
- wynik=wynik^bitEnty(display,6);
- wynik=wynik^bitEnty(display,7);
- if (wynik==1)
- {
- display = display >> 1;
- display = display + 128;
- }
- else
- {
- display = display >> 1;
- }
- }
- }
- goto again;
- }