Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <REGX52.H>
- #define F_CLK 18432000
- #define F_INT 1000
- typedef unsigned char byte;
- byte xdata CRVENE _at_ 0x8000;
- byte xdata ZELENE _at_ 0x8001;
- byte xdata ZUTE _at_ 0x8002;
- byte xdata PLAVE _at_ 0x8003;
- byte LEDS;
- unsigned long sys_time = 0;
- void timer2_ISR() interrupt 5
- {
- sys_time++;
- TF2 = EXF2 = 0;
- }
- unsigned long millis()
- {
- unsigned long tmp;
- EA = 0; //zabrana prekida
- tmp = sys_time; //ocitavanje vremena
- EA = 1; //dozvola prekida
- return tmp;
- }
- void delay_ms()
- {
- unsigned char SW1;
- unsigned long t0 = millis();
- SW1=~CRVENE & 0x03;
- switch(SW1)
- {
- case 0x00:
- while(millis() - t0 < 36);
- break;
- case 0x01:
- while(millis() - t0 < 72);
- break;
- case 0x02:
- while(millis() - t0 < 143);
- break;
- case 0x03:
- while(millis() - t0 < 289);
- break;
- }
- }
- void koja_boja(unsigned char boja)
- {
- unsigned char dozvola = 1;
- if(dozvola == 1)
- {
- LEDS=~(~LEDS >> 1);
- boja = LEDS;
- if(~LEDS & 0x01) dozvola = 0;
- }
- else
- {
- LEDS=~(~LEDS << 1);
- boja = LEDS;
- if(~LEDS & 0x80) dozvola = 1;
- }
- void main()
- {
- unsigned char SW2;
- //inicijalizacija tajmera 2:
- RCAP2H = (-(F_CLK / (12 * F_INT))) >> 8;
- RCAP2L = (-(F_CLK / (12 * F_INT))) & 0xff;
- T2CON = 0x00; //tajmer 2 -> 16-bitni auto-reload
- ET2 = 1; //dozvola prekida tajmera 2
- TR2 = 1; //tajmer 2 ON
- EA = 1; //dozvola prekida
- while(1)
- {
- delay_ms();
- SW2=~CRVENE & 0xC0;
- switch(SW2) {
- case 0x00:
- if(CRVENE != prethodna_vr) {
- delay_ms();
- CRVENE = 0x7F;
- ZUTE=0xFF;
- ZELENE=0xFF;
- PLAVE=0xFF;
- LEDS=0x7F;
- prethodna_vr = 0x00;
- }
- delay_ms();
- koja_boja(CRVENE);
- break;
- case 0x01:
- if(CRVENE != prethodna_vr) {
- delay_ms();
- CRVENE = 0xFF;
- ZUTE=0x7F;
- ZELENE=0xFF;
- PLAVE=0xFF;
- LEDS=0x7F;
- prethodna_vr = 0x01;
- }
- delay_ms();
- koja_boja(ZUTE);
- break;
- case 0x02:
- if(CRVENE != prethodna_vr) {
- delay_ms();
- CRVENE = 0xFF;
- ZUTE=0xFF;
- ZELENE=0x7F;
- PLAVE=0xFF;
- LEDS=0x7F;
- prethodna_vr = 0x02;
- }
- delay_ms();
- koja_boja(ZELENE);
- break;
- case 0x03:
- if(CRVENE != prethodna_vr) {
- delay_ms();
- CRVENE = 0xFF;
- ZUTE=0xFF;
- ZELENE=0xFF;
- PLAVE=0x7F;
- LEDS=0x7F;
- prethodna_vr = 0x03;
- }
- delay_ms();
- koja_boja(PLAVE);
- break;
- }
- /*if(dozvola == 1)
- {
- LEDS=~(~LEDS >> 1);
- CRVENE = LEDS;
- if(~LEDS & 0x01) dozvola = 0;
- }
- else
- {
- LEDS=~(~LEDS << 1);
- CRVENE = LEDS;
- if(~LEDS & 0x80) dozvola = 1;*/
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement