2313_uart_std.asm
Code:
;************************einfaches Testprogramm******************************
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
		rcall		enter_rs232
		ret



;***********************hier wird der Text aus der DB ausgegeben***********
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			temp1,High(UBRRx)
		ldi			temp0,Low(UBRRx)					;9600 Baud einstellen PDF S.133 table52
		out			UBRRH,temp1
		out 		UBRRL,temp0

		rcall		char_size8					;8 zeichen, 1 stoppbit
		
		ldi			temp0,(0<<U2X|0<<MPCM)		;no DoubleSpeed, no MultiProzComMode, alle anderen BITS sind FLAGS
		out			UCSRA,temp0
		
		ret

char_size5:
		ldi 		temp0,(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|0<<RXB8|0<<TXB8)	;enable RX u TX  <=5bit(UCSZ2=0) 
		out 		UCSRB,temp0	;
		ret						
		
char_size6:
		ldi 		temp0,(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|0<<RXB8|0<<TXB8)	;enable RX u TX  <=6bit(UCSZ2=0) 
		out 		UCSRB,temp0	
		ret												
			
char_size7:
		ldi 		temp0,(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|0<<RXB8|0<<TXB8)	;enable RX u TX  <=7bit(UCSZ2=0) 
		out 		UCSRB,temp0	;
		ret											
		
char_size8:
		ldi 		temp0,(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|0<<RXB8|0<<TXB8)	;enable RX u TX  <=7bit(UCSZ2=0) 
		out 		UCSRB,temp0	
		ret					

char_size9:
		ldi 		temp0,(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|0<<RXB8|0<<TXB8)	;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
;(polling)
data_transmit:
		sbis		UCSRA,UDRE			;**
		rjmp		data_transmit		;**
		out 		UDR,temp1			; Put LSB data (r17) into buffer, tranceived data
		ret

;**********************daten_empfangen **********************
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
;(polling)
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
2313_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,0b11000000
		rcall		lcd_DDR_AdrX   			;auf LCDadresse 00
		;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_5			;wieviele Stellen ausgegeben werden sollen 1-5
		ret

;************************direktwandlung*wort*in*ASCII***************
;						    *   +	*=16Stellen/+=20stellen
;   		"12345678901234567890"
out0:	.db " AVR-ATiny2313  ",$ff
;**************************ende**************************************************
2313_RS_Txt_out.asm
Code:
;**************Textausgabe über UART **************************************
werbe_rs:
		ldi 		ZH,high(rs_out0*2)
        ldi 		ZL,low(rs_out0*2)
        rcall 		txt_out_rs
		rcall		enter_rs232			;Enter neue Zeile
		ret

;************************direktwandlung*wort*in*ASCII***************
rs_out0: .db "TST Tiny2313 BIB",$ff