; Source created with Parsic Version 3.x

; at              : 2008.11.22. 21:10:34


; Project File    : C:\PROGRA~1\PARSIC\HE\AD_TESZT.PIC

; Project Version : 1.0.2

; Created         : 2008.11.22. 21:04:46

; Last change     : 2008.11.22. 21:10:13

	PROCESSOR 16F876

	INCLUDE P16F876.INC

	RADIX DEC


	__IDLOCS H'0100'

	__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_ON & _XT_OSC & _LVP_OFF & _CPD_OFF & _DEBUG_OFF

; Diverses

ZERO	EQU Z	; ZERO-Flag
CARRY	 EQU C	; CARRY-Flag


; Variable

ADC0	= 32	; located in Bank 0
ADC0_HI	= 33	; located in Bank 0
RAM	= 34	; located in Bank 0
SYS_TMP1	= 114	; located in Bank 0, 1, 2, 3
SYS_FSAV	= 115	; located in Bank 0, 1, 2, 3

	ERRORLEVEL -302	; disable warning (Bankswitching)
	ERRORLEVEL -306	; disable warning (Pageswitching)

;****************************************
;Programmanfang
;****************************************

	ORG 0

	CLRF STATUS	; switch to RAM-Bank 0
	MOVLW HIGH SYS_INIT	; set page
	MOVWF PCLATH
	GOTO SYS_INIT
	RETURN

;****************************************
; Subroutines
;****************************************

;***************************************************
; Read  -> AN0
;***************************************************

READ_AN0

	MOVLW B'100'
	BSF STATUS,RP0	; Bank 1
	BCF STATUS,RP1	; Bank 1
	MOVWF ADCON1
	BSF TRISA,0
	BSF ADCON1,ADFM	; Right-Justified

	MOVLW B'11000001'	; CH0
	BCF STATUS,RP0	; Bank 0
	MOVWF ADCON0
	MOVLW 5
	MOVWF SYS_TMP1

SYS_ADC_LABEL_0
	DECFSZ SYS_TMP1,F
	GOTO SYS_ADC_LABEL_0

	BSF ADCON0,GO	; Start convert

SYS_ADC_LABEL_1

	BTFSC ADCON0,GO	; ready ?
	GOTO SYS_ADC_LABEL_1	; no

	BSF STATUS,RP0	; Bank 1
	MOVFW ADRESL
	BCF STATUS,RP0	; Bank 0
	MOVWF ADC0
	MOVFW ADRESH
	MOVWF ADC0_HI

	MOVLW 6
	BSF STATUS,RP0	; Bank 1
	MOVWF ADCON1
	MOVLW B'11111111'
	MOVWF TRISA
	RETURN


;****************************************
;Initialisierung
;****************************************


SYS_INIT

	MOVLW B'00000000'
	MOVWF INTCON

; Set output before direction

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVLW B'00000000'
	MOVWF PORTA

	MOVLW B'00000000'
	MOVWF PORTB

	MOVLW B'00000000'
	MOVWF PORTC

	MOVLW 15
	BSF STATUS,RP0	; Bank 1
	MOVWF OPTION_REG

	MOVLW 6	; all Digital
	MOVWF ADCON1

; Richtung setzen

	MOVLW B'11111111'
	MOVWF TRISA

	MOVLW B'11111100'
	MOVWF TRISB

	MOVLW B'11111111'
	MOVWF TRISC

; init vars


; Clear RAM

	BCF STATUS,IRP
	MOVLW 32
	MOVWF FSR
CR1
	CLRF INDF
	INCF FSR,F
	
	BTFSS FSR,7
	GOTO CR1
	BSF FSR,5
CR2
	CLRF INDF
	INCF FSR,F
	MOVLW H'F0'
	SUBWF FSR,W
	BTFSS STATUS,ZERO
	GOTO CR2
	BSF STATUS,IRP
	MOVLW 16
	MOVWF FSR
CR3
	CLRF INDF
	INCF FSR,F
	MOVLW H'70'
	SUBWF FSR,W
	BTFSS STATUS,ZERO
	GOTO CR3
	MOVLW 144
	MOVWF FSR
CR4
	CLRF INDF
	INCF FSR,F
	MOVLW H'F0'
	SUBWF FSR,W
	BTFSS STATUS,ZERO
	GOTO CR4



;**********************************
;******* Haupt-Programm ***********
;**********************************

MAIN

	CALL READ_AN0
;***************************************************
; Vergleich -> IF1
;***************************************************

	MOVLW HIGH 500
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	SUBWF ADC0_HI,W	; F - W -> W

	BTFSS STATUS,ZERO	; Wenn ZERO gesetzt LOW-Byte testen
	GOTO LABEL_IF1_CHECK
	MOVLW LOW 500
	SUBWF ADC0,W	; F - W -> W

LABEL_IF1_CHECK
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS STATUS,CARRY	; Test auf -> <=
	GOTO LABEL_IF1_TRUE
	BTFSS STATUS,ZERO
	GOTO LABEL_IF1_FALSE

LABEL_IF1_TRUE
	BSF PORTB,0
	GOTO LABEL_IF1_EXIT

LABEL_IF1_FALSE
	BCF PORTB,0

LABEL_IF1_EXIT
;***************************************************
; Vergleich -> IF2
;***************************************************

	MOVLW HIGH 500
	SUBWF ADC0_HI,W	; F - W -> W

	BTFSS STATUS,ZERO	; Wenn ZERO gesetzt LOW-Byte testen
	GOTO LABEL_IF2_CHECK
	MOVLW LOW 500
	SUBWF ADC0,W	; F - W -> W

LABEL_IF2_CHECK
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS STATUS,CARRY	; Test auf -> >=
	GOTO LABEL_IF2_FALSE

LABEL_IF2_TRUE
	BSF PORTB,1
	GOTO LABEL_IF2_EXIT

LABEL_IF2_FALSE
	BCF PORTB,1

LABEL_IF2_EXIT
;****************************************

	GOTO MAIN


	END

