Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ******* PROCESSOR DEFINITIONER **********************************************************
- processor 16f877a ;Sets processor
- #include p16f877a.inc
- ; errorlevel -302 ;fjerner meddelser om forkerte banker fra fejl listen
- ; errorlevel -305 ;fjerner meddelser om forkerte banker fra fejl listen
- ; ******* COMPILER configuration bits *****************************************************
- __config _HS_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF
- ; ******* DEFFINITION AF VARIABLE *********************************************************
- #include "SDUboard.var" ;Variable som bruges af SDUboard 0x79 - 0x7F)
- ;INDSÆT DINE VARIABLE HER (start med 0x20)
- ; ******* OPSÆTNING AF PROGRAM POINTERE ***************************************************
- org 0x0000 ;Programstart efter et reset
- GOTO init ;Gå til opsætning
- org 0x0004 ;Første position efter interrupt-vektor
- GOTO ISR
- Delay1 EQU 0x20
- Delay2 EQU 0x21
- Delay3 EQU 0x22
- TEMP EQU 0x23
- THREE EQU 0x24
- TIME EQU 0x25
- Delay4 EQU 0x26
- ; ******* INCLUDEREDE FILER ***************************************************************
- #Include "SDUboard.LIB" ; SDU PICborad subroutine bibliotek.
- ; ******* INITIALISERING AF PROGRAM *****************************************************
- init
- CALL LCD_Init
- BCF STATUS,RP1 ; Benytter kun bank 0 og 1
- BSF STATUS,RP0 ; GÅR TIL BANK 1
- CLRF CMCON ;Slår komperatore fra }
- BCF OPTION_REG,INTEDG ; Sætter interupt til falling edge
- ;****************'Sætter trigger og echo lave***************
- BCF TRISB,0 ;ECHO ;
- BCF TRISB,6 ;Trigger ;Sætter Trigger og Echo som outputs (ECHO BURDE VÆRE EN INDGANG)
- BCF TRISB,1 ; Sætter udgang til LED
- BSF TRISB,2 ; Sætter LDR som en indgang
- BCF STATUS,RP0 ; GÅR TIL BANK 0
- BCF PORTB,0 ;ECHO ;
- BCF PORTB,6 ;TRIGGER ;Sætter trigger og Echo lave (ECHO BURDE VÆRE EN INDGANG)
- BSF T1CON,0 ;Tænder timer 1
- MOVLW d'3'
- MOVWF THREE ;Flytter tallet 3 ind i Three registeret
- ;*****************Gør echo til input**********************'
- BSF STATUS,RP0 ; GÅR TIL BANK 1
- BSF TRISB,0 ;ECHO ;Sætter Echo som input
- BCF STATUS,RP0 ; GÅR TIL BANK 0
- BSF INTCON,GIE ; Tillader interrupts
- BSF INTCON,PEIE ; Tillader interrupts fra peripherals
- BSF INTCON,INTE ; Tillader interrupt fra RB0-pinen
- ; ******* HOVEDPROGRAM ********************************************************************
- main
- ;**********Sæt trigger høj i 10 us******************
- CALL PulsTen ;Sætter trigger høj i 10 US
- Infinite
- BTFSS TEMP,0 ;Test tilfældigt bit (Bit bliver sat efter interrupt)
- goto Infinite
- BCF TEMP,0 ;Fjern tilfædligt bit (Reset af test bit)
- goto main
- ISR
- MOVFW TMR1H
- MOVWF TIME
- BCF INTCON,0
- BCF INTCON,1
- BCF INTCON,2
- BCF INTCON,3 ;Clearer interrupt bits så det er muligt at gå til interrupt igen
- MOVF TIME,w
- CALL BIN2DEC
- MOVF CIF100,w
- CALL CONV2ASCII
- CALL LCD_Data
- MOVF CIF10,w
- CALL CONV2ASCII
- CALL LCD_Data
- MOVF CIF1,w
- CALL CONV2ASCII
- CALL LCD_Data
- MOVLW CursLeft
- CALL LCD_Reg
- MOVLW CursLeft
- CALL LCD_Reg
- MOVLW CursLeft
- CALL LCD_Reg
- MOVLW d'80' ;Tal der bestemmer afstand for objekt
- SUBWF TIME ;Sammenligningsprocess
- BTFSC STATUS,0 ;Skipper hvis resultatet er negativt
- CALL LEDOFF ;Slukker LED
- BTFSS STATUS,0 ;Skipper hvis resultatet er positivt
- CALL LEDON ;Tænder LED i en bestemt mængde tid
- BSF TEMP,0 ;Sæt et tilfældigt bit (For at undslippe det uendelige loop)
- RETFIE
- ;*******Sender et 10 mikro sekunders signal********
- PulsTen
- MOVLW d'8'
- MOVWF Delay4
- BSF PORTB,6 ;Sætter trigger høj
- PulsLoop DECFSZ Delay4
- goto PulsLoop
- BCF PORTB,6 ;Sætter trigger lav
- CLRF TMR1L
- CLRF TMR1H
- RETURN
- ;*****************DELAY*******************************************************************
- Timeout
- MOVLW D'6' ; Tidsforsinkelse på ca. 60 ms
- MOVWF Delay3 ;
- Loop12 MOVLW D'115' ; h'73'= 115 tælles op <=> 255-115 =140 der tælles ned
- MOVWF Delay1 ;
- MOVLW D'32' ; h'DF'= 223 tælles op <=> 255-223 =32 der tælles ned
- MOVWF Delay2 ;
- Loop1 DECFSZ Delay1,F ;
- GOTO Loop1 ;
- MOVLW D'115' ;
- MOVWF Delay1 ;
- DECFSZ Delay2,F ;
- GOTO Loop1 ;
- DECFSZ Delay3,F ;
- GOTO Loop12 ;
- RETURN
- ;*****************DELAY2*******************************************************************
- Timeout_2
- MOVLW D'250' ; Tidsforsinkelse på ca. 2500 ms
- MOVWF Delay3 ;
- Loop12_2 MOVLW D'115' ; h'73'= 115 tælles op <=> 255-115 =140 der tælles ned
- MOVWF Delay1 ;
- MOVLW D'32' ; h'DF'= 223 tælles op <=> 255-223 =32 der tælles ned
- MOVWF Delay2 ;
- Loop1_2 DECFSZ Delay1,F ;
- GOTO Loop1_2 ;
- MOVLW D'115' ;
- MOVWF Delay1 ;
- DECFSZ Delay2,F ;
- GOTO Loop1_2 ;
- DECFSZ Delay3,F ;
- GOTO Loop12_2 ;
- RETURN
- ;******************Tænd LED i 5 sekunder**************************************************
- LEDON
- DECFSZ THREE
- RETURN
- BTFSS PORTB,2 ;Tester om LDR er aktiv
- RETURN
- BSF PORTB,1 ;Tænder LED
- CALL Timeout_2
- CALL Timeout_2
- CALL Timeout_2
- CALL Timeout_2 ;Tidsforsinkelse
- RETURN
- ;******************Sluk LED***************************************************************
- LEDOFF
- BCF PORTB,1 ;Slukker LED
- MOVLW d'3'
- MOVWF THREE ;Flytter tallet 3 til THREE
- RETURN
- ; ******* PROGRAM AFSLUTTET ***************************************************************
- END ;her slutter programmet...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement