Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;-------------------------------------------------------------------------------------------------
- ; Projektname : Erstes Projekt
- ; Prozessor/Takt : PIC16F887 / interner Oszillator 4 Mhz
- ; Beschaltung PORTA :
- ; Beschaltung PORTB :
- ; Beschaltung PORTC :
- ; Beschaltung PORTD :
- ; Beschaltung PORTE :
- ; Datum :
- ; Bearbeiter :
- ; letzte Aenderung :
- ; Bearbeiter :
- ;-------------------------------------------------------------------------------------------------
- listp=16F887
- #include<p16f887.inc>
- errorlevel -302
- errorlevel -305
- __CONFIG _CONFIG1, 0x20E4
- __CONFIG _CONFIG2, 0x3FFF
- ;------------------------------------------------------------------------------------------------
- ; Variablen und Konstanten
- ;-------------------------------------------------------------------------------------------------
- org 0x00
- Z2 equ 0x29
- Z1 equ 0x30
- Z0 equ 0x31
- ;-------------------------------------------------------------------------------------------------
- ;Hardware - (Setup)
- ;-------------------------------------------------------------------------------------------------
- banksel TRISC ; Bank 1 setzen
- clrf TRISC ; clear von TRISC
- clrf TRISD ; clear von TRISD
- clrf TRISA
- comf TRISD ; setzen TRISD 0 (also der Schalter EINGANG)
- banksel PORTC ; Bank auf Bank 0
- clrf PORTC ; clear PORTC
- clrf PORTD ; clear PORTD
- clrf TRISA
- ;-------------------------------------------------------------------------------------------------
- ; Hauptprogramm - (loop)
- ;-------------------------------------------------------------------------------------------------
- ;lauti
- ;call DELAYI
- ;bsf PORTA, 0
- ;call DELAYI
- ;bcf PORTA, 0
- ;goto lauti
- ;call DELAYLANG
- ;return
- call Resetall ;Unterprogramm Resetall aufrufen
- Schalter1
- btfss PORTD, 1 ;bit 1 von PORTD testen, wenn 1 nächsten Befehl überspringen
- goto Schalter2 ;springe zu Schalter2
- call Waagerecht ;Unterprogramm Waagerecht aufrufen
- Schalter2
- btfss PORTD, 2 ;bit 2 von PORTD testen, wenn 1 nächsten Befehl überspringen
- goto Schalter3 ;springe zu Schalter3
- call Waagerecht ;Unterprogramm Waagerecht aufrufen
- Schalter3
- btfss PORTD, 3 ;bit 3 von PORTD testen, wenn 1 nächsten Befehl überspringen
- goto Schalter1 ;springe zu Schalter1 <<<<<<<<<
- call Waagerecht ;Unterprogramm Waagerecht aufrufen
- ;-------------------------------------------------------------------------------------------------
- ; Unterprogramme - (Funktionen)
- ;-------------------------------------------------------------------------------------------------
- Resetall
- bcf PORTC, 2 ;2 bit auf PORTC clearen
- bsf PORTC, 1 ;1 bit auf PORTC setzen
- call DELAY ;Unterprogramm DELAY aufrufen
- bcf PORTC, 1 ;1 bit auf PORTC clearen
- bsf PORTC, 0 ;0 bit auf PORTC setzen
- bcf PORTC, 7 ;7 bit auf PORTC clearen
- bsf PORTC, 6 ;6 bit auf PORTC setzen
- call DELAY ;Unterprogramm DELAY aufrufen
- bcf PORTC, 3 ;3 bit auf PORTC clearen
- bsf PORTC, 4 ;4 bit auf PORTC setzen
- call DELAY ;Unterprogramm DELAY aufrufen
- bcf PORTC, 4 ;4 bit auf PORTC clearen
- bsf PORTC, 5 ;5 bit auf PORTC setzen
- return ;zurück zum entsprechenden call
- Waagerecht
- call DELAYLANG ;Unterprogramm DELAYLANG aufrufen
- bcf PORTC, 5 ;5 bit auf PORTC clearen
- bsf PORTC, 4 ;4 bit auf PORTC setzen
- call DELAY ;Unterprogramm DELAY aufrufen
- bcf PORTC, 4 ;4 bit auf PORTC clearen
- bsf PORTC, 3 ;3 bit auf PORTC setzen
- call DELAY ;Unterprogramm DELAY aufrufen
- call Senkrecht ;Unterprogramm Senkrecht aufrufen
- call Resetall ;springe zu resetall
- return ;zurück zum entsprechenden call
- Senkrecht
- call DELAY
- bcf PORTC, 0 ;0 bit auf PORTC clearen
- bsf PORTC, 1 ;1 bit auf PORTC setzen
- call DELAY ;Unterprogramm DELAY aufrufen
- bcf PORTC, 1 ;1 bit auf PORTC clearen
- bcf PORTC, 6 ;6 bit auf PORTC clearen
- bsf PORTC, 7 ;7 bit auf PORTC setzen
- bsf PORTC, 2 ;2 bit auf PORTC setzen
- call lauti
- ;call DELAYLANG ;Unterprogramm DELAYLANG aufrufen 7s
- return ;zurück zum entsprechenden call
- DELAYLANG
- movlw d'35' ; Wert von 35 festlegen für Arbeitsregister
- movwf Z2 ; Wert vom Arbeitsregister wird angenommen
- movlw d'0' ; Wert von 0 festlegen für Arbeitsregister
- movwf Z1 ; Wert vom Arbeitsregister wird angenommen
- movlw d'0' ; Wert von 0 in Arbeitsregister
- movwf Z0 ; Wert angenommen
- decfsz Z0 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
- goto $-1 ;eine Zeile zurück gehen
- decfsz Z1 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
- goto $-5 ;zurück um 5
- decfsz Z2 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
- goto $-9 ;zurück um 9
- return ;zurück zum entsprechenden call
- DELAY
- movlw d'5' ; Wert von 5 festlegen für Arbeitsregister
- movwf Z2 ; Wert vom Arbeitsregister wird angenommen
- movlw d'0' ; Wert von 0 festlegen für Arbeitsregister
- movwf Z1 ; Wert vom Arbeitsregister wird angenommen
- movlw d'0' ; Wert von 0 in Arbeitsregister
- movwf Z0 ; Wert angenommen
- decfsz Z0 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
- goto $-1 ;eine Zeile zurück gehen
- decfsz Z1 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
- goto $-5 ;zurück um 5
- decfsz Z2 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
- goto $-9 ;zurück um 9
- return
- DELAYI
- movlw d'85' ; Wert von 5 festlegen für Arbeitsregister
- movwf Z2 ; Wert vom Arbeitsregister wird angenommen
- movlw d'10' ; Wert von 0 festlegen für Arbeitsregister
- movwf Z1 ; Wert vom Arbeitsregister wird angenommen
- decfsz Z1 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
- goto $-1 ;zurück um 5
- decfsz Z2 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
- goto $-5 ;zurück um 9
- return ;zurück zum entsprechenden call
- lauti ;funktioniert noch nicht
- movlw d'41'
- movwf Z2
- movlw d'41'
- movwf Z1
- call DELAYI
- bsf PORTA, 0
- call DELAYI
- bcf PORTA, 0
- decfsz Z1
- goto $-5
- decfsz Z2
- goto $-9
- return
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement