Francois Robbertze wrote 2012-03-03 17:51:
{Quote hidden}> I want to test and set a Flag in Bank 1
>
> I am unable to set/test the 'FanOnFlag'. (I use a Macro to switch banks eg.
> #bank_1 and #bank_0)
>
> I have the following:
>
> LIST P = 16F873A
> ;
> ;
> ;
> #Define FanOnFlag BitFlag7,0
> ;
> ;
> ;
> ;bank 1
> huns equ 0xA0
> tens equ 0xA1
> ones equ 0xA2
> BIN equ 0xA3
> Count equ 0xA4
> UpperT equ 0xA5
> LowerT equ 0xA6
> BitFlag7 equ 0xA7
> WorkTemp equ 0xA8
> ;
> ;
> ;
> #bank_1
> bcf FanOnFlag
> #bank_0
> ;
> ;
> ;
> Main
> call ReadTemp ;Read the Appliance Temperature
> btfsc DallasErrorFlag ;Test for failure in dallas18B20
> goto DallasError ;Handle an Temperature sensor Error
>
> movf Temperature, W ;Temperature return in Var Temperature
> #bank_1
> movwf WorkTemp
>
> movlw 0x40 ;Set Upper Temp = 32degC - 64 = 0x40
> movwf UpperT
>
> movlw 0x38 ;Set Lower Temp = 28degC - 56 = 0x38
> movwf LowerT
>
> call Thermostat ;check temperature of unit
> #bank_0
> ;
> ;
> ;
> Thermostat
> btfss FanOnFlag ;test if fan is on
> goto Fan_is_off ;NO - goto Fan_is_off
>
> movf WorkTemp, W ;test if temp is lower than Lower Limit
> subwf LowerT, W
> btfss STATUS, C ;skip if temp is lower than limit
> return
>
> FanOff
> bcf Fan
> bcf FanOnFlag ;remember state
> #bank_0
> return
>
> Fan_is_off
> movf WorkTemp, W ;test if temperature is higher than Upper Limit
> subwf UpperT, W
> btfsc STATUS, C
> return
>
> FanOn
> bsf Fan
> bsf FanOnFlag
> return
>
> DallasError
> bcf Fan
> return
>
> ;**************************End of Thermostat Routine************************
> ;
> ;
>
Switch to relocatable mode.
Then do something like :
Myvars UDATA
FanOnFlag RES 1
....
....
BANKSEL FanOnFlag
bcf FanOnFlag
For faster access to "flags" I'd use (no need for BANKSEL) :
Myvars UDATA_SHR
FanOnFlag RES 1
....
....
bcf FanOnFlag