Code:
;*****************************INIT-Mode 1 Timer0********************************************************************
mode0_t0_init:
lds temp1,TIMSK0
ori temp1,(0<<OCIE0B | 0<<OCIE0A | 1<<TOIE0)
sts TIMSK0,temp1
clr temp1
sts TCNT0,temp1
ret
;MODE 1 PWM-PhaseCorrect beide Channels nutzbar da Counter bis FF zählt
mode1_t0_init:
rcall A0_ch_en ;out aktivieren
rcall B0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0A
ori temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|1<<COM0B0) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TCCR0B
ori temp0,(0<<WGM02)
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<WGM01|1<<WGM00)
out TCCR0A,temp0
lds temp1,TIMSK0
ori temp1,(1<<OCIE0B | 1<<OCIE0A | 0<<TOIE0)
sts TIMSK0,temp1
ret
;MODE 2 CTC ACHTUNG OCRA als Auflösung nutzbar, OCRB muss <= OCRA sein falls man togglen will
mode2_t0_init:
; rcall A0_ch_en ;out aktivieren
rcall B0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0A
ori temp0,(0<<COM0A1|0<<COM0A0|0<<COM0B1|1<<COM0B0) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TCCR0B
ori temp0,(0<<WGM02)
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(1<<WGM01|0<<WGM00)
out TCCR0A,temp0
lds temp1,TIMSK0
ori temp1,(0<<OCIE0B | 0<<OCIE0A | 0<<TOIE0)
sts TIMSK0,temp1
ret
;MODE 3 FAST PWM A / B unabahängig nutzbar
mode3_t0_init:
rcall A0_ch_en ;out aktivieren
rcall B0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0A
ori temp0,(1<<COM0A1|1<<COM0A0|1<<COM0B1|1<<COM0B0) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TCCR0B
ori temp0,(0<<WGM02)
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(1<<WGM01|1<<WGM00)
out TCCR0A,temp0
lds temp1,TIMSK0
ori temp1,(1<<OCIE0B | 1<<OCIE0A | 0<<TOIE0)
sts TIMSK0,temp1
ret
;MODE 4 RESERVED
;MODE 5 PWM-PhaseCorrect nur OCRA mit CHAN A und INT A, wenn OCRB < OCRA dann ist noch INT B ohne CHAN B nutzbar
mode5_t0_init:
rcall A0_ch_en ;out aktivieren
rcall B0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0A
ori temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|1<<COM0B0) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TCCR0B
ori temp0,(1<<WGM02)
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<WGM01|1<<WGM00)
out TCCR0A,temp0
lds temp1,TIMSK0
ori temp1,(1<<OCIE0B | 1<<OCIE0A | 0<<TOIE0)
sts TIMSK0,temp1
ret
;MODE 6 RESERVED
;MODE 7 FAST-PWM nur OCRA mit CHAN A und INT A, wenn OCRB < OCRA dann ist noch INT B ohne CHAN B nutzbar
mode7_t0_init:
rcall A0_ch_en ;out aktivieren
rcall B0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0A
ori temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|1<<COM0B0) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TCCR0B
ori temp0,(1<<WGM02)
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(1<<WGM01|1<<WGM00)
out TCCR0A,temp0
lds temp1,TIMSK0
ori temp1,(1<<OCIE0B | 1<<OCIE0A | 0<<TOIE0)
sts TIMSK0,temp1
ret
;Zähler de/aktivieren
prescaler_T0_on:
in temp0,TCCR0B
ori temp0,(0<<CS12|0<<CS11|1<<CS10) ;schmeißt den counter an
out TCCR0B,temp0
sei
ret
prescaler_T0_off:
in temp0,TCCR0B
andi temp0,(0<<CS12|0<<CS11|0<<CS10) ;stoppt den counter an
out TCCR0B,temp0
ret
T0_clr: clr temp0
sts TCNT0,temp0
ret
;*****************ChannelLoad******************************************************
A0_ch_load:
ldi temp0,CTC_T0 ;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
sts ocra0,temp0 ;____--- oder _------ zu erreichen
out OCR0A,temp0 ;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
ret
A0_ch_en:
sbi ddrd,6 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
A0_ch_dis:
cbi ddrd,6 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B0_ch_load:
ldi temp0,CTC_T0 ;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
sts ocrb0,temp0 ;____--- oder _------ zu erreichen
out OCR0B,temp0 ;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
ret
B0_ch_en:
sbi ddrd,5 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B0_ch_dis:
cbi ddrd,5 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
;******ISR
INT_OC0A: ;$000E
reti
INT_OC0B: ;$0010
reti
INT_OVF0: ;$0012
reti
;******************************Init-Modes des Timers1***************************************************************
mode0_T1_init:;NORMAL_MODE OCR1A h:l,OCR1B h:l update ocrxH:L sofort oder im INT
; rcall A1_ch_en ;out aktivieren
; rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
; rcall B1_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(0<<COM1A1|0<<COM1A0|0<<COM1B1|0<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|0<<OCIE1B|1<<OCIE1A|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode1_T1_init:;8bit phase correct mode OCR1A h:l,OCR1B h:l update ocrxH:L on top oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|0<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode2_T1_init:;9bit phase correct mode OCR1A h:l,OCR1B h:l update ocrxH:L on top oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode3_T1_init:;10bit phase correct mode OCR1A h:l,OCR1B h:l update ocrxH:L on top oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode4_T1_init:;CTC mode OCR1A h:l,OCR1B h:l update ocrAH:L oder im INT
;rcall A1_ch_en ;out aktivieren
;rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
;rcall B1_ch_load ;Zeitwert laden
ldi temp0,(0<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(0<<COM1A1|0<<COM1A0|0<<COM1B1|1<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|1<<OCIE1A|0<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode5_T1_init:;FAST PWM 8bit OCR1A h:l,OCR1B h:l update ocrxH:L on bottom oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(0<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(0<<COM1A1|1<<COM1A0|0<<COM1B1|1<<COM1B0|0<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode6_T1_init:;FAST PWM 9bit OCR1A h:l,OCR1B h:l update ocrxH:L on bottom oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(0<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode7_T1_init:;FAST PWM 10bit OCR1A h:l,OCR1B h:l update ocrxH:L on bottom oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(0<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode8_T1_init:;PWM,PahseFrequenzyCorrect OCR1A h:l,ICRh:l update ocrxH:L on bottom oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(1<<ICES1|1<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(1<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode9_T1_init:;PWM,PahseFrequenzyCorrect OCR1A h:l,OCR1A h:l update ocrxH:L on bottom oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(1<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|0<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode10_T1_init:;PWM,PahseCorrect OCR1A h:l,ICRh:l update ocrxH:L on top oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(1<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(1<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode11_T1_init:;PWM,PahseCorrect OCR1A h:l,OCRah:l update ocrxH:L on top oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(1<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode12_T1_init:;CTC OCR1A h:l,ICRh:l update sofort oder im INT
; rcall A1_ch_en ;out aktivieren
; rcall B1_ch_en ;out aktivieren
; rcall A1_ch_load ;Zeitwert laden
; rcall B1_ch_load ;Zeitwert laden
rcall ICR1_ch_load
ldi temp0,(1<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(0<<COM1A1|0<<COM1A0|0<<COM1B1|0<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(1<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode13_T1_init:;RESERVED not activated
/* ;rcall A1_ch_en ;out aktivieren
;rcall B1_ch_en ;out aktivieren
;rcall A1_ch_load ;Zeitwert laden
;rcall B1_ch_load ;Zeitwert laden
ldi temp0,(1<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|0<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
*/ ret
mode14_T1_init:;FAST PWM OCR1A h:l,ICRh:l update ocrxH:L on bottom oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(1<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(1<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
mode15_T1_init:;FAST PWM OCR1A h:l,OCRah:l update ocrxH:L on bottom oder im INT
rcall A1_ch_en ;out aktivieren
rcall B1_ch_en ;out aktivieren
rcall A1_ch_load ;Zeitwert laden
rcall B1_ch_load ;Zeitwert laden
ldi temp0,(1<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1B,temp0
lds temp0,TCCR1A
ori temp0,(0<<COM1A1|1<<COM1A0|0<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
sts TCCR1A,temp0
lds temp0,TIMSK1
ori temp0,(0<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
sts TIMSK1,temp0
ret
prescaler_T1_on:
lds temp0,TCCR1B
ori temp0,(1<<CS12|1<<CS11|1<<CS10) ;schmeißt den counter an
sts TCCR1B,temp0
sei
ret
prescaler_T1_off:
lds temp0,TCCR1B
andi temp0,(0<<CS12|0<<CS11|0<<CS10) ;stoppt den counter an
sts TCCR1B,temp0
ret
T1_clr: clr temp0
sts TCNT1h,temp0
sts TCNT1l,temp0
ret
;**********Channel load
A1_ch_load:
ldi temp0,T1_max_h ;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
sts OCRa1h,temp0 ;____--- oder _------ zu erreichen
sts OCR1ah,temp0
ldi temp0,T1_max_l ;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
sts OCRa1l,temp0 ;____--- oder _------ zu erreichen
sts OCR1al,temp0
ret
A1_ch_en:
sbi ddrb,1 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
A1_ch_dis:
cbi ddrb,1 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B1_ch_load:
ldi temp0,$00 ;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
sts OCRb1h,temp0 ;____--- oder _------ zu erreichen
sts OCR1bh,temp0
ldi temp0,$80 ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
sts OCRb1l,temp0 ;____--- oder _------ zu erreichen
sts OCR1bl,temp0
ret
B1_ch_en:
sbi ddrb,2 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B1_ch_dis:
cbi ddrb,2 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
ICR1_ch_load:
ldi temp0,$00 ;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
sts ICR1xh,temp0 ;____--- oder _------ zu erreichen
sts ICR1h,temp0
ldi temp0,$09 ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
sts ICR1xl,temp0 ;____--- oder _------ zu erreichen
sts ICR1l,temp0
ret
;**********ISR
INT_CPT1: ;$0014 Timer/Counter1 Capture Event
;ICRH:L wird vom Counter TVCNT1H:L bei Steigender/Fallender Flanke beschrieben
reti
INT_OC1A: ;$0016 Timer/Counter1 Compare Match A
push temp0
rcall prescaler_T0_off
rcall prescaler_T1_off
pop temp0
reti
INT_OC1B: ;$0018 Timer/Counter1 Compare Match B
push temp0
lds temp0,OCRb1h ;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
sts OCR1Bh,temp0 ;____--- oder _------ zu erreichen
lds temp0,OCRb1l ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
sts OCR1Bl,temp0 ;____--- oder _------ zu erreichen
pop temp0
reti
INT_OVF1: ;$001A Timer/Counter1 Overflow
reti
;*******************************************************************************************************************
;******************************Init-Modes des Timers2***************************************************************
mode0_T2_init:;NORMAL_MODE OCR2 update sofort oder im INT
rcall A2_ch_en ;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
rcall B2_ch_en ;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
rcall A2_ch_load ;____--- oder _------ zu erreichen
rcall B2_ch_load
lds temp0,TCCR2B
ori temp0,(0<<WGM22)
sts TCCR2B,temp0
lds temp0,TCCR2A
ori temp0,( 0<<WGM21 | 0<<WGM20 )
sts TCCR2A,temp0
lds temp0,TCCR2A
ori temp0,( 0<<COM2A1 | 0<<COM2A0 | 0<<COM2B1 | 0<<COM2B0 ) ;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
sts TCCR2A,temp0
lds temp0,TIMSK2
ori temp0,( 0<<OCIE2B | 0<<OCIE2A | 1<<TOIE2 );OutputCompareInterrupt deaktiviert
sts TIMSK2,temp0
ret
mode1_T2_init:;PWM-PhaseCorrect
rcall A2_ch_en ;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
rcall B2_ch_en ;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
rcall A2_ch_load ;____--- oder _------ zu erreichen
rcall B2_ch_load
lds temp0,TCCR2B
ori temp0,(0<<WGM22)
sts TCCR2B,temp0
lds temp0,TCCR2A
ori temp0,( 0<<WGM21 | 1<<WGM20 )
sts TCCR2A,temp0
lds temp0,TCCR2A
ori temp0,( 1<<COM2A1 | 1<<COM2A0 | 0<<COM2B1 | 0<<COM2B0 ) ;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
sts TCCR2A,temp0
lds temp0,TIMSK2
ori temp0,( 0<<OCIE2B | 1<<OCIE2A | 0<<TOIE2 );OutputCompareInterrupt deaktiviert
sts TIMSK2,temp0
ret
mode2_T2_init:;CTC
;rcall A2_ch_en ;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
;rcall B2_ch_en ;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
rcall A2_ch_load ;____--- oder _------ zu erreichen
;rcall B2_ch_load
lds temp0,TCCR2B
ori temp0,(0<<WGM22)
sts TCCR2B,temp0
lds temp0,TCCR2A
ori temp0,( 1<<WGM21 | 0<<WGM20 )
sts TCCR2A,temp0
lds temp0,TCCR2A
ori temp0,( 0<<COM2A1 | 1<<COM2A0 | 0<<COM2B1 | 1<<COM2B0 ) ;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
sts TCCR2A,temp0
lds temp0,TIMSK2
ori temp0,( 0<<OCIE2B | 1<<OCIE2A | 0<<TOIE2 );OutputCompareInterrupt deaktiviert
sts TIMSK2,temp0
ret
mode3_T2_init:;FastPWM
rcall A2_ch_en ;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
rcall B2_ch_en ;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
rcall A2_ch_load ;____--- oder _------ zu erreichen
rcall B2_ch_load
lds temp0,TCCR2B
ori temp0,(0<<WGM22)
sts TCCR2B,temp0
lds temp0,TCCR2A
ori temp0,( 1<<WGM21 | 1<<WGM20 )
sts TCCR2A,temp0
lds temp0,TCCR2A
ori temp0,( 0<<COM2A1 | 1<<COM2A0 | 0<<COM2B1 | 1<<COM2B0 ) ;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
sts TCCR2A,temp0
lds temp0,TIMSK2
ori temp0,( 1<<OCIE2B | 1<<OCIE2A | 0<<TOIE2 );OutputCompareInterrupt deaktiviert
sts TIMSK2,temp0
ret
mode5_T2_init:;PWM PHASE CORRECT
rcall A2_ch_en ;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
rcall B2_ch_en ;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
rcall A2_ch_load ;____--- oder _------ zu erreichen
rcall B2_ch_load
lds temp0,TCCR2B
ori temp0,(1<<WGM22)
sts TCCR2B,temp0
lds temp0,TCCR2A
ori temp0,( 0<<WGM21 | 1<<WGM20 )
sts TCCR2A,temp0
lds temp0,TCCR2A
ori temp0,( 0<<COM2A1 | 1<<COM2A0 | 1<<COM2B1 | 0<<COM2B0 ) ;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
sts TCCR2A,temp0
lds temp0,TIMSK2
ori temp0,( 1<<OCIE2B | 1<<OCIE2A | 0<<TOIE2 );OutputCompareInterrupt deaktiviert
sts TIMSK2,temp0
ret
mode7_T2_init:;FAST PWM
rcall A2_ch_en ;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
rcall B2_ch_en ;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
rcall A2_ch_load ;____--- oder _------ zu erreichen
rcall B2_ch_load
lds temp0,TCCR2B
ori temp0,(1<<WGM22)
sts TCCR2B,temp0
lds temp0,TCCR2A
ori temp0,( 1<<WGM21 | 1<<WGM20 )
sts TCCR2A,temp0
lds temp0,TCCR2A
ori temp0,( 1<<COM2A1 | 1<<COM2A0 | 1<<COM2B1 | 1<<COM2B0 ) ;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
sts TCCR2A,temp0
lds temp0,TIMSK2
ori temp0,( 1<<OCIE2B | 1<<OCIE2A | 0<<TOIE2 );OutputCompareInterrupt deaktiviert
sts TIMSK2,temp0
ret
prescaler_T2_on:
lds temp0,TCCR2B
ori temp0,(1<<CS22|1<<CS21|1<<CS20) ;schmeißt den counter an
sts TCCR2B,temp0
sei
ret
prescaler_T2_off:
lds temp0,TCCR2B
andi temp0,(0<<CS22|0<<CS21|0<<CS20) ;stoppt den counter an
sts TCCR2B,temp0
ret
T2_clr: clr temp0
sts TCNT2,temp0
ret
;**********Channel load
A2_ch_load:
ldi temp0,$4d ;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
sts OCR2A,temp0
clr temp0
sts ocra2,temp0
ret
A2_ch_en:
sbi ddrb,3 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
A2_ch_dis:
cbi ddrb,3 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B2_ch_load:
ldi temp0,$40 ;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
sts OCR2B,temp0
sts ocrb2,temp0
ret
B2_ch_en:
sbi ddrd,3 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B2_ch_dis:
cbi ddrd,3 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
;*******ISR
INT_OC2A: ;$000E
lds temp0,ocra2
inc temp0
sts ocra2,temp0
cpi temp0,$64
breq INT_OC2A2
sts ocra2,temp0
reti
INT_OC2A2:
clr temp0
sts ocra2,temp0
sbic pinb,5
cbi portb,5
sbis pinb,5
sbi portb,5
reti
INT_OC2B: ;$0010
push temp1
lds temp1,ocrb2
sts OCR2B,temp1
pop temp1
reti
INT_OVF2: ;$0012
reti
Lesezeichen