- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 2 von 2

Thema: ATmega16 Bibliothek

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

    ATmega16 Bibliothek

    Anzeige

    Powerstation Test
    Bib für den ATmega16, kompatible Includes sind GRÜN gekennzeichnet und können aus der ATMEGA8 Bibliothek übernommen werden.

    mega16.asm
    Code:
    ;###########################################
    ;# Projekt: 								# 
    ;# 											#
    ;#											#
    ;# Taktfrequenz des AVR: 4 MHz	 			#
    ;# 											#
    ;# CS-SOFT 									#
    ;###########################################
    
    .include "m16def.inc"	;Atmega16
    
    .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
    
    .equ cpu	= 4000000
    .equ Baud	= 9600
    .equ UBRRx	= cpu/(16*Baud)-1
    
    ;**********LCD Port mit 74HC164
    .equ port_lcd_x = 	portc		
    .equ ddrx_lcd_x = 	ddrc
    ;				Pinbelegungen
            ;		   STD
    .equ SClock		= 	4		;LCD	;;;
    .equ SRS		=	4
    .equ SData		= 	5		;74164	;;;;;so Kann die HW angeschlossen sein
    .equ SRW		=	5
    .equ Light		= 	6		;LCD	;;;;;
    .equ SEnable	= 	7		;74164	;;;
    /*
    ;********* parallel für LCD/Simulationssoftware*************
    .equ st_port_lcd_x = portb
    .equ st_ddrx_lcd_x = ddrb
    ;                  STD		;
    .equ RS			=	4		;
    .equ RW			=	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
    ;**********interner ADC
    .equ	ADC_ddr		=	ddrA
    .equ	ADC_Port	=	PortA
    .equ	ADC_Pin		=	PinA
    .equ	Chan0		=	0
    .equ	Chan1		=	1
    .equ	Chan2		=	2
    .equ	Chan3		=	3
    .equ	Chan4		=	4
    .equ	Chan5		=	5
    .equ	Chan6		=	6
    .equ	Chan7		=	7
    .equ	ref5		=	$1312
    .equ	ref256		=	$09d0
    
    ;**********SRAM
    .equ 	erg_k		=	$0060			;erg_k wird bis zu 5 weiteren bytes genutzt sprich erg_k+5
    .equ	ocr0s		=	$0065
    .equ 	ocr2s		=	$0066			;für T2
    .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	hadc		=	$006d			;adc
    .equ	ladc		=	$006e			;adc
    
    .equ	eep_adrh	=	$0070			;eeprom
    .equ	eep_adrl	=	$0071			;eeprom
    .equ	LTC_wertH	=	$0072
    .equ	LTC_wertL	=	$0073
    .equ	Poti0		=	$0074			;Potentiometer 0
    .equ	ploudr		=	$0075			;poti für lautstärke rechts
    .equ	ploudl		=	$0076			;poti für lautstärke links
    .equ	phigh		=	$0077			;poti für höhen		
    .equ	pbass		=	$0078			;poti für bass
    
    ;***************************Einsprungadressen***********************
    .cseg
    .org $0000
    	rjmp	stack
    .org $0002			;2
    	reti;rjmp	INT_0
    .org $0004			;4
    	reti;rjmp	INT_1
    .org $0006			;6
    	reti;rjmp	INT_OC2
    .org $0008			;8
    	reti;rjmp	INT_OVF2
    .org $000a			;a
    	reti;rjmp	INT_ICP1
    .org $000c			;c
    	reti;rjmp	INT_OC1A
    .org $000e			;e
    	reti;rjmp	INT_OC1B
    .org $0010			;10
    	reti;rjmp	INT_OVF1
    .org $0012			;12
    	reti;rjmp	INT_OVF0
    .org $0014			;14
    	reti		;keine SPI Routinen
    .org $0016			;16
    	reti;rjmp	INT_URXC
    .org $0018			;18
    	reti;rjmp	INT_UDRE
    .org $001a			;1a
    	reti;rjmp	INT_UTXC
    .org $001c			;1c
    	reti;rjmp	INT_adc_rdy
    .org $001e			;1e
    	reti;rjmp	INT_eeprom_rdy
    .org $0020			;20
    	reti;rjmp	INT_ac
    .org $0022			;22
    	reti		;keine 2wireRoutinen
    .org $0024			;24
    	reti;rjmp	INT_2
    .org $0026			;26
    	reti;rjmp	INT_OC0    
    .org $0028			;28
    	reti		;keine SPMRoutinen
    		
    		
    
    ;***************************Init mit allem drumdran*****************
    stack:	ldi 		temp1,high(ramend)  ;Stackpointer festlegen
    	    out 		sph, temp1
    		ldi 		temp1,low(ramend)   ;Stackpointer festlegen
            out 		spl, temp1
    	;	rcall		sram
    
    		rcall		lcd_init
    		rcall		lcd_clear
    		rcall		werbe1
    	;	rcall		werbe2
    	;	rcall		wait1s		
    	;	rcall		leer_z
    
    	;	rcall		eeprom_init			;wenn ints bevorzugt werden	
    	;	rcall		eeprom_read
    	;	rcall		eeprom_write
    	;	rcall		adr_cnt
    
    	;	rcall		INIT_ext_Int012
    	;	rcall		deak_int01	
    	
    		rcall		adc_init
    	
    	;	rcall		AC_init
    	;	rcall		ac_change
    	
    	;	rcall		mode3_t0_init
    	;	rcall		prescaler_T0_on
    
    	;	rcall		mode0_t1_init
    	;	rcall		prescaler_T1_on
    
    	;	rcall		usart_init			;wenn INT bevorzugt dann hier aktivieren und prog erweitern 
    		
    
    start:	
    		rjmp		start
    
    
    ;*************************weitere*includedata***********************
    .include "AtMega16_adc_lst.asm"
    .include "AtMega16_analogcomparator.asm"
    .include "AtMega16_eeprom.asm"
    .include "AtMega16_ext_ints.asm"
    .include "AtMega16_timercounter.asm"
    .include "AtMega16_uart_std.asm"
    .include "AtMega16_LCD_Txt_out.asm"
    .include "AtMega16_RS_Txt_out.asm"
    
    .include "l:\etronik\Software3\sonstiges\origin\mathe.asm"
    .include "l:\etronik\Software3\sonstiges\origin\lcd_KS0066_KS0070_8bit.asm"
    .include "l:\etronik\Software3\sonstiges\origin\zeitschleifen.asm"
    .include "l:\etronik\Software3\sonstiges\origin\hex_dez_wandlung.asm" 		;gebraucht für LCD oder nur umwandlung
    AtMega16_adc_lst.asm
    Code:
    /*
    .equ	ADC_ddr		=	ddrc
    .equ	ADC_Port	=	Portc
    .equ	ADC_Pin		=	PinC
    .equ	Chan0		=	0
    .equ	Chan1		=	1
    .equ	Chan2		=	2
    .equ	Chan3		=	3
    .equ	Chan4		=	4
    .equ	Chan5		=	5
    .equ	Chan6		=	6
    .equ	Chan7		=	7
    */
    ;******************************adc_interrupt**********************
    adc_rdy:
    		in			temp0,adcl		;wichtig erst low 
    		sts			ladc,temp0
    		in			temp1,adch		;dann high lesen sonst erg müll
    		sts			hadc,temp1
    		reti
    
    ;***********************adc_header**************************
    adc_header:
    		rcall		adc_init
    		rcall		start_convers_int	;mit Interrupt
    		;rcall		start_convers		;ohne Interrupt
    		ret
    
    ;***********************adc_init*****************************
    adc_init:
    		in			temp0,ADC_ddr
    		ori			temp0,(0<<Chan7|0<<Chan6|0<<Chan5|0<<Chan4|0<<Chan3|0<<Chan2|0<<Chan1|0<<Chan0)
    		out			ADC_ddr,temp0
    
    		in			temp0,ADCSRA
    		ori			temp0,(1<<ADEN|0<<ADSC|0<<ADATE|0<<ADIE|1<<ADPS2|0<<ADPS1|1<<ADPS0)	;	
    		out			ADCSRA,temp0
    
    		rcall		adc_ref_5V							;5V Referenz Channel 0
    
    		in			temp0,SFIOR							;TriggerSource
    		ori			temp0,(0<<ADTS2|0<<ADTS1|0<<ADTS0)	;Man beachte ADATE=0 dann keine Auswirkung auf SFIOR
    		out			SFIOR,temp0	
    
    		ret
    
    ;***********************Wandlung starten******************************************************
    ;mit Interrupt
    start_convers_int:
    		in			temp0,ADCSRA	;wenn ADFR aktiv dann nur adc_read nötig für jeweiligen kanal
    		ori			temp0,(0<<ADEN|1<<ADSC|0<<ADATE|1<<ADIE|1<<ADPS2|0<<ADPS1|0<<ADPS0)	;freigabe ADC Abtastrate zwischen 50Khz-200Khz Teiler=32 single mode
    		out			ADCSRA,temp0	;
    		sei
    		ret
    
    ;ohne Interrupt dann abfrage auf des bits ADSC=1?????
    start_convers:
    		in			temp0,adcsra
    		ori			temp0,(0<<ADEN|1<<ADSC|0<<ADATE|0<<ADIE|1<<ADPS2|0<<ADPS1|1<<ADPS0);freigabe der Messung	
    		out			adcsra,temp0
    start_convers2:					;;;
    		sbic		ADCSR,ADSC		;;;;;; diese kleine routine braucht man nicht wenn man mit ints arbeitet
    		rjmp		start_convers2	;;;
    		in			temp0,adcl		;wichtig erst low 
    		in			temp1,adch		;dann high lesen sonst erg müll
    		sts			ladc,temp0
    		sts			hadc,temp1
    		ret
    
    ;*********************AREF
    adc_ref_extern:		;extern on
    		in			temp0,admux
    		andi		temp0,(0<<REFS1|0<<REFS0|1<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0		
    		ret
    
    adc_ref_5V:			;AVCC on	
    		in			temp0,admux
    		andi		temp0,(0<<REFS1|0<<REFS0|1<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0		
    		ret
    /*
    adc_ref_reserve:	;reserve
    		in			temp0,admux
    		ori			temp0,(1<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0		
    		ret
    */
    adc_ref_256V:		;2,56V on
    		in			temp0,admux
    		andi		temp0,(0<<REFS1|0<<REFS0|1<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
    		ori			temp0,(1<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0		
    		ret
    
    ;*******************Channels**************************************************************************************
    adc_chan_0:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_1:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_2:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|1<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_3:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_4:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_5:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|0<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_6:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|1<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_7:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    ;************************!!!!!!!!!!!!!!Achtung DifferenzKanäle Fussnote beachten im DB***************************************************
    adc_chan_0_0_x10:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_1_0_x10:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|0<<MUX2|0<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_0_0_x200:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|0<<MUX2|1<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_1_0_x200:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|0<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_2_2_x10:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_3_2_x10:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|0<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_2_2_x200:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_3_2_x200:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    ;***** x1fach
    adc_chan_0_1:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_1_1:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_2_1:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|0<<MUX2|1<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_3_1:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|0<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_4_1:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|1<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_5_1:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|1<<MUX2|0<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_6_1:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|1<<MUX2|1<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_7_1:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_0_2:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_1_2:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|0<<MUX2|0<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_2_2:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|0<<MUX2|1<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_3_2:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|0<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_4_2:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|0<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_5_2:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|0<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_122V:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|0<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    
    adc_chan_gnd:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0	
    		ret
    AtMega16_analogcomparator.asm
    Code:
    ;ACHTUNG man kann im simulator nicht mit PB2/3 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:
    		in			temp0,ACSR
    		ori			temp0,(0<<ACD|0<<ACBG|1<<ACI|1<<ACIE|0<<ACIC|1<<ACIS1|0<<ACIS0)
    		out			ACSR,temp0	
    		in			temp0,SFIOR		;
    		ori			temp0,(0<<ACME)	;ADC0-ADC7 nutzbar als negativ Input wenn ACME=1
    		out			SFIOR,temp0	
    		in			temp0,ADMUX
    		ori			temp0,(0<<MUX2|0<<MUX1|0<<MUX0)	;nur nutzbar wenn ADC abgeschaltet ist ADEN=0
    		out			ADMUX,temp0																	;+ messkanal0 (PC0) eingang
    		
    		sei						;
    		ret
    
    ac_change:
    		sbis		ACSR,ACO
    		rjmp		ac_change
    		ret
    
    ac_int:
    		;wird aufgerufen wenn pb2+/pb3- pegelunterschiede feststellen
    		reti
    AtMega16_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_adrl
    		inc		temp0
    		cpi		temp0,$ff
    		breq	adr_cnt2
    		sts		eep_adrl,temp0
    		ret
    adr_cnt2:
    		clr		temp0
    		sts		eep_adrl,temp0
    		lds		temp0,eep_adrh
    		inc		temp0
    		sts		eep_adrh,temp0
    		cpi		temp0,$02
    		breq	error_eeprom
    		ret
    error_eeprom:
    		;voll
    		ret
    
    EEPROM_write:				
    		sbic 	EECR,EEWE		;** falls eewe im eecr noch gesetzt
    		rjmp 	EEPROM_write	;** spring zu zurück
    		lds		r18,eep_adrh
    		out 	EEARH, r18		;highbyte der adr
    		lds		r17,eep_adrl
    		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		r18,eep_adrh
    		out 	EEARH, r18		;highbyte der adr
    		lds		r17,eep_adrl
    		out 	EEARL, r17		;lowbyte der adr
    		sbi 	EECR,EERE		;sperrt lesen des eeproms
    		in 		r16,EEDR		;zu lesender wert
    		ret
    AtMega16_ext_ints.asm
    Code:
    ;PD2/3 sind INT0/1 / PB2 = INT2
    INIT_EXT_INT012:
    		in			temp0,MCUCR
    		ori			temp0,(1<<ISC11|1<<ISC10|1<<ISC01|1<<ISC00) ;
    		out			MCUCR,temp0
    
    		in			temp0,MCUCSR
    		ori			temp0,(1<<ISC2) ;
    		out			MCUCSR,temp0
    
    		in			temp0,GICR
    		ori			temp0,(1<<INT2|1<<INT1|1<<INT0)	;beide INTs aktiv
    		out			GICR,temp0
    
    		sei			;global int
    		ret
    
    deak_INT012:
    		in			temp0,GICR
    		andi		temp0,(0<<INT2|0<<INT1|0<<INT0)			;beide INTs aktiv
    		out			GICR,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
    
    INT_2:	;hier steht das programm welches ausgeführt werden soll
    		reti
    Geändert von avr_racer (18.08.2015 um 23:49 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    AtMega16_timercounter.asm
    Code:
    ;*****************************INIT-Mode 1 Timer0********************************************************************
    mode0_t0_init:
    	;	rcall		T0_ch_load
    	;	rcall		T0_ch_en
    		in			temp1,TIMSK
    		ori			temp1,(1<<TOIE0|0<<OCIE0)
    		out			TIMSK,temp1
    		in			temp1,TCCR0
    		ori			temp1,(0<<FOC0|0<<WGM00|0<<COM01|0<<COM00|0<<WGM01)
    		out			TCCR0,temp1
    		ldi			temp1,$60
    		out			TCNT0,temp1		;bei bedarf freischalten
    		ret
    ;PWM Phase correct
    mode1_t0_init:
    		rcall		T0_ch_load
    		rcall		T0_ch_en
    		in			temp1,TIMSK
    		ori			temp1,(0<<TOIE0|1<<OCIE0)
    		out			TIMSK,temp1
    		in			temp1,TCCR0
    		ori			temp1,(0<<FOC0|1<<WGM00|0<<COM01|1<<COM00|0<<WGM01)
    		out			TCCR0,temp1
    		ret
    ;CTC
    mode2_t0_init:
    		rcall		T0_ch_load
    		rcall		T0_ch_en
    		in			temp1,TIMSK
    		ori			temp1,(0<<TOIE0|1<<OCIE0)
    		out			TIMSK,temp1
    		in			temp1,TCCR0
    		ori			temp1,(0<<FOC0|0<<WGM00|0<<COM01|1<<COM00|1<<WGM01)
    		out			TCCR0,temp1
    		ret
    ;FAST PWM
    mode3_t0_init:
    		rcall		T0_ch_load
    		rcall		T0_ch_en
    		in			temp1,TIMSK
    		ori			temp1,(0<<TOIE0|1<<OCIE0)
    		out			TIMSK,temp1
    		in			temp1,TCCR0
    		ori			temp1,(0<<FOC0|1<<WGM00|1<<COM01|0<<COM00|1<<WGM01)
    		out			TCCR0,temp1
    		ret
    ;***************Channel
    T0_ch_load:
    		ldi			temp0,$80		;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
    		sts			OCR0s,temp0		;____--- oder _------ zu erreichen
    		out			OCR0,temp0
    		ret
    
    T0_ch_en:
    		sbi			ddrb,3		;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    T0_ch_dis:
    		cbi			ddrb,3			;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    ;******************Vorteiler
    prescaler_T0_on:
    		in			temp0,TCCR0
    		ori			temp0,(0<<CS12|0<<CS11|1<<CS10) ;schmeißt den counter an
    		out			TCCR0,temp0
    		sei
    		ret
    
    prescaler_T0_off:
    		in			temp0,TCCR0
    		andi		temp0,(0<<CS12|0<<CS11|0<<CS10) ;stoppt den counter an
    		out			TCCR0,temp0
    		ret
    	
    INT_OVF0:	;Achtung T0 muss hier neu geladen werden und dann die eigene IDEE
    		reti
    
    INT_OCR0:
    		reti
    
    ;******************************Init-Modes des Timers1***************************************************************
    mode0_T1_init:;NORMAL_MODE  OCR1A h:l,OCR1B h:l update ocrxH:L sofort oder im INT
    		;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,(0<<TICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;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 update ocrxH:L on top oder im INT
    		;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<<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<<TICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;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 update ocrxH:L on top oder im INT
    		;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<<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<<TICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;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 update ocrxH:L on top oder im INT
    		;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<<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<<TICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;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 update ocrAH:L oder im INT
    		;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<<WGM13|1<<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,(0<<TICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;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 update ocrxH:L on bottom oder im INT
    		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<<WGM13|1<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR1B,temp0	
    		in			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|0<<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|0<<OCIE1B|0<<TOIE1)	;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 update ocrxH:L on bottom oder im INT
    		;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<<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<<TICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;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 update ocrxH:L on bottom oder im INT
    		;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<<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<<TICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		out			TIMSK,temp0						
    		ret
    
    mode8_T1_init:;PWM,PahseFrequenzyCorrect OCR1A h:l,ICRh:l update ocrxH:L on bottom oder im INT
    		;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<<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|0<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR1A,temp0
    		in			temp0,TIMSK
    		ori			temp0,(1<<TICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		out			TIMSK,temp0						
    		ret
    
    mode9_T1_init:;PWM,PahseFrequenzyCorrect OCR1A h:l,OCR1A h:l update ocrxH:L on bottom oder im INT
    		;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|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<<TICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		out			TIMSK,temp0						
    		ret
    
    mode10_T1_init:;PWM,PahseCorrect OCR1A h:l,ICRh:l update ocrxH:L on top oder im INT
    		;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|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,(1<<TICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		out			TIMSK,temp0						
    		ret
    
    mode11_T1_init:;PWM,PahseCorrect OCR1A h:l,OCRah:l update ocrxH:L on top oder im INT
    		;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|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<<TICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		out			TIMSK,temp0						
    		ret
    
    mode12_T1_init:;CTC OCR1A h:l,ICRh:l update sofort oder im INT
    		;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,(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,(1<<TICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;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<<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		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|1<<WGM11|0<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR1A,temp0
    		in			temp0,TIMSK
    		ori			temp0,(1<<TICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		out			TIMSK,temp0						
    		ret
    
    mode15_T1_init:;FAST PWM OCR1A h:l,OCRah:l update ocrxH:L on bottom oder im INT
    		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,(0<<COM1A1|1<<COM1A0|0<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR1A,temp0
    		in			temp0,TIMSK
    		ori			temp0,(0<<TICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;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,$ff		;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			ddrd,5			;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    A_ch_dis:
    		cbi			ddrd,5			;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			OCR1bh,temp0
    		ret
    
    B_ch_en:sbi			ddrd,4			;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    B_ch_dis:
    		cbi			ddrd,4			;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		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 TVCNT1H: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
    		subi		temp0,$30
    		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
    
    ;*******************************************************************************************************************
    ;******************************Init-Modes des Timers2***************************************************************
    mode0_T2_init:;NORMAL_MODE  OCR2 update sofort oder im INT
    	;	rcall		T2_ch_load
    	;	rcall		T2_ch_en
    		in			temp0,TIMSK
    		ori			temp0,(0<<OCIE2|1<<TOIE2)	;TimerOvfl-Int aktivieren
    		out			TIMSK,temp0
    		ldi			temp0,(0<<WGM21|0<<WGM20|0<<COM21|0<<COM20)	;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
    		out			TCCR2,temp0									
    		ret
    
    mode1_T2_init:;PWM-PhaseCorrect kein toggeln möglich nur Clear/Set, bei erreichen TOP = OCR2 update
    		rcall		T2_ch_load
    		rcall		T2_ch_en
    		in			temp0,TIMSK
    		ori			temp0,(0<<OCIE2|0<<TOIE2);OutputCompareInterrupt deaktiviert
    		out			TIMSK,temp0
    		ldi			temp0,(0<<WGM21|1<<WGM20|1<<COM21|0<<COM20)	;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
    		out			TCCR2,temp0
    		ret
    		
    mode2_T2_init:;CTC = nonPwm = toggeln möglich OCR2 update sofort oder im INT
    		rcall		T2_ch_load
    		rcall		T2_ch_en
    		in			temp0,TIMSK
    		ori			temp0,(0<<OCIE2|0<<TOIE2)					;OutputCompareInterrupt deaktiviert					
    		out			TIMSK,temp0
    		ldi			temp0,(1<<WGM21|0<<WGM20|0<<COM21|1<<COM20)	;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
    		out			TCCR2,temp0
    		ret
    		
    mode3_T2_init:;FastPWM kein toggeln möglich nur Clear/Set, bei erreichen BOTTOM = OCR2 update
    		rcall		T2_ch_load
    		rcall		T2_ch_en
    		in			temp0,TIMSK
    		ori			temp0,(1<<OCIE2|0<<TOIE2)					;OutputCompareInterrupt deaktiviert
    		out			TIMSK,temp0
    		ldi			temp0,(1<<WGM21|1<<WGM20|1<<COM21|0<<COM20)	;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
    		out			TCCR2,temp0
    		ret
    
    ;***************Channel
    T2_ch_load:
    		ldi			temp0,$80		;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
    		sts			OCR0s,temp0		;____--- oder _------ zu erreichen
    		out			OCR0,temp0
    		ret
    
    T2_ch_en:
    		sbi			ddrd,7			;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    T2_ch_dis:
    		cbi			ddrd,7			;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    ;*******************Vorteiler
    prescaler_T2_on:
    		in			temp0,TCCR2
    		ori			temp0,(0<<CS22|1<<CS21|1<<CS20) ;schmeißt den counter an
    		out			TCCR2,temp0
    		sei
    		ret
    
    prescaler_T2_off:
    		in			temp0,TCCR2
    		andi		temp0,(0<<CS22|0<<CS21|0<<CS20) ;stoppt den counter an
    		out			TCCR2,temp0
    		ret
    
    T2_clr:	clr			temp0
    		out			TCNT2,temp0
    		ret
    
    ;************Ints
    INT_OC2: 
    		push		temp1
    		lds			temp1,ocr2s
    		out			ocr2,temp1
    		pop			temp1
    		reti
    
    INT_OVF2:
    		reti
    AtMega16_uart_std.asm
    Code:
    ;************************Unterprogramme******************************
    rx:		rcall		data_received	;warte auf daten von PC
    		cpi			temp1,' '		;vergleich auf leerzeichen
    		brne		rx				;sonst wenn falsch warte weiter
    		ldi			temp1,'*'		;
    		rcall		data_transmit	;sende * als ack
    		ret
    
    tx:		rcall		wait150ms
    		ldi			temp1,'T'
    		rcall		data_transmit	;sende T
    		ldi			temp1,'S'
    		rcall		data_transmit	;sende S
    		ldi			temp1,'T'
    		rcall		data_transmit	;sende T
    		ret
    
    
    
    txt_out_rs_debug:
    		rcall		debug_pnt		;Pointer für Debug laden wird alles in SRAM ab Adresse $0060 geschrieben
    txt_out_rs:
    		lpm		    temp1,z+		;!!! muss in der .db *2 genommen werden
    		cpi			temp1,$ff
    		breq		txt_out_rs_end
    		;st			x+,temp1		;nur einschalten wenn debug angesprungen wird
    		rcall		data_transmit	;z.b.: ldi ZH,high(out0*2)
    		rjmp		txt_out_rs
    txt_out_rs_end:
    		ret
    
    debug_pnt:
    		ldi			xh,high($0060)
    		ldi			xl,low($0060)
    		ret
    
    ;***********This is an ENTER omg*******************************************
    enter_rs232:
    		ldi			temp1,$0d
    		rcall		data_transmit
    		ldi			temp1,$0a
    		rcall		data_transmit
    		ret
    
    leer_zeichen_rs232:
    		ldi			temp1,' '
    		rcall		data_transmit
    		ret
    
    ;***************************ZahlenAusgabe*************************
    zahl_rs_load_out:
    	;	ld			mathergll,y+	;alles in die Mathregs laden
    	;	clr			mathergl
    	;	clr			mathergh
    	;	clr			matherghh
    		rcall		hex_dez			;Zahlenwandlung
    		push		yh				;on stack anderer AdressBereich
    		push		yl				;on stack
    		rcall		load_Y_ergk		;maximale Ausgabe an Zahlen also 5Byte; load_Y_ergk1(4byte),2(3byte),3(2byte),4(1byte)
    zahl_rs_load_out2:
    		rcall		zahl_out_rsx	;Dez in ASCII + Ausgabe
    		cpi			yl,erg_k+5		;
    		brne		zahl_rs_load_out2
    		pop			yl				;from stack
    		pop			yh				;from stack
    		ret	
    
    zahl_out_rsx:						;RSX Ausgabe mit Variabler BYTEZAHL durch load_Y_ergk festgelegt
    		ld			temp1,y+
    		rjmp		zahl_out_rs
    zahl_out_rs1:						;rs Ausgabe 2er Zahlen = 1Byte
    		ld			temp1,y			;   nur um 1byte auszugeben 
    zahl_out_rs:						;wird nur rs1 angesprungen müssen die Daten vorher geladen werden  
    		mov			temp2,temp1
    		swap		temp1
    		andi		temp1,$0f
    		ori			temp1,$30
    		rcall		data_transmit	;Zehnerausgabe
    					;Ausgbabe 1er Zahl
    		mov			temp1,temp2
    		andi		temp1,$0f
    		ori			temp1,$30
    		rcall		data_transmit	;Einerausgabe
    		ret
    
    ;*****************Wandlung von 1A-hex in 1A-ASCII = 31 , 41 Anzeige ist 1 A 
    adr_hex_ASCII_rs:							;Daten vorher in Temp1 laden
    pc_ser2:mov			temp2,temp1				;byte sichern 
    
    		swap		temp1					;swapen
    		andi		temp1,$0f				;ausanden
    		cpi			temp1,$0a				;vergleich ob >= 10
    		brsh		pc_ser21				;wenn ja mach ein HexBuchstabe zu ASCII-Buschstabe
    		subi		temp1,-$30				;wenn nein mach HexZahl zu ASCII-Zahl
    		rjmp		pc_ser22
    pc_ser21:			
    		subi		temp1,-$37				;HexBuchstabe zu ASCII-Buschstabe
    pc_ser22:		
    		rcall		data_transmit			;und ab damit zum PC
    		mov			temp1,temp2				;gesichertes byte laden
    		andi		temp1,$0f				;ausanden
    		cpi			temp1,$0a				;vergleich ob >= 10
    		brsh		pc_ser31				;wenn ja mach ein HexBuchstabe zu ASCII-Buschstabe
    		subi		temp1,-$30				;wenn nein mach HexZahl zu ASCII-Zahl
    		rjmp		pc_ser32
    pc_ser31:
    		subi		temp1,-$37				;HexBuchstabe zu ASCII-Buschstabe
    pc_ser32:
    		rcall		data_transmit			;und ab damit zum PC
    		rcall		leer_zeichen_rs232		;leerzeichen
    		rcall		enter_rs232				;wenn ja mach noch ein ENTER
    		ret
    
    ;************************uart_init mit RX interrupt**********************
    usart_init:
    		ldi 		temp0,(0<<URSEL)
    		out			UCSRC,temp0
    		clr			temp0
    		out			UBRRH,temp0
    		ldi			temp0,$19					;9600 Baud einstellen PDF S.133 table52
    		out 		UBRRL,temp0
    
    		rcall		char_size8					;8 zeichen, 1 stoppbit
    		
    		ldi			temp0,(0<<U2X|0<<MPCM)		;no DoubleSpeed, no MultiProzComMode
    		out			UCSRA,temp0
    		
    		sei
    		ret
    
    char_size5:
    		ldi 		temp0,(1<<URSEL|0<<UMSEL|0<<UPM1|0<<UPM0|0<<USBS|0<<UCSZ1|0<<UCSZ0|0<<UCPOL) ;URSEL=1 UCSRC1 or UBRRH0,USBS=1 stoppbits1,
    		out 		UCSRC,temp0	
    		ldi 		temp0,(0<<RXCIE|0<<TXCIE|0<<UDRIE|1<<RXEN|1<<TXEN|0<<UCSZ2)	;enable RX u TX  <=5bit(UCSZ2=0) 
    		out 		UCSRB,temp0	;
    		ret						
    		
    char_size6:
    		ldi 		temp0,(1<<URSEL|0<<UMSEL|0<<UPM1|0<<UPM0|0<<USBS|0<<UCSZ1|1<<UCSZ0|0<<UCPOL) ;URSEL=1 UCSRC1 or UBRRH0,USBS=1 stoppbits1,
    		out 		UCSRC,temp0	
    		ldi 		temp0,(0<<RXCIE|0<<TXCIE|0<<UDRIE|1<<RXEN|1<<TXEN|0<<UCSZ2)	;enable RX u TX  <=6bit(UCSZ2=0) 
    		out 		UCSRB,temp0	
    		ret												
    			
    char_size7:
    		ldi 		temp0,(1<<URSEL|0<<UMSEL|0<<UPM1|0<<UPM0|0<<USBS|1<<UCSZ1|0<<UCSZ0|0<<UCPOL) ;URSEL=1 UCSRC1 or UBRRH0,USBS=1 stoppbits1,
    		out 		UCSRC,temp0		
    		ldi 		temp0,(0<<RXCIE|0<<TXCIE|0<<UDRIE|1<<RXEN|1<<TXEN|0<<UCSZ2)	;enable RX u TX  <=7bit(UCSZ2=0) 
    		out 		UCSRB,temp0	;
    		ret											
    		
    char_size8:
    		ldi 		temp0,(1<<URSEL|0<<UMSEL|0<<UPM1|0<<UPM0|0<<USBS|1<<UCSZ1|1<<UCSZ0|0<<UCPOL) ;URSEL=1 UCSRC1 or UBRRH0,USBS=1 stoppbits1,
    		out 		UCSRC,temp0	
    		ldi 		temp0,(0<<RXCIE|0<<TXCIE|0<<UDRIE|1<<RXEN|1<<TXEN|0<<UCSZ2)	;enable RX u TX  <=7bit(UCSZ2=0) 
    		out 		UCSRB,temp0	
    		ret					
    
    char_size9:
    		ldi 		temp0,(1<<URSEL|0<<UMSEL|0<<UPM1|0<<UPM0|0<<USBS|1<<UCSZ1|1<<UCSZ0|0<<UCPOL) ;URSEL=1 UCSRC1 or UBRRH0,USBS=1 stoppbits1,
    		out 		UCSRC,temp0	
    		ldi 		temp0,(0<<RXCIE|0<<TXCIE|0<<UDRIE|1<<RXEN|1<<TXEN|1<<UCSZ2)	;enable RX u TX  <=9bit(UCSZ2=1) 
    		out 		UCSRB,temp0	
    		ret								
    
    ;************************uart_deinit********************************
    usart_all_aus:
    		clr			temp0
    		out			UCSRB,temp0
    		out			UCSRC,temp0
    		out			UBRRL,temp0
    		out			UBRRH,temp0
    		ret
    
    usart_ofln:									;wenn unterprogramme nicht 
    		clr			temp0					;gestört werden dürfen
    		out			UCSRB,temp0				;nur usart offline
    		ret
    
    ;**********************daten_senden*********************************
    INT_UTXC:
    		;siehe data_transmit;** man kann in der wartezeit andere sachen erledigen
    		;bis der int kommt im INT selbst könnte man ne art daten-lese-schleife implementieren
    		;um weitere daten zu senden die dann an temp1>>>UDR weitergegeben werden
    		out 		UDR,temp1			; Put LSB data (r17) into buffer, tranceived data
    		reti
    
    data_transmit:
    		sbis		UCSRA,UDRE			;**
    		rjmp		data_transmit		;**
    		out 		UDR,temp1			; Put LSB data (r17) into buffer, tranceived data
    		ret
    
    ;**********************daten_empfangen (polling)**********************
    INT_URXC:
    		in 			temp1,UDR			; Put data from buffer into r17, received Data
    		;siehe data_received;** man kann in der wartezeit andere sachen erledigen
    		;bis der int kommt im INT selbst könnte man ne art daten-schreib-schleife implementieren
    		;um weitere daten zu empfangen die dann an UDR>>>temp1 weitergegeben werden
    		reti
    
    data_received:
    		sbis		UCSRA,RXC			;**
    		rjmp		data_received		;**
    		in 			temp1,UDR			; Put data from buffer into r17, received Data
    		ret
    
    ;********************DatenRegisterLeereInterrupt***********************
    INT_UDRE:
    		;SOLANGE dieses register leer ist wird diese routine aufgerufen
    		;also eigentlich immer wenn UDR=0
    		reti
    AtMega16_LCD_Txt_out.asm
    Code:
    ;Hier her kommen alle Texte und Zahlausgaben  für das LCD die so anfallen
    ;********************TextAusgabeLCD*********************************
    werbe1:	ldi			temp1,0b10000000
    		rcall 		lcd_DDR_AdrX  		
    		ldi 		ZH,high(out0*2)
            ldi 		ZL,low(out0*2)
            rcall 		txt_out
    		ret
    
    ;************************Zahlenausgabe
    zahl_out_lcd:
    		ldi			temp1,0b10000000
    		rcall		lcd_DDR_AdrX   			;auf LCDadresse 00
    ;!!!!!!!!Um andere Werte zu wandeln, müssen diese in matherghh:h:l:ll geladen werden!!!!!!!!!!
    		;clr			matherghh				;hhbyte löschen
    		;clr			mathergh				;hbyte löschen
    		;clr			mathergl				;lbyte löschen
    		;lds			mathergll,				;Wert laden
    		rcall		hex_dez				;Wandlung von HEX in DEZ steht dierekt im RAM
    		rcall		lcd_zahlout_4
    		ret
    
    ;************************direktwandlung*wort*in*ASCII***************
    ;						    *   +	*=16Stellen/+=20stellen
    ;   		"12345678901234567890"
    out0:	.db "  AVR-Atmega16  ",$ff
    ;**************************ende**************************************************
    AtMega16_RS_Txt_out.asm
    Code:
    ;**************Zeichen AUSGABE PC**************************************
    werbe_rs:
    		ldi 		ZH,high(rs_out0*2)
            ldi 		ZL,low(rs_out0*2)
            rcall 		txt_out_rs
    		rcall		enter_rs232
    		ret
    
    ;************************direktwandlung*wort*in*ASCII***************
    rs_out0: .db "TST AtMega16 BIB",$ff

Ähnliche Themen

  1. ASURO Bibliothek auf dem RP6
    Von stochri im Forum Asuro
    Antworten: 8
    Letzter Beitrag: 31.07.2007, 12:13
  2. Bibliothek für atmega 128
    Von muat im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 21.12.2006, 18:27
  3. DOS - Bibliothek
    Von hacker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 14.04.2006, 02:54
  4. Bibliothek für 4x20 LCD
    Von Felix G im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 03.01.2005, 01:01
  5. Assembler Bibliothek
    Von Hellmut im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 27.08.2004, 15:43

Berechtigungen

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

Solar Speicher und Akkus Tests