;---------------------------------------------------------- ; Code Produced by the PROTON+ Compiler. Version 3.2.5.5 ; Copyright Rosetta Technologies/Crownhill Associates ; Written by Les Johnson. February 2007 ;---------------------------------------------------------- NOLIST #include "C:\PICPROGRAMMAS\IR_RC5\PBP_REC_A4.PBP" LIST WD1 = 38 WD1H = 39 COMMAND = 40 SYSTEEM = 41 BD1 = 42 #Define BLINKAANTAL 10 #Define BLINKTIJD 500 #Define BLINKTIJDH 1 #Define BLINKTIJDSNEL 150 #Define DEFAULTSYS 0 #Define GLITCH 52 #Define OK 50 #Define SAMPLE 300 #Define SAMPLEH 1 #Define AAN 0 #Define FALSE 0 #Define HOOG 1 #Define LAAG 0 #Define OFF 0 #Define ON 1 #Define TRUE 1 #Define UIT 1 #Define UITGANG0 PORTB,0 #Define UITGANG1 PORTB,1 #Define UITGANG2 PORTB,2 #Define UITGANG3 PORTB,3 #Define UITGANG4 PORTB,4 #Define UITGANG5 PORTB,5 #Define LED PORTA,2 #Define IR_ONTVANGER PORTA,3 #Define FOUTONTVANGST _B#VR1,0 #Define PROGRAMMODE _B#VR1,1 #Define TOGGBIT _B#VR1,2 #Define WAARDE _B#VR1,3 #Define ID1 _B#VR1,4 F2_SOF equ $ ; PBP_REC_A4.PRP F2_EOF equ $ ; PBP_REC_A4.PRP F1_SOF equ $ ; PBP_REC_A4.BAS F1_000068 equ $ ; in [PBP_REC_A4.BAS] CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_Off;, CP ; BODEN_OFF, CPD;Geen kristal, PORTA.5(was 3) = input F1_000071 equ $ ; in [PBP_REC_A4.BAS] ALL_DIGITAL TRUE Movlw 7 Movwf CMCON F1_000074 equ $ ; in [PBP_REC_A4.BAS] DELAYMS 1000 ;PAS NA 1 SECONDE DE LED AAN ZODAT ZEKER IS DAT DE PIC VOORAAN START (GERESET IS) Movlw 3 Movwf PP1H Movlw 232 Call dly@w F1_000075 equ $ ; in [PBP_REC_A4.BAS] HIGH PORTA.2 ;AFREGELEN: ONTVANGST-LED MOET NA 1 MINUUT OPLICHTEN Bsf STATUS,5 ram_bank = 1 Bcf TRISA,2 Bcf STATUS,5 ram_bank = 0 Bsf PORTA,2 F1_000076 equ $ ; in [PBP_REC_A4.BAS] DELAYMS 60000 Movlw 234 Movwf PP1H Movlw 96 Call dly@w F1_000077 equ $ ; in [PBP_REC_A4.BAS] LOW PORTA.2 Bsf STATUS,5 ram_bank = 1 Bcf TRISA,2 Bcf STATUS,5 ram_bank = 0 Bcf PORTA,2 F1_000130 equ $ ; in [PBP_REC_A4.BAS] PORTA = %00000000 ;Alle uitgangen 0 maken Clrf PORTA F1_000131 equ $ ; in [PBP_REC_A4.BAS] PORTB = %00000000 Clrf PORTB F1_000132 equ $ ; in [PBP_REC_A4.BAS] TRISA = %00001000 ; PortA.3 Ingang IR signaal ,PortA.5 Reserve, Overige PortA Uitgangen Movlw 8 Bsf STATUS,5 ram_bank = 1 Movwf TRISA F1_000133 equ $ ; in [PBP_REC_A4.BAS] TRISB = %00000000 ; PortB allemaal uitgangen Clrf TRISB F1_000151 equ $ ; in [PBP_REC_A4.BAS] CLEAR Movlw 32 Movwf FSR Movlw 96 Bcf STATUS,5 ram_bank = 0 Call cl@r Movlw 160 Movwf FSR Movlw 80 Call cl@r Movlw 32 Movwf FSR Movlw 48 Call cl@rh F1_000152 equ $ ; in [PBP_REC_A4.BAS] DELAYMS 100 ;Stabilisering signalen Movlw 100 Call dl@ms F1_000154 equ $ ; in [PBP_REC_A4.BAS] GOSUB AllesUit ;Alle uitgangen laag Call ALLESUIT F1_000157 equ $ ; in [PBP_REC_A4.BAS] LED = ON ;Kenmerk dat de processor loopt, LED even aan/uit Bsf PORTA,2 F1_000158 equ $ ; in [PBP_REC_A4.BAS] DELAYMS 400 ;IR-ontvanger stabilisering, tevens LED aan/uit tijd Movlw 1 Movwf PP1H Movlw 144 Call dly@w F1_000159 equ $ ; in [PBP_REC_A4.BAS] FOR BD1 = 1 TO 255 ;Meteen checken of er wat wordt ontvangen (= programmeermode) kan net in een dood punt vallen, daarom vaker meten Movlw 1 Movwf BD1 fr@lb2 F1_000160 equ $ ; in [PBP_REC_A4.BAS] IF IR_Ontvanger = AAN THEN ProgramMode = TRUE Btfsc PORTA,3 Goto bc@LL4 Bsf _B#VR1,1 bc@LL4 F1_000161 equ $ ; in [PBP_REC_A4.BAS] DELAYUS 500 Movlw 1 Movwf PP0H Movlw 244 Call dlus@w F1_000162 equ $ ; in [PBP_REC_A4.BAS] NEXT Incf BD1,F Btfss STATUS,2 Goto fr@lb2 nx@lb3 F1_000163 equ $ ; in [PBP_REC_A4.BAS] LED = OFF Bcf PORTA,2 F1_000166 equ $ ; in [PBP_REC_A4.BAS] IF ProgramMode = TRUE THEN ;Als in programmeermode, dan... Btfss _B#VR1,1 Goto bc@LL6 F1_000167 equ $ ; in [PBP_REC_A4.BAS] FOR BD1 = 1 TO 9 ;LED even laten knipperen en daarna laten branden ten teken dat de programmeermode actief is Movlw 1 Movwf BD1 fr@lb8 Movlw 10 Subwf BD1,W Btfsc STATUS,0 Goto nx@lb9 F1_000168 equ $ ; in [PBP_REC_A4.BAS] LED = ~LED Clrw Btfss PORTA,2 Addlw 1 Btfsc STATUS,2 Bcf PORTA,2 Btfss STATUS,2 Bsf PORTA,2 F1_000169 equ $ ; in [PBP_REC_A4.BAS] DELAYMS BlinkTijd Movlw 1 Movwf PP1H Movlw 244 Call dly@w F1_000170 equ $ ; in [PBP_REC_A4.BAS] NEXT Incf BD1,F Btfss STATUS,2 Goto fr@lb8 nx@lb9 F1_000171 equ $ ; in [PBP_REC_A4.BAS] GOSUB WachtOpToetsLosLaten Call WACHTOPTOETSLOSLATEN F1_000172 equ $ ; in [PBP_REC_A4.BAS] ENDIF bc@LL6 F1_000174 equ $ ; in [PBP_REC_A4.BAS] GOTO Start Goto START ALLESUIT F1_000179 equ $ ; in [PBP_REC_A4.BAS] Uitgang0 = OFF ;Alle uitgangen uitzetten als geen toets is ingedrukt Bcf PORTB,0 F1_000180 equ $ ; in [PBP_REC_A4.BAS] Uitgang1 = OFF Bcf PORTB,1 F1_000181 equ $ ; in [PBP_REC_A4.BAS] Uitgang2 = OFF Bcf PORTB,2 F1_000182 equ $ ; in [PBP_REC_A4.BAS] Uitgang3 = OFF Bcf PORTB,3 F1_000183 equ $ ; in [PBP_REC_A4.BAS] Uitgang5 = OFF Bcf PORTB,5 F1_000192 equ $ ; in [PBP_REC_A4.BAS] IF ProgramMode = FALSE THEN LED = OFF Btfsc _B#VR1,1 Goto bc@LL10 Bcf PORTA,2 bc@LL10 F1_000193 equ $ ; in [PBP_REC_A4.BAS] RETURN Return BITOPHALEN F1_000197 equ $ ; in [PBP_REC_A4.BAS] Waarde = IR_Ontvanger ;Maak Waarde 0 of 1 afhankelijk van ontvangen IR code Bcf STATUS,1 Btfsc PORTA,3 Bsf STATUS,1 Btfsc STATUS,1 Bsf _B#VR1,3 Btfss STATUS,1 Bcf _B#VR1,3 F1_000198 equ $ ; in [PBP_REC_A4.BAS] BD1 = 0 Clrf BD1 F1_000199 equ $ ; in [PBP_REC_A4.BAS] WHILE IR_Ontvanger = Waarde AND BD1 < Ok;Niveau moet binnen een bepaalde tijd veranderen bc@LL11 Clrw Btfsc PORTA,3 Addlw 1 Btfsc _B#VR1,3 Sublw 1 Btfsc STATUS,2 Movlw 1 Btfss STATUS,2 Clrw Movwf SP#P9 Movlw 50 Subwf BD1,W Movlw 1 Btfsc STATUS,0 Clrw Andwf SP#P9,W Btfsc STATUS,2 Goto bc@LL12 F1_000200 equ $ ; in [PBP_REC_A4.BAS] INC BD1 Incf BD1,F F1_000201 equ $ ; in [PBP_REC_A4.BAS] WEND Goto bc@LL11 bc@LL12 F1_000202 equ $ ; in [PBP_REC_A4.BAS] IF Ok = BD1 THEN FoutOntvangst = TRUE ;Error in ontvangst, niet binnen de tijd een niveau-verandering (Geen RC5 of slechte ontvangst) Movlw 50 Subwf BD1,W Btfss STATUS,2 Goto bc@LL14 Bsf _B#VR1,0 bc@LL14 F1_000203 equ $ ; in [PBP_REC_A4.BAS] DELAYUS 1000 Movlw 3 Movwf PP0H Movlw 232 Call dlus@w F1_000204 equ $ ; in [PBP_REC_A4.BAS] RETURN Return WACHTOPTOETSLOSLATEN F1_000208 equ $ ; in [PBP_REC_A4.BAS] WD1 = Sample Movlw 1 Movwf WD1H Movlw 44 Movwf WD1 F1_000209 equ $ ; in [PBP_REC_A4.BAS] WHILE WD1 > 0 ;Wacht zolang de toets van de afstandsbediening is ingedrukt, als 300 samples niets is ontvangen, dan is toets losgelaten bc@LL15 Movf WD1,F Btfss STATUS,2 Goto cp@lb3 Movf WD1H,F Btfsc STATUS,2 Goto bc@LL16 cp@lb3 F1_000210 equ $ ; in [PBP_REC_A4.BAS] DEC WD1 Decf WD1,F Incf WD1,W Btfsc STATUS,2 Decf WD1H,F F1_000211 equ $ ; in [PBP_REC_A4.BAS] IF IR_Ontvanger = AAN THEN WD1 = Sample ;Opnieuw beginnen met samples tellen Btfsc PORTA,3 Goto bc@LL18 Movlw 1 Movwf WD1H Movlw 44 Movwf WD1 bc@LL18 F1_000212 equ $ ; in [PBP_REC_A4.BAS] DELAYUS 500 ;300 x 500us = 150ms Movlw 1 Movwf PP0H Movlw 244 Call dlus@w F1_000213 equ $ ; in [PBP_REC_A4.BAS] WEND Goto bc@LL15 bc@LL16 F1_000214 equ $ ; in [PBP_REC_A4.BAS] RETURN Return START F1_000222 equ $ ; in [PBP_REC_A4.BAS] WHILE IR_Ontvanger = UIT : WEND ;Wacht op ontvangst bc@LL19 Btfss PORTA,3 Goto bc@LL20 Goto bc@LL19 bc@LL20 F1_000224 equ $ ; in [PBP_REC_A4.BAS] BD1 = 0 Clrf BD1 F1_000225 equ $ ; in [PBP_REC_A4.BAS] WHILE IR_Ontvanger = AAN AND BD1 < Glitch bc@LL21 Movlw 1 Btfsc PORTA,3 Clrw Movwf SP#P9 Movlw 52 Subwf BD1,W Movlw 1 Btfsc STATUS,0 Clrw Andwf SP#P9,W Btfsc STATUS,2 Goto bc@LL22 F1_000226 equ $ ; in [PBP_REC_A4.BAS] INC BD1 Incf BD1,F F1_000227 equ $ ; in [PBP_REC_A4.BAS] WEND Goto bc@LL21 bc@LL22 F1_000228 equ $ ; in [PBP_REC_A4.BAS] IF BD1 < Glitch THEN Start ;Error in ontvangst (Geen RC5 code of glitch) Movlw 52 Subwf BD1,W Btfsc STATUS,0 Goto bc@LL24 Goto START bc@LL24 F1_000230 equ $ ; in [PBP_REC_A4.BAS] LED = ON ;IR-signaal ontvangen Bsf PORTA,2 F1_000232 equ $ ; in [PBP_REC_A4.BAS] DELAYUS 600 ;900 - 300: Header van RC5 vermijden Movlw 2 Movwf PP0H Movlw 88 Call dlus@w F1_000234 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Command.6 = ~Waarde ;Extended bit (geinverteerd) Call BITOPHALEN Clrw Btfss _B#VR1,3 Addlw 1 Btfsc STATUS,2 Bcf COMMAND,6 Btfss STATUS,2 Bsf COMMAND,6 F1_000235 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : ToggBit = Waarde Call BITOPHALEN Bsf _B#VR1,2 Btfss _B#VR1,3 Bcf _B#VR1,2 F1_000236 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Systeem.4 = Waarde Call BITOPHALEN Bsf SYSTEEM,4 Btfss _B#VR1,3 Bcf SYSTEEM,4 F1_000237 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Systeem.3 = Waarde Call BITOPHALEN Bsf SYSTEEM,3 Btfss _B#VR1,3 Bcf SYSTEEM,3 F1_000238 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Systeem.2 = Waarde Call BITOPHALEN Bsf SYSTEEM,2 Btfss _B#VR1,3 Bcf SYSTEEM,2 F1_000239 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Systeem.1 = Waarde Call BITOPHALEN Bsf SYSTEEM,1 Btfss _B#VR1,3 Bcf SYSTEEM,1 F1_000240 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Systeem.0 = Waarde Call BITOPHALEN Bsf SYSTEEM,0 Btfss _B#VR1,3 Bcf SYSTEEM,0 F1_000241 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Command.5 = Waarde Call BITOPHALEN Bsf COMMAND,5 Btfss _B#VR1,3 Bcf COMMAND,5 F1_000242 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Command.4 = Waarde Call BITOPHALEN Bsf COMMAND,4 Btfss _B#VR1,3 Bcf COMMAND,4 F1_000243 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Command.3 = Waarde Call BITOPHALEN Bsf COMMAND,3 Btfss _B#VR1,3 Bcf COMMAND,3 F1_000244 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Command.2 = Waarde Call BITOPHALEN Bsf COMMAND,2 Btfss _B#VR1,3 Bcf COMMAND,2 F1_000245 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Command.1 = Waarde Call BITOPHALEN Bsf COMMAND,1 Btfss _B#VR1,3 Bcf COMMAND,1 F1_000246 equ $ ; in [PBP_REC_A4.BAS] GOSUB BitOphalen : Command.0 = Waarde Call BITOPHALEN Bsf COMMAND,0 Btfss _B#VR1,3 Bcf COMMAND,0 F1_000248 equ $ ; in [PBP_REC_A4.BAS] IF FoutOntvangst = TRUE THEN ;Error in ontvangst, niet binnen de tijd een niveau-verandering (Geen RC5 of slechte ontvangst) Btfss _B#VR1,0 Goto bc@LL26 F1_000249 equ $ ; in [PBP_REC_A4.BAS] FoutOntvangst = FALSE ;Reset Bcf _B#VR1,0 F1_000250 equ $ ; in [PBP_REC_A4.BAS] GOTO Start ;Lus niet verder uitvoeren Goto START F1_000251 equ $ ; in [PBP_REC_A4.BAS] ENDIF bc@LL26 F1_000253 equ $ ; in [PBP_REC_A4.BAS] IF ProgramMode = TRUE THEN Programmeren ;Ander systeem in programmeren Btfss _B#VR1,1 Goto bc@LL28 Goto PROGRAMMEREN bc@LL28 F1_000255 equ $ ; in [PBP_REC_A4.BAS] IF Systeem = EREAD 0 THEN ;Alleen uitvoeren als het ontvangen systeem gelijk is aan het voorgeprogrammeerde systeem Movlw 0 Call Ee@rd Movwf PBP#VAR0 Movf SYSTEEM,W Subwf PBP#VAR0,W Btfss STATUS,2 Goto bc@LL30 F1_000256 equ $ ; in [PBP_REC_A4.BAS] SELECT CASE Command ;De bijbehorende uitgang aanzetten F1_000257 equ $ ; in [PBP_REC_A4.BAS] CASE 0: Uitgang0 = ON Movf COMMAND,F Btfss STATUS,2 Goto bc@LL32 Bsf PORTB,0 Goto bc@LL31 bc@LL32 F1_000258 equ $ ; in [PBP_REC_A4.BAS] CASE 1: Uitgang1 = ON Movlw 1 Subwf COMMAND,W Btfss STATUS,2 Goto bc@LL35 Bsf PORTB,1 Goto bc@LL31 bc@LL35 F1_000259 equ $ ; in [PBP_REC_A4.BAS] CASE 2: Uitgang2 = ON Movlw 2 Subwf COMMAND,W Btfss STATUS,2 Goto bc@LL37 Bsf PORTB,2 Goto bc@LL31 bc@LL37 F1_000260 equ $ ; in [PBP_REC_A4.BAS] CASE 3: Uitgang3 = ON Movlw 3 Subwf COMMAND,W Btfss STATUS,2 Goto bc@LL39 Bsf PORTB,3 Goto bc@LL31 bc@LL39 F1_000261 equ $ ; in [PBP_REC_A4.BAS] CASE 4: Uitgang4 = ON Movlw 4 Subwf COMMAND,W Btfss STATUS,2 Goto bc@LL41 Bsf PORTB,4 Goto bc@LL31 bc@LL41 F1_000262 equ $ ; in [PBP_REC_A4.BAS] CASE 5: Uitgang5 = ON Movlw 5 Subwf COMMAND,W Btfss STATUS,2 Goto bc@LL43 Bsf PORTB,5 F1_000271 equ $ ; in [PBP_REC_A4.BAS] CASE ELSE GOTO Start ;Anders blijft LED continue branden als Systeem = EREAD 0, maar niet toets 0 - 9, hoort niet Goto bc@LL45 bc@LL43 Goto START F1_000272 equ $ ; in [PBP_REC_A4.BAS] END SELECT bc@LL45 bc@LL31 F1_000275 equ $ ; in [PBP_REC_A4.BAS] ENDIF bc@LL30 F1_000277 equ $ ; in [PBP_REC_A4.BAS] GOTO Start Goto START PROGRAMMEREN F1_000281 equ $ ; in [PBP_REC_A4.BAS] EWRITE 0, [Systeem] ;Sla het systeem op Bsf STATUS,5 ram_bank = 1 Clrf EEADR Bcf STATUS,5 ram_bank = 0 Movf SYSTEEM,W Call ee@wr F1_000282 equ $ ; in [PBP_REC_A4.BAS] ProgramMode = FALSE Bcf _B#VR1,1 F1_000284 equ $ ; in [PBP_REC_A4.BAS] FOR BD1 = 1 TO BlinkAantal * 2 Movlw 1 Movwf BD1 fr@lb47 Movlw 21 Subwf BD1,W Btfsc STATUS,0 Goto nx@lb48 F1_000285 equ $ ; in [PBP_REC_A4.BAS] LED = ~LED ;Laat LED een paar maal knipperen Clrw Btfss PORTA,2 Addlw 1 Btfsc STATUS,2 Bcf PORTA,2 Btfss STATUS,2 Bsf PORTA,2 F1_000286 equ $ ; in [PBP_REC_A4.BAS] DELAYMS BlinkTijdSnel Movlw 150 Call dl@ms F1_000287 equ $ ; in [PBP_REC_A4.BAS] NEXT Incf BD1,F Btfss STATUS,2 Goto fr@lb47 nx@lb48 F1_000289 equ $ ; in [PBP_REC_A4.BAS] GOSUB WachtOpToetsLosLaten Call WACHTOPTOETSLOSLATEN F1_000290 equ $ ; in [PBP_REC_A4.BAS] GOTO Start Goto START F1_EOF equ $ ; PBP_REC_A4.BAS LIST END