Pokusy na Microchip C18 volatile static u08 Bat_Vysledek; //Vyhodnocený stav zdroje volatile static u08 Bat_Stav; //Aktuelní stav baterie - na základě AD volatile static u08 Bat_Cas=K_CAS_BAT; //časování sítě 00D6 010F MOVLB 0xf 00D8 510C MOVF 0xc, W, BANKED 00DA 0B01 ANDLW 0x1 00DC 6E02 MOVWF 0x2, ACCESS 00DE 510C MOVF 0xc, W, BANKED 00E0 0B02 ANDLW 0x2 00E2 E001 BZ 0xe6 00E4 0E01 MOVLW 0x1 00E6 5C02 SUBWF 0x2, W, ACCESS 00E8 E103 BNZ 0xf0 26: if (Bat_Vysledek== Bat_Stav) { 00EA 010F MOVLB 0xf 00EC 690D SETF 0xd, BANKED 27: Bat_Cas=K_CAS_BAT; 28: } 00EE D00B BRA 0x106 29: else { 00F0 010F MOVLB 0xf 00F2 070D DECF 0xd, F, BANKED 00F4 E108 BNZ 0x106 30: if (--Bat_Cas == 0) { 00F6 010F MOVLB 0xf 00F8 510C MOVF 0xc, W, BANKED 00FA 0B01 ANDLW 0x1 00FC 0A01 XORLW 0x1 00FE B0E8 BTFSC 0xfe8, 0, ACCESS 0100 810C BSF 0xc, 0, BANKED 0102 A0E8 BTFSS 0xfe8, 0, ACCESS 0104 910C BCF 0xc, 0, BANKED 31: Bat_Vysledek = Bat_Vysledek ^ 1; 10: volatile static u08 Bat_Cas=K_CAS_BAT; //časování sítě 11: #define K_BAT_STAV_ER 0 // chyba 12: #define K_BAT_STAV_OK 1 // Ok 13: 14: volatile struct { 15: unsigned Bat_Vysledek:1; 16: unsigned Bat_Stav:1; 17: } Flag; 18: 19: /*---------------------------------------------------------*/ 20: void main(void) { 21: 0106 D7E7 BRA 0xd6 22: for(;;){ 23: /*---------------------------------------------------------*/ 24: // Baterka 25: 00D6 010F MOVLB 0xf 00D8 510C MOVF 0xc, W, BANKED 00DA 0B01 ANDLW 0x1 00DC 6E02 MOVWF 0x2, ACCESS 00DE 510C MOVF 0xc, W, BANKED 00E0 0B02 ANDLW 0x2 00E2 E001 BZ 0xe6 00E4 0E01 MOVLW 0x1 00E6 5C02 SUBWF 0x2, W, ACCESS 00E8 E103 BNZ 0xf0 26: if (Flag.Bat_Vysledek== Flag.Bat_Stav) { 00EA 010F MOVLB 0xf 00EC 690D SETF 0xd, BANKED 27: Bat_Cas=K_CAS_BAT; 28: } 00EE D00B BRA 0x106 29: else { 00F0 010F MOVLB 0xf 00F2 070D DECF 0xd, F, BANKED 00F4 E108 BNZ 0x106 30: if (--Bat_Cas == 0) { 00F6 010F MOVLB 0xf 00F8 510C MOVF 0xc, W, BANKED 00FA 0B01 ANDLW 0x1 00FC 0A01 XORLW 0x1 00FE B0E8 BTFSC 0xfe8, 0, ACCESS 0100 810C BSF 0xc, 0, BANKED 0102 A0E8 BTFSS 0xfe8, 0, ACCESS 0104 910C BCF 0xc, 0, BANKED 31: Flag.Bat_Vysledek = Flag.Bat_Vysledek ^ 1; 32: } Kompilace na HT-Soft C18 demo: 4: 6: 7: volatile static u08 Bat_Vysledek; //Vyhodnocený stav zdroje 8: volatile static u08 Bat_Stav; //Aktuelní stav baterie - na základě AD 9: volatile static u08 Bat_Cas=K_CAS_BAT; //časování sítě 24: 25: if (Bat_Vysledek==Bat_Stav) { FFDE CF5E MOVFF 0xf5e, 0xfe8 FFE0 FFE8 NOP FFE2 010F MOVLB 0xf FFE4 635F CPFSEQ 0x5f, BANKED FFE6 D004 BRA 0xfff0 26: Bat_Cas=K_CAS_BAT; FFE8 0EFF MOVLW 0xff FFEA CFE8 MOVFF 0xfe8, 0xf5d FFEC FF5D NOP 27: } FFEE D7F7 BRA 0xffde 28: else { 29: if (--Bat_Cas == 0) { FFF0 010F MOVLB 0xf FFF2 2F5D DECFSZ 0x5d, F, BANKED FFF4 D7F4 BRA 0xffde 30: Bat_Vysledek = Bat_Vysledek ^ 1; FFF6 010F MOVLB 0xf FFF8 0E01 MOVLW 0x1 FFFA 1B5F XORWF 0x5f, F, BANKED 31: } 32: } 33: 34: 35: } FFFC D7F0 BRA 0xffde 7: volatile static bit Bat_Vysledek; //Vyhodnocený stav zdroje 8: volatile static bit Bat_Stav; //Aktuelní stav baterie - na základě AD 9: volatile static u08 Bat_Cas=K_CAS_BAT; //časování sítě 18: /*---------------------------------------------------------*/ 19: void main(void) { 20: 21: for(;;){ 22: /*---------------------------------------------------------*/ 23: // Baterka 24: 25: if (Bat_Vysledek==Bat_Stav) { FFD2 A001 BTFSS 0x1, 0, ACCESS FFD4 D002 BRA 0xffda FFD6 0E01 MOVLW 0x1 FFD8 D001 BRA 0xffdc FFDA 0E00 MOVLW 0 FFDC 6E00 MOVWF 0, ACCESS FFDE A201 BTFSS 0x1, 0x1, ACCESS FFE0 D002 BRA 0xffe6 FFE2 0E01 MOVLW 0x1 FFE4 D001 BRA 0xffe8 FFE6 0E00 MOVLW 0 FFE8 1A00 XORWF 0, F, ACCESS FFEA E104 BNZ 0xfff4 26: Bat_Cas=K_CAS_BAT; FFEC 0EFF MOVLW 0xff FFEE CFE8 MOVFF 0xfe8, 0xf5f FFF0 FF5F NOP 27: } FFF2 D7EF BRA 0xffd2 28: else { 29: if (--Bat_Cas == 0) { FFF4 010F MOVLB 0xf FFF6 2F5F DECFSZ 0x5f, F, BANKED FFF8 D7EC BRA 0xffd2 30: Bat_Vysledek = Bat_Vysledek ^ 1; FFFA 7201 BTG 0x1, 0x1, ACCESS 31: } 32: } 33: 34: 35: } FFFC D7EA BRA 0xffd2