Hallo Rolf,

bitte nimm mal das Codefenster für Code: einfach im Editor auf das Lattenzahnsymbol (Hash) klicken. Ich habs mal etwas lesbarer gemacht - aber mittlerweile kneift meine Zeit, später vielleicht mehr.
Zitat Zitat von hegewald Beitrag anzeigen
... dieser Code zeigt nichts an den LEDs ... Bei CTC lief alles ...
Code:
; Projekt: Mega8-PWM Datum: 03.11.2013; Datei: mega8-FASTPWM01.asm 
; ATmega8 Timer1 FastPWM-Betrieb Kanäle A und B
; Port B: Ausgang Kanal A:OC1A (PB1-Pin15) Kanal B:OC1B (PB2-Pin16)
; Konfiguration: interner Oszillator 1 MHz, externes RESET-Signal 
.INCLUDE "m8def.inc" ; Deklarationen für Mega8
.EQU takt = 1000000 ; Systemtakt 1 MHz intern
.DEF akku = r16 
.DEF temp17 = r17
.CSEG                           ; Programm-Flash
        rjmp    start           ; Reset-Einsprung
.ORG $13                        ; Interrupt-Einsprünge übergehen
start: 
        ldi     akku,   LOW(RAMEND)     ; Stapel anlegen
        out     SPL,    akku    ;
        ldi     akku,   HIGH(RAMEND) 
        out     SPH,    akku 
        ldi     akku,   (1<<PB1) | (1<<PB2)
        out     DDRB,   akku
.equ WertH = 100 ; Konstante für OCR1AH u. OCR1BH (r16)
.equ WertL = 70 ; Konstante für OCR1AL u. OCR1BL (r17) 

; Timer1 programmieren: WGM10=1<<<PWM8Bit phasenrichtig (TOPP=00FF)
; KanalA (COM1Ax) zu PB1 und KanalB (COM1Bx) zu PB2 nicht invertiert
        ldi     akku,   (0<<COM1A1) |(1<<COM1A0)| (0<<COM1B1) | (0<<COM1B0)| (0<<WGM11) | (1<<WGM10) 
        out     TCCR1A, akku    ; Steuerregister A Timer1
        clr     akku
        ldi     akku,   (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10)
        out     TCCR1B, akku ; Steuerregister B Timer1 Prescale = 1 (1MHz)

loop:   ldi     akku,   WertH   ; r16 auf 20
        ldi     temp17, WertL   ; r17 auf 70
        out     OCR1AH, akku    ; Kanal A = 100 (WertH) 
        out     OCR1AL, temp17  ; Kanal A = 70 (WertL)
        out     OCR1BH, akku    ; Kanal B = 100 (WertH)
        out     OCR1BL, temp17  ; Kanal B = 70 (WertL

        rjmp    loop 
.EXIT