avr_racer
17.08.2015, 18:54
Eine Bib mal für den Tiny2313 kompatible Includes sind GRÜN gekennzeichnet und können aus der ATMEGA8 Bibliothek übernommen werden.
2313.asm
;# Projekt: #
;# #
;# #
;# Taktfrequenz des AVR: 4 MHz #
;# #
;# CS-SOFT #
;###########################################
;.include "2313def.inc" ;2313
.include "tn2313def.inc" ;Tiny 2313
;.include "tn2313Adef.inc" ;Tiny 2313
.def math1h = r8
.def math1l = r9
.def math2h = R10
.def math2l = r11
.def matherghh = r12
.def mathergh = r13
.def mathergl = r14
.def mathergll = r15
.def temp0 = r16 ;
.def temp1 = r17 ;
.def temp2 = r18
.def temp3 = r19 ;
.def temp4 = r20
.def cnt = r21
;für UART KOM
.equ cpu = 4000000
.equ Baud = 9600
.equ UBRRx = cpu/(16*Baud)-1
;**********LCD Port mit 74HC164
.equ port_lcd_x = portb ;gilt für 4/8bit modus
.equ ddrx_lcd_x = ddrb ;
; Pinbelegungen
; STD
.equ SClock = 0 ;LCD ;;;
.equ SRS = 0
.equ SData = 1 ;74164 ;;;;;so Kann die HW angeschlossen sein
.equ SRW = 1
.equ Light = 2 ;LCD ;;;;;
.equ SEnable = 3 ;74164 ;;;
/*
;********* parallel für LCD/Simulationssoftware*************
.equ st_port_lcd_x = portd
.equ st_ddrx_lcd_x = ddrd
; STD
.equ RW = 3 ;
.equ RS = 4 ;
.equ Enable = 5 ;
*/
;Entry Set
.equ SH = 0 ;1 = Display shift 0 = not shifted
.equ ID = 1 ;1 = increase 0 = decrease
.equ HES = 2 ;immer 1 setzen Symbolisiert das Ende
;des Commandos
;DISPLAY on/off
.equ B = 0 ;1 = Blink 0 = no Blink
.equ C = 1 ;1 = Cursor on 0 = Cursor off
.equ D = 2 ;1 = Disp on 0 = Disp off
.equ HD = 3 ;immer 1 setzen Symbolisiert das Ende
;des Commandos
;Shift
.equ RL = 2 ;1 = right shift 0 = left shift
.equ SC = 3 ;1 = Disp shift 0 = Cursor move
.equ HS = 4 ;immer 1 setzen Symbolisiert das Ende
;des Commandos
;SET Function
.equ F = 2 ;1 = 5x10 0 = 5x7
.equ N = 3 ;1 = 2line(4line) 0 = 1line
.equ DL = 4 ;1 = 8bit int 0 = 4bit interface
.equ HSF = 5 ;immer 1 setzen Symbolisiert das Ende
;des Commandos
/*
;**********Auslesen des LTC1286 externer ADC
.equ LTCPortX = PortB
.equ LTCddrX = DDrB
.equ LTCpinX = PinB
.equ LTCCLK = 0 ;Takterzeugung
.equ LTCDat = 1 ;Daten von Leitung
.equ nCS = 2 ;chipselect/shutdown
;****DS18S20 Digitaler Temperatursensor
.equ ddrx_ds = ddrb
.equ portx_ds = portb
.equ pinx_ds = pinb
.equ pin_ds_x = 0
.equ dssvrng = $00a0 ;Speicherbereich für DS-ID's
.equ dstemphl = $0090 ;Speicherbereich für Temp mit Kommastelle
*/
;**********SRAM
.equ erg_k = $0060 ;erg_k wird bis zu 5 weiteren bytes genutzt sprich erg_k+5
.equ ocra0 = $0065 ;für T0
.equ ocrb0 = $0066 ;für T0
.equ ocra1h = $0067 ;;;;;
.equ ocra1l = $0068 ;;;;;;;; für T1 A channel
.equ ocrb1h = $0069 ;;;;;
.equ ocrb1l = $006a ;;;;;;;; für T1 B channel
.equ icr1xh = $006b ;;;;;
.equ icr1xl = $006c ;;;;;;;; für T1 ICR
.equ LTC_wertH = $006d ;adc extern
.equ LTC_wertL = $006e ;adc extern
.equ eep_adr = $006f ;eeprom
;***************************Einsprungadressen***** ******************
.cseg
.org $0000
rjmp stack
.org $0001 ;1
reti;rjmp INT_0
.org $0002 ;2
reti;rjmp INT_1
.org $0003 ;3
reti;rjmp INT_ICP1
.org $0004 ;4
reti;rjmp INT_OC1A
.org $0005 ;5
reti;rjmp INT_OVF1
.org $0006 ;6
reti;rjmp INT_OVF0
.org $0007 ;7
reti;rjmp INT_URXC
.org $0008 ;8
reti;rjmp INT_UDRE
.org $0009 ;9
reti;rjmp INT_UTXC
.org $000a ;a
reti;rjmp ac_int
.org $000b ;b
reti;rjmp PCINT
.org $000c ;c
reti;rjmp INT_OC1B
.org $000d ;d
reti;rjmp INT_OC0A
.org $000e ;e
reti;rjmp INT_OC0B
.org $000f ;f
reti;rjmp INT_USI_Start
.org $0010 ;10
reti;rjmp INT_USI_OVFL
.org $0011 ;11
reti;rjmp eeprom_rdy
.org $0012 ;12
reti;rjmp INT_WDT_OVFL
;***************************Init mit allem drumdran*****************
stack: ldi temp0,low(ramend) ;Stackpointer festlegen
out spl, temp0
; rcall sram
; rcall lcd_init
; rcall lcd_clear
; rcall werbe1
; rcall werbe2
; rcall wait1s
; rcall leer_z
; rcall mode0_t0_init ;Timer 0 in MODE 0
; rcall prescaler_T0_on ;
; rcall mode8_T1_init ;Timer 1 in MODE 8
; rcall prescaler_T1_on
; rcall INIT_ext_Int01 ;Externe INT aktivieren
; rcall deak_int01
; rcall eeprom_init ;wenn ints bevorzugt werden
; rcall adr_cnt
; rcall eeprom_write
; rcall AC_init ;interner AnalogComparator aktvieren
; rcall ac_change
rcall usart_init ;wenn INT bevorzugt dann hier aktivieren und prog erweitern
; rcall werbe_rs
start: ;rcall zahl_rs_load_out ;Zahlenausgabe über UART
;rcall enter_rs232
;rcall zahl_out_lcd ;Zahleausgabe über LCD
rcall wait1s
rjmp start
;*************************weitere*includedata***** ******************
.include "2313_analogcomparator.asm" ;bezogen auf "2313"
.include "2313_eeprom.asm" ;bezogen auf "2313"
.include "2313_ext_ints.asm" ;bezogen auf "2313"
.include "2313_timercounter.asm" ;bezogen auf "2313"
.include "2313_uart_std.asm" ;bezogen auf "2313"
;.include "2313_LCD_Txt_out.asm"
.include "2313_RS_Txt_out.asm"
;Kompatible Includes
;.include "mathe.asm"
;.include "lcd_KS0066_KS0070_8bit.asm"
.include "zeitschleifen.asm"
.include "hex_dez_wandlung.asm" ;gebraucht für LCD oder nur umwandlung
;*************************ENDE******************** ******************
2313_analogcomparator.asm
;ACHTUNG man kann im simulator nicht mit PD6/7 simulieren geht nur
;wenn ACO händisch gesetzt wird ACO=1 wird auch ACI=1 um den int zu nutzen
;wenn man den int nicht nutzt ist die abfrage auf ACO
AC_init:
ldi temp0,(0<<ACD|0<<ACBG|1<<ACIE|0<<ACIC|0<<ACIS1|0<<ACIS0)
out ACSR,temp0
sei ;
ret
ac_change:
sbis ACSR,ACO
rjmp ac_change
ret
ac_int:
;wird aufgerufen wenn pb1-/pb0+ pegelunterschiede feststellen
reti
2313_eeprom.asm
;*************************************
eeprom_init:
ldi temp0,(1<<EERIE)
out EECR,temp0
sei
ret
eeprom_rdy:
;siehe eeprom_write ;** man kann in der wartezeit andere sachen erledigen
;bis der int kommt, um dann weitere daten an den eeprom zum schreiben zu senden
;nur bei eeprom schreiben möglich
reti
;Adreessierung im eeprom
adr_cnt:lds temp0,eep_adr
inc temp0
cpi temp0,$ff
breq error_eeprom
sts eep_adr,temp0
ret
error_eeprom:
;voll
ret
EEPROM_write:
sbic EECR,EEWE ;** falls eewe im eecr noch gesetzt
rjmp EEPROM_write ;** spring zu zurück
lds r17,eep_adr
out EEARL, r17 ;lowbyte der adr
out EEDR,r16 ;zu speichernder wert
sbi EECR,EEMWE ;sperrt eeprom master write enable
sbi EECR,EEWE ;setze EEWE um eeprom zu schreiben
ret
EEPROM_read:
sbic EECR,EEWE ;falls eewe im eecr noch gesetzt
rjmp EEPROM_read ;springe zurück
lds r17,eep_adr
out EEARL, r17 ;lowbyte der adr
sbi EECR,EERE ;sperrt lesen des eeproms
in r16,EEDR ;zu lesender wert
ret
2313_ext_ints.asm
;PD2/3 sind INT0/1
INIT_EXT_INT01:
in temp0,MCUCR
ori temp0,(1<<ISC11|1<<ISC10|1<<ISC01|1<<ISC00) ;hier INT0/1 auf steigende flanke siehe PDF KAP.13
out MCUCR,temp0
in temp0,GIMSK
ori temp0,(1<<PCIE|1<<INT1|1<<INT0) ;beide INTs aktiv
out GIMSK,temp0
in temp0,PCMSK
ori temp0,(1<<PCINT0|0<<PCINT1|0<<PCINT2|0<<PCINT3|0<<PCINT4|0<<PCINT5|0<<PCINT6|1<<PCINT7)
out PCMSK,temp0
sei ;global int
ret
deak_INT01:
in temp0,GIMSK
andi temp0,(0<<INT1|0<<INT0) ;beide INTs aktiv
out GIMSK,temp0
ret
INT_0: ;hier steht das programm welches ausgeführt werden soll
reti
INT_1: ;hier steht das programm welches ausgeführt werden soll
reti
2313_timercounter.asm
;*****************************INIT-Mode 1 Timer0******************************************** ************************
mode0_T0_init:;NORMAL_MODE TOP = $FF, UpD OCR on IMMEDIATE, FLAG MAX
;rcall A0_ch_en ;out aktivieren
;rcall A0_ch_load ;Zeitwert laden
;rcall B0_ch_en ;out aktivieren
;rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0B
ori temp0,(0<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<COM0A1|0<<COM0A0|0<<COM0B1|0<<COM0B0|0<<WGM01|0<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|0<<OCIE0A|0<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode1_T0_init:;PWM PHASE CORRECT MODE TOP = $FF, UpD OCR on TOP, FLAG BOTTOM
rcall A0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
rcall B0_ch_en ;out aktivieren
rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0B
ori temp0,(0<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|1<<COM0B0|0<<WGM01|1<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|0<<OCIE0A|0<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode2_T0_init:;CTC MODE TOP = OCR0A, UpD OCR on immediate, FLAG MAX
; rcall A0_ch_en ;out aktivieren
rcall B0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
in temp0,TCCR0B
ori temp0,(0<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|1<<COM0B0|1<<WGM01|0<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|0<<OCIE0A|1<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode3_T0_init:;FAST PWM MODE TOP = $FF, UpD OCR on TOP, FLAG MAX
rcall A0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
rcall B0_ch_en ;out aktivieren
rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0B
ori temp0,(0<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(1<<COM0A1|0<<COM0A0|1<<COM0B1|0<<COM0B0|1<<WGM01|1<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|1<<OCIE0A|1<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
;mode4_T0_init: RESERVED
mode5_T0_init:;PWM PHASE CORRECT MODE TOP=OCR0A, UpD OCR on TOP, FLAG BOTTOM
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,TCCR0B
ori temp0,(1<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|0<<COM0B0|0<<WGM01|1<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|1<<OCIE0A|0<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
;mode6_T0_init: RESERVED
mode7_T0_init:;FAST CORRECT MODE TOP=OCR0A, UpD OCR on TOP, FLAG TOP
;rcall A0_ch_en ;out aktivieren
rcall B0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
in temp0,TCCR0B
ori temp0,(1<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<COM0A1|0<<COM0A0|1<<COM0B1|1<<COM0B0|1<<WGM01|1<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|0<<OCIE0A|1<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
;**********Channel load
A0_ch_load:
ldi temp0,$9d ;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
sts OCRa0,temp0 ;____--- oder _------ zu erreichen
out OCR0A,temp0
ret
A0_ch_en:
sbi ddrb,2 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
A0_ch_dis:
cbi ddrb,2 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B0_ch_load:
ldi temp0,$80 ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
sts OCRb0,temp0 ;____--- oder _------ zu erreichen
out OCR0B,temp0
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
prescaler_T0_on:
in temp0,TCCR0B
ori temp0,(0<<CS02|0<<CS01|1<<CS00) ;schmeißt den counter an
out TCCR0B,temp0
sei
ret
prescaler_T0_off:
in temp0,TCCR0B
andi temp0,(0<<CS02|0<<CS01|0<<CS00) ;stoppt den counter an
out TCCR0B,temp0
ret
;*******ISR
INT_OVF0:
;$0006
;Achtung T0 muss hier neu geladen werden und dann die eigene IDEE
reti
INT_OC0A: ;$000d Timer/Counter0 Compare Match A
reti
INT_OC0B: ;$000e Timer/Counter0 Compare Match B
reti
;******************************Init-Modes des Timers1******************************************* ********************
mode0_T1_init:;NORMAL_MODE OCR1A h:l,OCR1B h:l TOP=$FFFF, UpD OCR on IMMEDIATE, FLAG MAX
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(0<<COM1A1|0<<COM1A0|0<<COM1B1|0<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(1<<TOIE1|0<<OCIE1A|0<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode1_T1_init:;8bit phase correct mode OCR1A h:l,OCR1B h:l TOP=$00FF, UpDOCRx on TOP, FLAG BOTTOM
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|1<<COM1A0|1<<COM1B1|1<<COM1B0|0<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode2_T1_init:;9bit phase correct mode OCR1A h:l,OCR1B h:l TOP=$01FF, UpDOCRx on TOP, FLAG BOTTOM
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|1<<COM1A0|1<<COM1B1|1<<COM1B0|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode3_T1_init:;10bit phase correct mode OCR1A h:l,OCR1B h:l TOP=$03FF, UpDOCRx on TOP, FLAG BOTTOM
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|1<<COM1A0|1<<COM1B1|1<<COM1B0|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode4_T1_init:;CTC mode OCR1A h:l,OCR1B h:l TOP=OCR1A, UpDOCRx on IMMEDIATE, FLAG MAX
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(0<<COM1A1|1<<COM1A0|0<<COM1B1|1<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode5_T1_init:;FAST PWM 8bit OCR1A h:l,OCR1B h:l TOP=$00FF, UpDOCRx on TOP, FLAG TOP
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<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<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode6_T1_init:;FAST PWM 9bit OCR1A h:l,OCR1B h:l TOP=$01FF, UpDOCRx on TOP, FLAG TOP
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<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|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode7_T1_init:;FAST PWM 10bit OCR1A h:l,OCR1B h:l TOP=$01FF, UpDOCRx on TOP, FLAG TOP
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<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|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
;hier mit SIMULATOR 2 arbeiten
mode8_T1_init:;PWM,PhaseFrequenzyCorrect OCR1A h:l,OCR1B h:l TOP=ICR1/OCR1A, UpDOCRx on BOT, FLAG BOT
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
; rcall A_ch_load ;Zeitwert laden
; rcall B_ch_load ;Zeitwert laden
rcall ICR_load
ldi temp0,(0<<ICNC1|0<<ICES1|1<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|1<<COM1A0|1<<COM1B1|1<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|0<<OCIE1A|0<<OCIE1B|1<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode9_T1_init:;PWM,PhaseFrequenzyCorrect OCR1A h:l,OCR1B h:l TOP=OCR1A, UpDOCRx on BOT, FLAG BOT
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|1<<ICES1|1<<WGM13|0<<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<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode10_T1_init:;PWM,PahseCorrect OCR1A h:l,OCR1B h:l TOP=ICR1, UpDOCRx on TOP, FLAG BOT
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
;rcall ICR_load
ldi temp0,(0<<ICNC1|0<<ICES1|1<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode11_T1_init:;PWM,PahseCorrect OCR1A h:l,OCR1B h:l TOP=OCR1A, UpDOCRx on TOP, FLAG BOT
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|1<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
;hier mit SIMULATOR 2 arbeiten
mode12_T1_init:;CTC OCR1A h:l,OCR1B h:l TOP=ICR1, UpDOCRx on Immediate, FLAG MAX
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
;rcall A_ch_load ;Zeitwert laden
;rcall B_ch_load ;Zeitwert laden
rcall ICR_load
ldi temp0,(0<<ICNC1|0<<ICES1|1<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(0<<COM1A1|1<<COM1A0|0<<COM1B1|1<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|0<<OCIE1A|0<<OCIE1B|1<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode13_T1_init:;RESERVED not activated
/* ;rcall A_ch_en ;out aktivieren
;rcall B_ch_en ;out aktivieren
;rcall A_ch_load ;Zeitwert laden
;rcall B_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<<TOIE1|0<<OCIE1A|0<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
*/ ret
;hier mit SIMULATOR 2 arbeiten
mode14_T1_init:;FAST PWM OCR1A h:l,OCR1B h:l TOP=ICR1, UpDOCRx on TOP, FLAG TOP
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
;rcall A_ch_load ;Zeitwert laden
;rcall B_ch_load ;Zeitwert laden
rcall ICR_load
ldi temp0,(0<<ICNC1|0<<ICES1|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|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|0<<OCIE1A|0<<OCIE1B|1<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode15_T1_init:;FAST PWM OCR1A h:l,OCR1B h:l TOP=OCR1A, UpDOCRx on TOP, FLAG TOP
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
;rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|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|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|0<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
prescaler_T1_on:
in temp0,TCCR1B
ori temp0,(0<<CS12|0<<CS11|1<<CS10) ;schmeißt den counter an
out TCCR1B,temp0
sei
ret
prescaler_T1_off:
in temp0,TCCR1B
andi temp0,(0<<CS12|0<<CS11|0<<CS10) ;stoppt den counter an
out TCCR1B,temp0
ret
;**********Channel load
A_ch_load:
ldi temp0,$00 ;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
sts OCRa1h,temp0 ;____--- oder _------ zu erreichen
out OCR1ah,temp0
ldi temp0,$1d ;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
sts OCRa1l,temp0 ;____--- oder _------ zu erreichen
out OCR1al,temp0
ret
A_ch_en:sbi ddrb,3 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
A_ch_dis:
cbi ddrb,3 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B_ch_load:
ldi temp0,$00 ;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
sts OCRb1h,temp0 ;____--- oder _------ zu erreichen
out OCR1bh,temp0
ldi temp0,$80 ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
sts OCRb1l,temp0 ;____--- oder _------ zu erreichen
out OCR1bl,temp0
ret
B_ch_en:sbi ddrb,4 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B_ch_dis:
cbi ddrb,4 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
ICR_load:
ldi temp0,$00 ;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
sts ICR1xh,temp0 ;____--- oder _------ zu erreichen
out ICR1h,temp0
ldi temp0,$80 ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
sts ICR1xl,temp0 ;____--- oder _------ zu erreichen
out ICR1l,temp0
ret
T1_clr:
clr temp0
out TCNT1h,temp0
out TCNT1l,temp0
ret
;**********ISR
INT_ICP1: ;$0005 Timer/Counter1 Capture Event
;ICRH:L wird vom Counter TCNT1H:L bei Steigender/Fallender Flanke beschrieben
reti
INT_OC1A: ;$0006 Timer/Counter1 Compare Match A
push temp0
lds temp0,OCRa1h ;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
out OCR1Ah,temp0 ;____--- oder _------ zu erreichen
lds temp0,OCRa1l ;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
out OCR1Al,temp0 ;____--- oder _------ zu erreichen
sts OCRa1l,temp0
pop temp0
reti
INT_OC1B: ;$0007 Timer/Counter1 Compare Match B
push temp0
lds temp0,OCRb1h ;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
out OCR1Bh,temp0 ;____--- oder _------ zu erreichen
lds temp0,OCRb1l ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
out OCR1Bl,temp0 ;____--- oder _------ zu erreichen
pop temp0
reti
INT_OVF1:
;$0008 Timer/Counter1 Overflow
reti
2313.asm
;# Projekt: #
;# #
;# #
;# Taktfrequenz des AVR: 4 MHz #
;# #
;# CS-SOFT #
;###########################################
;.include "2313def.inc" ;2313
.include "tn2313def.inc" ;Tiny 2313
;.include "tn2313Adef.inc" ;Tiny 2313
.def math1h = r8
.def math1l = r9
.def math2h = R10
.def math2l = r11
.def matherghh = r12
.def mathergh = r13
.def mathergl = r14
.def mathergll = r15
.def temp0 = r16 ;
.def temp1 = r17 ;
.def temp2 = r18
.def temp3 = r19 ;
.def temp4 = r20
.def cnt = r21
;für UART KOM
.equ cpu = 4000000
.equ Baud = 9600
.equ UBRRx = cpu/(16*Baud)-1
;**********LCD Port mit 74HC164
.equ port_lcd_x = portb ;gilt für 4/8bit modus
.equ ddrx_lcd_x = ddrb ;
; Pinbelegungen
; STD
.equ SClock = 0 ;LCD ;;;
.equ SRS = 0
.equ SData = 1 ;74164 ;;;;;so Kann die HW angeschlossen sein
.equ SRW = 1
.equ Light = 2 ;LCD ;;;;;
.equ SEnable = 3 ;74164 ;;;
/*
;********* parallel für LCD/Simulationssoftware*************
.equ st_port_lcd_x = portd
.equ st_ddrx_lcd_x = ddrd
; STD
.equ RW = 3 ;
.equ RS = 4 ;
.equ Enable = 5 ;
*/
;Entry Set
.equ SH = 0 ;1 = Display shift 0 = not shifted
.equ ID = 1 ;1 = increase 0 = decrease
.equ HES = 2 ;immer 1 setzen Symbolisiert das Ende
;des Commandos
;DISPLAY on/off
.equ B = 0 ;1 = Blink 0 = no Blink
.equ C = 1 ;1 = Cursor on 0 = Cursor off
.equ D = 2 ;1 = Disp on 0 = Disp off
.equ HD = 3 ;immer 1 setzen Symbolisiert das Ende
;des Commandos
;Shift
.equ RL = 2 ;1 = right shift 0 = left shift
.equ SC = 3 ;1 = Disp shift 0 = Cursor move
.equ HS = 4 ;immer 1 setzen Symbolisiert das Ende
;des Commandos
;SET Function
.equ F = 2 ;1 = 5x10 0 = 5x7
.equ N = 3 ;1 = 2line(4line) 0 = 1line
.equ DL = 4 ;1 = 8bit int 0 = 4bit interface
.equ HSF = 5 ;immer 1 setzen Symbolisiert das Ende
;des Commandos
/*
;**********Auslesen des LTC1286 externer ADC
.equ LTCPortX = PortB
.equ LTCddrX = DDrB
.equ LTCpinX = PinB
.equ LTCCLK = 0 ;Takterzeugung
.equ LTCDat = 1 ;Daten von Leitung
.equ nCS = 2 ;chipselect/shutdown
;****DS18S20 Digitaler Temperatursensor
.equ ddrx_ds = ddrb
.equ portx_ds = portb
.equ pinx_ds = pinb
.equ pin_ds_x = 0
.equ dssvrng = $00a0 ;Speicherbereich für DS-ID's
.equ dstemphl = $0090 ;Speicherbereich für Temp mit Kommastelle
*/
;**********SRAM
.equ erg_k = $0060 ;erg_k wird bis zu 5 weiteren bytes genutzt sprich erg_k+5
.equ ocra0 = $0065 ;für T0
.equ ocrb0 = $0066 ;für T0
.equ ocra1h = $0067 ;;;;;
.equ ocra1l = $0068 ;;;;;;;; für T1 A channel
.equ ocrb1h = $0069 ;;;;;
.equ ocrb1l = $006a ;;;;;;;; für T1 B channel
.equ icr1xh = $006b ;;;;;
.equ icr1xl = $006c ;;;;;;;; für T1 ICR
.equ LTC_wertH = $006d ;adc extern
.equ LTC_wertL = $006e ;adc extern
.equ eep_adr = $006f ;eeprom
;***************************Einsprungadressen***** ******************
.cseg
.org $0000
rjmp stack
.org $0001 ;1
reti;rjmp INT_0
.org $0002 ;2
reti;rjmp INT_1
.org $0003 ;3
reti;rjmp INT_ICP1
.org $0004 ;4
reti;rjmp INT_OC1A
.org $0005 ;5
reti;rjmp INT_OVF1
.org $0006 ;6
reti;rjmp INT_OVF0
.org $0007 ;7
reti;rjmp INT_URXC
.org $0008 ;8
reti;rjmp INT_UDRE
.org $0009 ;9
reti;rjmp INT_UTXC
.org $000a ;a
reti;rjmp ac_int
.org $000b ;b
reti;rjmp PCINT
.org $000c ;c
reti;rjmp INT_OC1B
.org $000d ;d
reti;rjmp INT_OC0A
.org $000e ;e
reti;rjmp INT_OC0B
.org $000f ;f
reti;rjmp INT_USI_Start
.org $0010 ;10
reti;rjmp INT_USI_OVFL
.org $0011 ;11
reti;rjmp eeprom_rdy
.org $0012 ;12
reti;rjmp INT_WDT_OVFL
;***************************Init mit allem drumdran*****************
stack: ldi temp0,low(ramend) ;Stackpointer festlegen
out spl, temp0
; rcall sram
; rcall lcd_init
; rcall lcd_clear
; rcall werbe1
; rcall werbe2
; rcall wait1s
; rcall leer_z
; rcall mode0_t0_init ;Timer 0 in MODE 0
; rcall prescaler_T0_on ;
; rcall mode8_T1_init ;Timer 1 in MODE 8
; rcall prescaler_T1_on
; rcall INIT_ext_Int01 ;Externe INT aktivieren
; rcall deak_int01
; rcall eeprom_init ;wenn ints bevorzugt werden
; rcall adr_cnt
; rcall eeprom_write
; rcall AC_init ;interner AnalogComparator aktvieren
; rcall ac_change
rcall usart_init ;wenn INT bevorzugt dann hier aktivieren und prog erweitern
; rcall werbe_rs
start: ;rcall zahl_rs_load_out ;Zahlenausgabe über UART
;rcall enter_rs232
;rcall zahl_out_lcd ;Zahleausgabe über LCD
rcall wait1s
rjmp start
;*************************weitere*includedata***** ******************
.include "2313_analogcomparator.asm" ;bezogen auf "2313"
.include "2313_eeprom.asm" ;bezogen auf "2313"
.include "2313_ext_ints.asm" ;bezogen auf "2313"
.include "2313_timercounter.asm" ;bezogen auf "2313"
.include "2313_uart_std.asm" ;bezogen auf "2313"
;.include "2313_LCD_Txt_out.asm"
.include "2313_RS_Txt_out.asm"
;Kompatible Includes
;.include "mathe.asm"
;.include "lcd_KS0066_KS0070_8bit.asm"
.include "zeitschleifen.asm"
.include "hex_dez_wandlung.asm" ;gebraucht für LCD oder nur umwandlung
;*************************ENDE******************** ******************
2313_analogcomparator.asm
;ACHTUNG man kann im simulator nicht mit PD6/7 simulieren geht nur
;wenn ACO händisch gesetzt wird ACO=1 wird auch ACI=1 um den int zu nutzen
;wenn man den int nicht nutzt ist die abfrage auf ACO
AC_init:
ldi temp0,(0<<ACD|0<<ACBG|1<<ACIE|0<<ACIC|0<<ACIS1|0<<ACIS0)
out ACSR,temp0
sei ;
ret
ac_change:
sbis ACSR,ACO
rjmp ac_change
ret
ac_int:
;wird aufgerufen wenn pb1-/pb0+ pegelunterschiede feststellen
reti
2313_eeprom.asm
;*************************************
eeprom_init:
ldi temp0,(1<<EERIE)
out EECR,temp0
sei
ret
eeprom_rdy:
;siehe eeprom_write ;** man kann in der wartezeit andere sachen erledigen
;bis der int kommt, um dann weitere daten an den eeprom zum schreiben zu senden
;nur bei eeprom schreiben möglich
reti
;Adreessierung im eeprom
adr_cnt:lds temp0,eep_adr
inc temp0
cpi temp0,$ff
breq error_eeprom
sts eep_adr,temp0
ret
error_eeprom:
;voll
ret
EEPROM_write:
sbic EECR,EEWE ;** falls eewe im eecr noch gesetzt
rjmp EEPROM_write ;** spring zu zurück
lds r17,eep_adr
out EEARL, r17 ;lowbyte der adr
out EEDR,r16 ;zu speichernder wert
sbi EECR,EEMWE ;sperrt eeprom master write enable
sbi EECR,EEWE ;setze EEWE um eeprom zu schreiben
ret
EEPROM_read:
sbic EECR,EEWE ;falls eewe im eecr noch gesetzt
rjmp EEPROM_read ;springe zurück
lds r17,eep_adr
out EEARL, r17 ;lowbyte der adr
sbi EECR,EERE ;sperrt lesen des eeproms
in r16,EEDR ;zu lesender wert
ret
2313_ext_ints.asm
;PD2/3 sind INT0/1
INIT_EXT_INT01:
in temp0,MCUCR
ori temp0,(1<<ISC11|1<<ISC10|1<<ISC01|1<<ISC00) ;hier INT0/1 auf steigende flanke siehe PDF KAP.13
out MCUCR,temp0
in temp0,GIMSK
ori temp0,(1<<PCIE|1<<INT1|1<<INT0) ;beide INTs aktiv
out GIMSK,temp0
in temp0,PCMSK
ori temp0,(1<<PCINT0|0<<PCINT1|0<<PCINT2|0<<PCINT3|0<<PCINT4|0<<PCINT5|0<<PCINT6|1<<PCINT7)
out PCMSK,temp0
sei ;global int
ret
deak_INT01:
in temp0,GIMSK
andi temp0,(0<<INT1|0<<INT0) ;beide INTs aktiv
out GIMSK,temp0
ret
INT_0: ;hier steht das programm welches ausgeführt werden soll
reti
INT_1: ;hier steht das programm welches ausgeführt werden soll
reti
2313_timercounter.asm
;*****************************INIT-Mode 1 Timer0******************************************** ************************
mode0_T0_init:;NORMAL_MODE TOP = $FF, UpD OCR on IMMEDIATE, FLAG MAX
;rcall A0_ch_en ;out aktivieren
;rcall A0_ch_load ;Zeitwert laden
;rcall B0_ch_en ;out aktivieren
;rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0B
ori temp0,(0<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<COM0A1|0<<COM0A0|0<<COM0B1|0<<COM0B0|0<<WGM01|0<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|0<<OCIE0A|0<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode1_T0_init:;PWM PHASE CORRECT MODE TOP = $FF, UpD OCR on TOP, FLAG BOTTOM
rcall A0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
rcall B0_ch_en ;out aktivieren
rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0B
ori temp0,(0<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|1<<COM0B0|0<<WGM01|1<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|0<<OCIE0A|0<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode2_T0_init:;CTC MODE TOP = OCR0A, UpD OCR on immediate, FLAG MAX
; rcall A0_ch_en ;out aktivieren
rcall B0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
in temp0,TCCR0B
ori temp0,(0<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|1<<COM0B0|1<<WGM01|0<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|0<<OCIE0A|1<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode3_T0_init:;FAST PWM MODE TOP = $FF, UpD OCR on TOP, FLAG MAX
rcall A0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
rcall B0_ch_en ;out aktivieren
rcall B0_ch_load ;Zeitwert laden
in temp0,TCCR0B
ori temp0,(0<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(1<<COM0A1|0<<COM0A0|1<<COM0B1|0<<COM0B0|1<<WGM01|1<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|1<<OCIE0A|1<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
;mode4_T0_init: RESERVED
mode5_T0_init:;PWM PHASE CORRECT MODE TOP=OCR0A, UpD OCR on TOP, FLAG BOTTOM
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,TCCR0B
ori temp0,(1<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|0<<COM0B0|0<<WGM01|1<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|1<<OCIE0A|0<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
;mode6_T0_init: RESERVED
mode7_T0_init:;FAST CORRECT MODE TOP=OCR0A, UpD OCR on TOP, FLAG TOP
;rcall A0_ch_en ;out aktivieren
rcall B0_ch_en ;out aktivieren
rcall A0_ch_load ;Zeitwert laden
in temp0,TCCR0B
ori temp0,(1<<WGM02) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0B,temp0
in temp0,TCCR0A
ori temp0,(0<<COM0A1|0<<COM0A0|1<<COM0B1|1<<COM0B0|1<<WGM01|1<<WGM00) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR0A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE0|0<<OCIE0A|1<<OCIE0B) ;INT für OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
;**********Channel load
A0_ch_load:
ldi temp0,$9d ;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
sts OCRa0,temp0 ;____--- oder _------ zu erreichen
out OCR0A,temp0
ret
A0_ch_en:
sbi ddrb,2 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
A0_ch_dis:
cbi ddrb,2 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B0_ch_load:
ldi temp0,$80 ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
sts OCRb0,temp0 ;____--- oder _------ zu erreichen
out OCR0B,temp0
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
prescaler_T0_on:
in temp0,TCCR0B
ori temp0,(0<<CS02|0<<CS01|1<<CS00) ;schmeißt den counter an
out TCCR0B,temp0
sei
ret
prescaler_T0_off:
in temp0,TCCR0B
andi temp0,(0<<CS02|0<<CS01|0<<CS00) ;stoppt den counter an
out TCCR0B,temp0
ret
;*******ISR
INT_OVF0:
;$0006
;Achtung T0 muss hier neu geladen werden und dann die eigene IDEE
reti
INT_OC0A: ;$000d Timer/Counter0 Compare Match A
reti
INT_OC0B: ;$000e Timer/Counter0 Compare Match B
reti
;******************************Init-Modes des Timers1******************************************* ********************
mode0_T1_init:;NORMAL_MODE OCR1A h:l,OCR1B h:l TOP=$FFFF, UpD OCR on IMMEDIATE, FLAG MAX
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(0<<COM1A1|0<<COM1A0|0<<COM1B1|0<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(1<<TOIE1|0<<OCIE1A|0<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode1_T1_init:;8bit phase correct mode OCR1A h:l,OCR1B h:l TOP=$00FF, UpDOCRx on TOP, FLAG BOTTOM
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|1<<COM1A0|1<<COM1B1|1<<COM1B0|0<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode2_T1_init:;9bit phase correct mode OCR1A h:l,OCR1B h:l TOP=$01FF, UpDOCRx on TOP, FLAG BOTTOM
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|1<<COM1A0|1<<COM1B1|1<<COM1B0|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode3_T1_init:;10bit phase correct mode OCR1A h:l,OCR1B h:l TOP=$03FF, UpDOCRx on TOP, FLAG BOTTOM
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|1<<COM1A0|1<<COM1B1|1<<COM1B0|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode4_T1_init:;CTC mode OCR1A h:l,OCR1B h:l TOP=OCR1A, UpDOCRx on IMMEDIATE, FLAG MAX
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(0<<COM1A1|1<<COM1A0|0<<COM1B1|1<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode5_T1_init:;FAST PWM 8bit OCR1A h:l,OCR1B h:l TOP=$00FF, UpDOCRx on TOP, FLAG TOP
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<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<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode6_T1_init:;FAST PWM 9bit OCR1A h:l,OCR1B h:l TOP=$01FF, UpDOCRx on TOP, FLAG TOP
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<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|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode7_T1_init:;FAST PWM 10bit OCR1A h:l,OCR1B h:l TOP=$01FF, UpDOCRx on TOP, FLAG TOP
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|0<<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|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
;hier mit SIMULATOR 2 arbeiten
mode8_T1_init:;PWM,PhaseFrequenzyCorrect OCR1A h:l,OCR1B h:l TOP=ICR1/OCR1A, UpDOCRx on BOT, FLAG BOT
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
; rcall A_ch_load ;Zeitwert laden
; rcall B_ch_load ;Zeitwert laden
rcall ICR_load
ldi temp0,(0<<ICNC1|0<<ICES1|1<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|1<<COM1A0|1<<COM1B1|1<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|0<<OCIE1A|0<<OCIE1B|1<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode9_T1_init:;PWM,PhaseFrequenzyCorrect OCR1A h:l,OCR1B h:l TOP=OCR1A, UpDOCRx on BOT, FLAG BOT
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|1<<ICES1|1<<WGM13|0<<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<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode10_T1_init:;PWM,PahseCorrect OCR1A h:l,OCR1B h:l TOP=ICR1, UpDOCRx on TOP, FLAG BOT
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
;rcall ICR_load
ldi temp0,(0<<ICNC1|0<<ICES1|1<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode11_T1_init:;PWM,PahseCorrect OCR1A h:l,OCR1B h:l TOP=OCR1A, UpDOCRx on TOP, FLAG BOT
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|1<<WGM13|0<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|1<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
;hier mit SIMULATOR 2 arbeiten
mode12_T1_init:;CTC OCR1A h:l,OCR1B h:l TOP=ICR1, UpDOCRx on Immediate, FLAG MAX
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
;rcall A_ch_load ;Zeitwert laden
;rcall B_ch_load ;Zeitwert laden
rcall ICR_load
ldi temp0,(0<<ICNC1|0<<ICES1|1<<WGM13|1<<WGM12) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1B,temp0
in temp0,TCCR1A
ori temp0,(0<<COM1A1|1<<COM1A0|0<<COM1B1|1<<COM1B0|0<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|0<<OCIE1A|0<<OCIE1B|1<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode13_T1_init:;RESERVED not activated
/* ;rcall A_ch_en ;out aktivieren
;rcall B_ch_en ;out aktivieren
;rcall A_ch_load ;Zeitwert laden
;rcall B_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<<TOIE1|0<<OCIE1A|0<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
*/ ret
;hier mit SIMULATOR 2 arbeiten
mode14_T1_init:;FAST PWM OCR1A h:l,OCR1B h:l TOP=ICR1, UpDOCRx on TOP, FLAG TOP
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
;rcall A_ch_load ;Zeitwert laden
;rcall B_ch_load ;Zeitwert laden
rcall ICR_load
ldi temp0,(0<<ICNC1|0<<ICES1|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|1<<WGM11|0<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|0<<OCIE1A|0<<OCIE1B|1<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
mode15_T1_init:;FAST PWM OCR1A h:l,OCR1B h:l TOP=OCR1A, UpDOCRx on TOP, FLAG TOP
rcall A_ch_en ;out aktivieren
rcall B_ch_en ;out aktivieren
rcall A_ch_load ;Zeitwert laden
;rcall B_ch_load ;Zeitwert laden
ldi temp0,(0<<ICNC1|0<<ICES1|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|1<<WGM11|1<<WGM10) ;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
out TCCR1A,temp0
in temp0,TIMSK
ori temp0,(0<<TOIE1|0<<OCIE1A|1<<OCIE1B|0<<ICIE1) ;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
out TIMSK,temp0
ret
prescaler_T1_on:
in temp0,TCCR1B
ori temp0,(0<<CS12|0<<CS11|1<<CS10) ;schmeißt den counter an
out TCCR1B,temp0
sei
ret
prescaler_T1_off:
in temp0,TCCR1B
andi temp0,(0<<CS12|0<<CS11|0<<CS10) ;stoppt den counter an
out TCCR1B,temp0
ret
;**********Channel load
A_ch_load:
ldi temp0,$00 ;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
sts OCRa1h,temp0 ;____--- oder _------ zu erreichen
out OCR1ah,temp0
ldi temp0,$1d ;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
sts OCRa1l,temp0 ;____--- oder _------ zu erreichen
out OCR1al,temp0
ret
A_ch_en:sbi ddrb,3 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
A_ch_dis:
cbi ddrb,3 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B_ch_load:
ldi temp0,$00 ;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
sts OCRb1h,temp0 ;____--- oder _------ zu erreichen
out OCR1bh,temp0
ldi temp0,$80 ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
sts OCRb1l,temp0 ;____--- oder _------ zu erreichen
out OCR1bl,temp0
ret
B_ch_en:sbi ddrb,4 ;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
B_ch_dis:
cbi ddrb,4 ;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
ret
ICR_load:
ldi temp0,$00 ;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
sts ICR1xh,temp0 ;____--- oder _------ zu erreichen
out ICR1h,temp0
ldi temp0,$80 ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
sts ICR1xl,temp0 ;____--- oder _------ zu erreichen
out ICR1l,temp0
ret
T1_clr:
clr temp0
out TCNT1h,temp0
out TCNT1l,temp0
ret
;**********ISR
INT_ICP1: ;$0005 Timer/Counter1 Capture Event
;ICRH:L wird vom Counter TCNT1H:L bei Steigender/Fallender Flanke beschrieben
reti
INT_OC1A: ;$0006 Timer/Counter1 Compare Match A
push temp0
lds temp0,OCRa1h ;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
out OCR1Ah,temp0 ;____--- oder _------ zu erreichen
lds temp0,OCRa1l ;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
out OCR1Al,temp0 ;____--- oder _------ zu erreichen
sts OCRa1l,temp0
pop temp0
reti
INT_OC1B: ;$0007 Timer/Counter1 Compare Match B
push temp0
lds temp0,OCRb1h ;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
out OCR1Bh,temp0 ;____--- oder _------ zu erreichen
lds temp0,OCRb1l ;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
out OCR1Bl,temp0 ;____--- oder _------ zu erreichen
pop temp0
reti
INT_OVF1:
;$0008 Timer/Counter1 Overflow
reti