- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 2 von 2

Thema: Tiny 2313 Bibliothek

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174

    Tiny 2313 Bibliothek

    Eine Bib mal für den Tiny2313 kompatible Includes sind GRÜN gekennzeichnet und können aus der ATMEGA8 Bibliothek übernommen werden.

    2313.asm
    Code:
    ;# 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
    Code:
    ;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
    Code:
    ;*************************************
    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
    Code:
    ;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
    Code:
    ;*****************************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
    Geändert von avr_racer (18.08.2015 um 05:28 Uhr)

Ähnliche Themen

  1. Antworten: 13
    Letzter Beitrag: 07.06.2021, 13:38
  2. USI interface an tiny 2313
    Von Bluesmash im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 22
    Letzter Beitrag: 18.11.2013, 16:37
  3. Tiny 2313, tipps und kontrolle gesucht
    Von Ineedhelp im Forum C - Programmierung (GCC u.a.)
    Antworten: 33
    Letzter Beitrag: 20.03.2008, 20:32
  4. Tiny 2313 wie geht 4 x PWM
    Von vajk im Forum AVR Hardwarethemen
    Antworten: 13
    Letzter Beitrag: 07.03.2007, 16:10
  5. Tiny 2313 defekt?
    Von Elias! im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 16.08.2006, 14:56

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress