SkeeterB08
Newbie level 6
- Joined
- Sep 1, 2008
- Messages
- 14
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1,281
- Location
- NorthEast Mississippi, USA
- Activity points
- 1,397
list p=16f628 ; list directive to define processor
#include <p16f628.inc> ; processor specific variable definitions
; errorlevel -302 ;hide banking message
;*****
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _LVP_OFF
;*****
;internal osc settings
;*****
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x70 ; variable used for context saving
status_temp EQU 0x71 ; variable used for context saving
Count1 EQU 0X72 ; First Counter for Delay Loops
Count2 EQU 0X73 ; Second Counter for Delay Loops
;**********************************************************************
ORG 0x000 ; processor reset vector
goto Start ; go to beginning of program
;*****
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
;*****
Start
clrf PORTA
clrf PORTB
MOVLW B'00000111'
MOVWF CMCON ; Turn off comparator
bsf STATUS,RP0 ; bank one
movlw 0xFF
movwf PORTA ; porta all Input
movlw 0x00
movwf PORTB ; portb all Output
bcf STATUS,RP0 ; return to bank 0
;*****
movlw b'00000000' ;See datasheet for prefered
movwf OPTION_REG ;settings of OPTION_REG
bsf PORTB,7 ; Turn on Power LED
btfss PORTA,0 ; Check if Upper Sensor = 1
Goto Prestart ; If not go to prestart subroutine
bsf PORTB,6
Goto Run
;*****
Prestart
bsf PORTB,5 ; Turn on Warning LED
bsf PORTB,4 ; Turn on Refill LED
bsf PORTB,3 ; Turn On Relay Sub-Circuit
btfsc PORTA,0 ; If Upper Sensor = 1
Goto Run ; Go to Operation Mode
Run
btfss PORTA,0 ; If Upper Sensor = 0
bsf PORTB,5 ; Then turn on Warning LED
btfsc PORTA,0 ; If Upper Sensor = 1
decfsz Count1,1 ; Don't Decrement Counter 1
btfss PORTA,1 ; If Lower Sensor = 0
call Refill ; Go To Refill Subroutine
btfsc PORTA,1 ; If Lower Sensor = 0
decfsz Count2,1 ; Don't Decrement Counter2
goto Run
Refill
bsf PORTB,4 ; Turn on Refill LED
bsf PORTB,3 ; Turn on Refill Sub-Circuit
btfsc PORTA,0 ; If Upper Sensor = 1
bcf PORTB,3 ; Turn Off Refill Sub-Circuit
btfsc PORTA,0 ; If Upper Sensor = 1
bcf PORTB,4 ; Turn off Refill LED
btfsc PORTA,0 ; If Upper Sensor = 1
bcf PORTB,5 ; Turn off Warning LED
bsf PORTB,6
goto Run
;*****
END
Operation Mode
0 1 2 3 4 5 6 7
0 0 0 0 0 0 1 1
Warning
0 1 2 3 4 5 6 7
0 0 0 0 0 1 1 1
Refill Mode
0 1 2 3 4 5 6 7
0 0 0 1 1 1 0 1
list p=16f628 ; list directive to define processor
#include <p16f628.inc> ; processor specific variable definitions
errorlevel -302 ;hide banking message
;*****
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _LVP_OFF
;*****
;internal osc settings
;*****
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x70 ; variable used for context saving
status_temp EQU 0x71 ; variable used for context saving
Count1 EQU 0X20 ; First Counter for Delay
Count2 EQU 0X21 ; Second Counter for Delay
Count3 EQU 0X22 ; Third Counter for Delay
;**********************************************************************
ORG 0x000 ; processor reset vector
goto Start ; go to beginning of program
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
Start
clrf PORTA
clrf PORTB
MOVLW B'00000111'
MOVWF CMCON ; Turn off comparator
bsf STATUS,RP0 ; bank one
movlw 0xFF
movwf TRISA ; porta all Input
movlw 0x00
movwf TRISB ; portb all Output
bcf STATUS,RP0 ; return to bank 0
movlw b'00000000' ;See datasheet for prefered
movwf OPTION_REG ;settings of OPTION_REG
bsf PORTB,7 ; Turn on Power LED
btfss PORTA,0 ; Check if Upper Sensor = 1
Call Prestart ; If not go to prestart subroutine
btfsc PORTA,0 ; Check if Upper Sensor = 1
Goto Run ; Then go to Operation Mode
Prestart
movlw b'00011101'
btfsc PORTA,0
movlw b'00000011'
movwf PORTB
btfsc PORTA,0 ; If Upper Sensor = 1
Return ; Return to Startup Section
goto Prestart
Run
btfss PORTA,0 ; If Upper Sensor = 0
bsf PORTB,5 ; Then turn on Warning LED
btfsc PORTA,0 ; If Upper Sensor = 0
decfsz Count1,1 ; Don't Decrement Counter 1
btfss PORTA,1 ; If Lower Sensor = 0
Call Refill ; Go To Refill Subroutine
goto Run
Refill
movlw b'00011101'
btfsc PORTA,0
movlw b'00000011'
movfw PORTB
btfss PORTA,0
goto Refill
btfsc PORTA,0
Return
END
Refill
1 movlw b'00011101'
2 btfsc PORTA,0 ; If Upper Sensor = 0
3 movlw b'00000011' ; Output "Operation Mode"
4 movfw PORTB ; else, "Refill mode"
5 btfss PORTA,0 ; If upper sensor = 0
6 goto Refill ; Continue re-filling
7 movlw b'00011101'
8 movwf PORTB
9 Return ; Return back to Run
END
list p=16f628 ; list directive to define processor
#include <p16f628.inc> ; processor specific variable definitions
errorlevel -302 ;hide banking message
;*****
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _LVP_OFF
;*****
;internal osc settings
;*****
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x70 ; variable used for context saving
status_temp EQU 0x71 ; variable used for context saving
Count1 EQU 0X20 ; First Counter for Delay
Count2 EQU 0X21 ; Second Counter for Delay
Count3 EQU 0X22 ; Third Counter for Delay
;**********************************************************************
ORG 0x000 ; processor reset vector
goto Start ; go to beginning of program
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
Start
clrf PORTA
clrf PORTB
MOVLW B'00000111'
MOVWF CMCON ; Turn off comparator
bsf STATUS,RP0 ; bank one
movlw 0xFF
movwf TRISA ; porta all Input
movlw 0x00
movwf TRISB ; portb all Output
bcf STATUS,RP0 ; return to bank 0
movlw b'00000000' ;See datasheet for prefered
movwf OPTION_REG ;settings of OPTION_REG
btfss PORTA,0 ; Check if Upper Sensor = 1
Call Prestart ; If not go to Prestart Subroutine
Goto Run ; Then go to Operation Mode
Prestart
movlw b'10111000' ; Set Refill Mode
btfsc PORTA,0 ; Check If Upper Sensor = 1
movlw b'11000000' ; Then Set Operation Mode
movwf PORTB ; Move to PORTB
btfss PORTA,0 ; Check If Upper Sensor = 1
goto Prestart ; If Not Return to Top of subroutine
Return ; Return to Start
Run
movlw b'11000000' ; Set Operation Mode
btfss PORTA,0 ; Check if Upper Sensor = 1
movlw b'11100000' ; Set Warning Mode
movwf PORTB ; Move to PortB
btfss PORTA,1 ; Check If Lower Sensor = 1
Call Refill ; Go to Refill Subroutine
Goto Run ; Return to Top
Refill
movlw b'10111000' ; Set Refill Mode
btfsc PORTA,0 ; Check If Upper Sensor = 1
movlw b'11000000' ; Then Set Operation Mode
movwf PORTB ; Move to PORTB
btfss PORTA,0 ; Check If Upper Sensor = 1
goto Refill ; If Not Return to Top of subroutine
Return ; Return to Start
END
list p=16f628 ; list directive to define processor
#include <p16f628.inc> ; processor specific variable definitions
errorlevel -302 ;hide banking message
;*****
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _LVP_OFF
;*****
;internal osc settings
;*****
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x70 ; variable used for context saving
status_temp EQU 0x71 ; variable used for context saving
Count1 EQU 0X20 ; First Counter for Delay
;**********************************************************************
ORG 0x000 ; processor reset vector
goto Start ; go to beginning of program
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
Start
clrf PORTA
clrf PORTB
MOVLW B'00000111'
MOVWF CMCON ; Turn off comparator
bsf STATUS,RP0 ; bank one
movlw 0xFF
movwf TRISA ; porta all Input
movlw 0x00
movwf TRISB ; portb all Output
movlw b'00000000' ;See datasheet for prefered
movwf OPTION_REG ;settings of OPTION_REG
bcf STATUS,RP0 ; return to bank 0
call Systest
btfss PORTA,0 ; Check if Upper Sensor = 1
Call Refill ; If not go to Refill Subroutine
Goto Run ; Then go to Operation Mode
Systest
movlw b'10000000' ; Set PortB,7 High the others Low
movwf PORTB
movlw 0x05 ; Set Count1 to 05H
movwf Count1
call Delay ; Call Delay Subroutine
movlw b'01000000' ; Set PortB,6 High the others Low
movwf PORTB
movlw 0x05 ;Reset Counter1 to 05H
movwf Count1
call Delay ;Call Delay Subroutine
movlw b'00100000' ; Set PortB,5 High the others Low
movwf PORTB
movlw 0x05 ;Reset Counter1 to 05H
movwf Count1
call Delay ; Call Delay Subroutine
movlw b'00010000' ; Set PortB,4 High the others Low
movwf PORTB
movlw 0x05 ; Reset Counter to 05H
movwf Count1
Call Delay ; Call Delay Subroutine
movlw b'11110000' ; Set All Indicators High
movwf PORTB
movlw 0x05 ; Last Counter Reset to 05H
movwf Count1
call Delay ; Call Delay Subroutine
movlw b'10000000' ; Turn on Power LED
movwf PORTB
RETURN ;Return to main program
Run
movlw b'11000000' ; Set Operation Mode
btfss PORTA,0 ; Check if Upper Sensor = 1
movlw b'11100000' ; Set Warning Mode
movwf PORTB ; Move to PortB
btfss PORTA,1 ; Check If Lower Sensor = 1
Call Refill ; Go to Refill Subroutine
Goto Run ; Return to Top
Refill
movlw b'10111000' ; Set Refill Mode
btfsc PORTA,0 ; Check If Upper Sensor = 1
movlw b'11000000' ; Then Set Operation Mode
movwf PORTB ; Move to PORTB
btfss PORTA,0 ; Check If Upper Sensor = 1
goto Refill ; If Not Return to Top of subroutine
Return ; Return to Start
Delay
decfsz Count1,1 ;Decrement Count1 1
goto Delay ;If Count1 > 0 Return to top
Return ;Return to Previous place
END
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?