Hatte ich noch nicht drin, aber auch damit funktionierts nicht.
Da mein ganzer Code:
; Includedatei für den 16F84 einbinden
list p=16f876
#include <P16f876.INC>
ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES
; Configuration festlegen
_CONFIG EQU H'3FFE' ; Wert von Configure
;**********************************************************
; Variablen
wait EQU 0x20 ; wird nicht gebraucht
W_TEMP EQU 0x20 ; Backup für Akkuregister
STATUS_TEMP EQU 0x21 ; Backup für Statusregister
PCLATH_TEMP EQU 0x22 ; Backup für PCLATCH-Register
org 0
goto INIT ; Sprung zum Hauptprogramm
ORG 4
;**********************************************************
; Interruptroutine
MOVWF W_TEMP
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_TEMP
MOVF PCLATH, W
MOVWF PCLATH_TEMP
CLRF PCLATH ; Bank 0
;************************************* Eigentliche Routine
; Wert an PWM übergeben
; MOVWF CCPR1L ; obere 8 Bit sind PWM
BSF ADCON0, 2 ; ADC starten
; COMF PORTB, 1 ; PortB invertieren
BSF PORTB, 1
BCF PIR1, ADIF ; Interruptbit löschen
;************************************* Eigentliche Routine
MOVF PCLATH_TEMP, W
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
;*********************************************************
; Anfangsinitialisierung
INIT
; PWM vorbereiten
; Vorteiler 1:1 und Timer2 einschalten
BSF T2CON,TMR2ON ; Timer2 ein
; Frequenz auf 19.53 kHz einstellen
BSF STATUS,RP0 ; Bank1
MOVLW H'FF'
MOVWF PR2 ; siehe Datasheet s.62
BCF STATUS,RP0 ; Bank1
; Tastverhältnis auf 50% einstellen
; MOVLW H'70'
; MOVWF CCPR1L ; 50%
; RC2/CCP1 auf Ausgang stellen
BSF STATUS,RP0 ; Bank1
BCF TRISC, 2 ; RC2: output=0
BCF STATUS,RP0 ; Bank 0
; PWM MODE mit CCP1 initialisieren
CLRF CCP1CON ; CCP1-Modus aus
BSF CCP1CON,CCP1M3 ; CCP1-Modus PWM-Mode
BSF CCP1CON,CCP1M2
; ADC vorbereiten
; PortB vorbereiten
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'00000000' ; PortB alle output
movwf TRISB
bcf STATUS, RP0 ; auf Bank 0 zurückschalten
clrf PORTB ; alle LEDs ausschalten
BSF PORTB, 0
; ADC einschalten
BSF ADCON0, 0 ; ADON=1
; ADC-Eingang AN0 auswählen
BCF ADCON0, 5 ; ADCHS2=0
BCF ADCON0, 4 ; ADCHS1=0
BCF ADCON0, 3 ; ADCHS0=0
; ADC speed für 20 MHz einstellen auf Fosc/32
BSF ADCON0, 7 ; ADCS1=1
BCF ADCON0, 6 ; ADCS0=0
; Daten linksbündig
BSF STATUS,RP0 ; Bank1
BCF ADCON1, 7 ; ADFM=0
BCF STATUS,RP0 ; Bank0
; Interrupt einschalten
BSF INTCON, GIE ; interrups einschalten
BSF NTCON, PEIE ; pie1 register aktivieren
BSF PIE1, ADIE ; A/D Interrups einschalten
BCF PIE1, ADIF ; Interruptbit löschen
;**********************************************************
; Hauptprogrammschleife
BSF ADCON0, 2 ; ADC starten
LOOP
GOTO LOOP ; Endlosschlaufe
end
;**********************************************************
EDIT Bitte Code-Tags verwenden! Sandynister