; ;--Testprogramm : Automatisch bzw Tastendes hochzählen eines 7 Segment Displays------ ; list p=16F627 include "P16F627.inc" __CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ;----------------------Variablen Benennung------------------------- TIMER0 EQU H'20' TIMER1 EQU H'21' TIMER2 EQU H'22' Zahl EQU H'23' ;-----------------------Startpunkt bei Reset----------------------- ORG 0 ; Reset Start addresse GOTO RESET ; springe zur Resetteil des Programms ;------------------------WARTESCHLEIFE 1--------------------------- WAIT0 MOVLW D'4' MOVWF TIMER0 WAIT1 MOVLW D'250' MOVWF TIMER1 WAIT2 MOVLW D'110' MOVWF TIMER2 WAIT3 NOP NOP NOP NOP NOP NOP DECFSZ TIMER2,1 ;(1ms) GOTO WAIT3 DECFSZ TIMER1,1 ;(250ms) GOTO WAIT2 DECFSZ TIMER0,1 GOTO WAIT1 RETLW 0 ;---------------------------Reset Lade Routine------------------------- RESET MOVLW B'00000111' ;Deaktivieren der Comparator Modulen ,d.H. beide Komparatoren sind aus, MOVWF CMCON ;normale Eingänge RA sind aktiviert ; ; ; BSF STATUS,RP0 ;Wechseln zur Bank1 ,Vorher Bank0 (Standart) ; MOVLW B'11010111' ;Set PIC options (See datasheet). MOVWF OPTION_REG ;Write the OPTION register. ; CLRF INTCON ;sämtliche Interrupts deaktiviert!!! ; MOVLW B'00000000' ; MOVWF TRISB ;RB0 bis RB7 sind Ausgänge.für 7-Segment-Anzeige ; MOVLW B'11111111' ; MOVWF TRISA ;RA Port sind Eingänge (RA sind auch MCLR oder Osc1/2 Anschlüsse!) ; BCF STATUS,RP0 ;Wechseln zur Bank0 CLRF PORTB ;Lösche Register zu PORTB GOTO Main1 ;-----------------Tabelle LED Organisation 7Segmente + Punkt------- Segmente addwf PCL,1 RETLW B'10111111' ; 0 RETLW B'00000110' ; 1 RETLW B'11011011' ; 2 RETLW B'01001111' ; 3 RETLW B'11100110' ; 4 RETLW B'01101101' ; 5 RETLW B'11111101' ; 6 RETLW B'00000111' ; 7 RETLW B'11111111' ; 8 RETLW B'01101111' ; 9 ;------------------------Testprogramm------------------------------ Main1 CLRW MOVLW B'00001001' ; Binärzahl für Dezimalzahl 9 MOVWF Zahl ; ins Register für Zahl einladen Main2 CLRW MOVF Zahl ; Zahl ins w Register laden Call Segmente ; ins Unterprogramm für Segmente gehn MOVWF PORTB ; Wert für Zahl nach PortB übertragen NOP NOP NOP NOP GOTO WAIT0 ; Warteschleife DECFSZ Zahl,1 ; Zahl-Register runterzählen GOTO Main2 ; wenn Zahl nicht 0 dann weiter zu Main2 GOTO Main1 ; Geh zu Main1 End