Reset: ;Initialisierung bei Reset ldi temp,high(Ramend) ; out sph,temp ldi temp,low(Ramend) out spl,temp cli ldi temp,0xF0 ;Port C als Ein/Ausgang PinA0-2=ADC0-ADC3 Eingänge out DDRC,temp ldi temp, 0b10000111 ;ADC enable, die ersten drei Bit:clk/128->Wandlerclk=62,5kHz out ADCSRA,temp ldi temp,0x0F ;Port D als Ein/Ausgang zum Erfassen von Zuständen out DDRD,temp sei ldi temp,0b00001000 ;USART Transmitter enable aber kein Interrupt out UCSRB,temp ldi temp,0b10000110 ;8N1 out UCSRC,temp ldi temp,0b00000000 ; out UBRRH,temp ;UART Baud Raten Register High ldi temp,51 ;103 ;für 600Baud bei 1 MHz (CLK/(16*Baud))-1 (51 für 1200) out UBRRL,temp ;UART Baud Raten Register Low ;*** Analogports aktivieren ************************************************************** main: ldi temp, 0b11100000 ;ADC0 aktiv, 2,54V int.URef, linksbündig out ADMUX, temp sbi ADCSRA, ADSC ;Bit für Start Converstion setzen warte: sbic ADCSRA, ADSC ;Springe wenn Bit gelöscht ist, ADSC wird 0 wenn Wandlung beendet ist rjmp warte ;in Schleife bleiben, solange Wandlung noch läuft in k1, ADCH ;die ersten 8 Bit der Wandlung in Kanal 1 kopieren ;das Ganze für zweiten, dritten usw. ADC wiederholen ;*** Digitalports aktivieren ****************************************************** in k4,PinD main1: rcall all_kan rjmp ende;main1 ;*** Subroutinen ******************************************************************* all_Kan: ;Subroutine zum Übertragen aller Kanäle starten rcall Kanal1 ;es werden nur 4 Kanäle verwendet ;rcall Kanal2 ;rcall weitere Kanäle, bis max. 8 ret Kanal1: ;Subroutine zum übertragen eines Kanals mov temp,k1 ;*** 1.Kanal swap temp andi temp,0b00001111 ;HighNibbel von Register 0 mit Adresse 0000 (0) rcall TXwarte ; (TX complete abwarten) out UDR,temp ;Senden mov temp,k1 andi temp,0b00001111 ;LowNibble von Register 0 sbr temp,0b00010000 ;Adresse 0001 (1) dazu packen rcall TXwarte ; (TX complete abwarten) out UDR,temp ;Senden ret Kanal2: ; das Ganze für weitere Kanäle wiederholen, dabei die Adresse jeweils um 1 erhöhen TXwarte: sbis UCSRA,UDRE ;USART Data Register empty -> also fertig für neues senden ? rjmp TXwarte ;ja -> dann weiter mit ret ret ende: nop rjmp main