Gast
#2013281
Ich bin noch ein frischling was das Programmieren bei Assembler angeht. ich habe mir mit mühe und not ein Programm geschrieben (es versucht. Es soll eigentlich ein Lauflicht werden der durch den timer gesteuert werden...sprich ca 0,5 sekunden bevor die LED weiter spricht. Leider klappt es bei mir Null.... ich danke schon einmal im voraus: list p=16f877 ;der Prozessortyp wird festgelegt include "p16f877.inc" ; __CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC & _LVP_OFF udata countint EQU 0x23 ; ----------------------------------------------------------------- ; Interruptvektortabelle ; ----------------------------------------------------------------- org 0x000 ; RESET-Vektor goto start org 0x0004 ; Interruptvektor goto ISR ; Sprung zu Interruptserviceroutine ; ; org b'00000000' start: movlw b'00000000' ;alle Bits Port C Ausgänge bsf STATUS, RP0 ; umschalten auf Bank 1 bcf STATUS, RP1 ; umschalten auf Bank 1 movwf TRISC bcf OPTION_REG,5 ; interner Clock fuer Timer0 bcf OPTION_REG,0 ; Vorteiler fuer Timer0 ein bcf OPTION_REG,1 ; Vorteilerbit0 = 0 bcf OPTION_REG,0 ; Vorteilerbit1 = 0 bsf OPTION_REG,1 ; Vorteilerbit2 = 1 ; -> 1MHz : 32 : 125 = 250Hz -> 4ms bcf STATUS, RP0 ;umschalten auf Bank0 movlw D'198' ; Vorladen des Zaelregisters Timer0 movwf TMR0 movlw D'187' ; Vorladen des Interruptzaehlers movwf countint bsf INTCON,2 ; Timer0 Overflow ein bsf INTCON,5 ; alle Interrupts ein movlw b'00000001' movwf PORTC bcf STATUS,C ; loesche Carry-Flag im STATUS ; Register (noetig fuer rrf) main: rlf PORTC,1 ; Rotiere links ueber Carry call ISR goto main ; Ruecksprung zu main ;----------------------------------------------------------------------- - ISR: movlw D'198' ; Reloadwert fuer Zaelregister Timer0 nach w movwf TMR0 ; w nach TMR0 decfsz countint,0 ; Interruptereignisse zaehlen goto isr1 ; solange Interruptzaehler != 0 ; sonst -> movf PORTC, ; Status PORTB einlesen movwf PORTC ; Ausgabe auf PORTB movlw D'187' ; Vorladen des Interruptzaehlers movwf countint isr1: bcf INTCON,1 ;Iterruptflag zurücksetzen retfie ; Return from Interrupt end ;das Ende des Programms