;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ;Einsprungvektoren ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ORG 0x00 ;Power on reset vector goto Init ;Gehe zur Marke Init ORG 0x04 ;Im Falle eines Interrupts RETFIE ;Springt er direkt zurόck ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ;Sonstige Einstellungen ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• list p=16f877 #include __CONFIG _HS_OSC & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ;Adresscodierung ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• cblock 0x10 ;Hier werden Speicherzellen „Namen“ zu geordnet m_warten ;Name „m_warten“ Wartezeit ;Name „Wartezeit“ Puffer ;zum zwischen speichern von Daten endc ;Ende der „Namenverteilung“ #define E_LCD PORTD,4 #define DI_LCD PORTD,5 #define RES_LCD PORTD,6 #define LR_LCD PORTD,7 #define RW_LCD PORTA,0 ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ;Konfiguration ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Init bsf STATUS,RP0 ;Gehe zu Speicherbank 1 movlw B'00000000' movwf TRISA movlw B'00000000' movwf TRISB movlw B'00000000' movwf TRISC movlw B'00000000' movwf TRISD movlw B'00000000' movwf TRISE movlw 0x06 movwf ADCON1 bcf STATUS,RP0 ;Zurόck zu Speicherbank 0 clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ;LED STATUS ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Bsf PORTC,2 Call LCD_Init ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Main ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Movlw 0xF0 Call DatenL Bcf PORTC,2 movlw D'255' movwf Wartezeit call Warten Bsf PORTC,2 movlw D'255' movwf Wartezeit call Warten goto Main ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• LCD_Init ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• bsf RES_LCD ; Die Resetleitung des Displays auf High ziehen movlw D'255' movwf Wartezeit call Warten bcf RES_LCD movlw D'255' movwf Wartezeit call Warten bsf RES_LCD movlw D'255' movwf Wartezeit call Warten Bcf RW_LCD Bcf DI_LCD Movlw 0x3F ;Display an Movwf Puffer Call BefehlL Call BefehlR Movlw 0xC0 ;Start Line Movwf Puffer Call BefehlL Call BefehlR Movlw 0xB8 ;Page Adress Movfw Puffer Call BefehlL Call BefehlR Movlw 0x40 ;Byte Adress Movfw Puffer Call BefehlL Call BefehlR Return ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• DatenL ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• bsf LR_LCD Call Busy Bcf RW_LCD bsf DI_LCD Movlw Puffer Movwf PORTB Call Enable Return ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• DatenR ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• bcf LR_LCD Call Busy Bcf RW_LCD bsf DI_LCD Movlw Puffer Movwf PORTB Call Enable Return ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• BefehlL ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• bsf LR_LCD Call Busy Bcf RW_LCD bcf DI_LCD Movlw Puffer Movwf PORTB Call Enable Return ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• BefehlR ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• bcf LR_LCD Call Busy Bcf RW_LCD bcf DI_LCD Movlw Puffer Movwf PORTB Call Enable Return ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Enable ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Bsf E_LCD movlw D'100' movwf Wartezeit call Warten BcF E_LCD Return ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Busy ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Bsf RW_LCD Bcf DI_LCD bsf STATUS,RP0 ;Gehe zu Speicherbank 1 movlw B'11111111' movwf TRISB bcf STATUS,RP0 ;Gehe zurόck zur Speicherbank 0 Call Enable RR Btfsc PORTB,7 Goto RR bsf STATUS,RP0 ;Gehe zu Speicherbank 1 movlw B'00000000' movwf TRISB bcf STATUS,RP0 ;Gehe zurόck zur Speicherbank 0 Bcf RW_LCD Bcf DI_LCD Return ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Warten: ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Warten1 movlw .110 ;Schreibt (dezimal) 100 ins Arbeitsregister movwf m_warten ;Schreibt das Arbeitsregister nach “m_wartezeit” Warten2 nop ;nop = No OPeration nop ;nop = No OPeration nop ;nop = No OPeration nop ;nop = No OPeration nop ;nop = No OPeration nop ;nop = No OPeration decfsz m_warten,1 ;Verringert den Wert aus “m_warten“ um 1 ;Schreibt ihn zurόck in “m_warten“ (,1) ;Und όberspringt-next Befehl, wenn 0 (Result) goto Warten2 ;Gehe zu „Warten2“ decfsz Wartezeit,1 ;Verringert den Wert aus “Wartezeit“ um 1 ;Schreibt ihn zurόck in “Wartezeit“ (,1) ;Und όberspringt-next Befehl, wenn 0 (Result) goto Warten1 ;Gehe zu „Warten1“ retlw 0 ;Return ;••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• End ;Ende des Programms ;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••