jo hallo leutz, ich bins nochmal.... also das prog soll über eine eingabe eines bytes ein bit eines ports ändern,.. dann wenn das start byte kommt den adc starten und diesen per rs 232 an einen rechner schicken... kommt ein stopp byte soll dieser aufhöhren,... soweit so gut,... >prob 1: starten ist kein problem bloß aufhöhren will er nicht,.. >prob 2: und wenn ich das stopbyte (ascii->015=SI) bloß so sende macht der gar nÜx mehr... >code: >;############################################################ >;here including origins .org .org 0x00 jmp reset .org URXCaddr ;Interruptvektor für UART-Empfang jmp int_RXD >;############################################################ reset: ldi get,0x00 ldi send,0x00 >;########################################################## > ;PortC für ausgabe initialisieren ldi temp, 0xFF ;0xFF ins Arbeitsregister r16 laden out DDRC, temp ;Inhalt von r16 ins IO-Register DDRC ausgeben ldi poc, 0b00001000 ;0b00000001 in r16 laden (c4 -> all is gnd) out PORTC, poc ;r16 ins IO-Register PORTC ausgeben ;PortB für Asugabe initialisieren ldi temp, 0xFF ;0xFF ins Arbeitsregister r16 laden out DDRB, temp ;Inhalt von r16 ins IO-Register DDRC ausgeben ldi pob, 0b00000000 ;0b00000000 in r16 laden (port c out PORTB, pob ;r16 ins IO-Register PORTC ausgeben ldi temp, LOW(RAMEND) ;Stackpointer initialisieren out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp call USART_init > ;Messbereich 0-5V, Kanal 0pos - 2neg differnential ldi temp, 0b01011000 out ADMUX, temp ldi temp, 0b10000111 ;ADC an, CLK=8MHz/128 out ADCSRA, temp > ;Interrupts global aktivieren sei rcall info >;###################################################################### ###### wait: rjmp wait main: sei > ;(CUR cursor rechts-> also eins weiter , der nächste messwert ldi send,CUR rcall sendbyte ADC_START: clr temp ;Wandlung starten sbi ADCSR,ADSC warte_bis_feddich_gemessen: sbis ADCSR,ADIF rjmp warte_bis_feddich_gemessen in zl, ADCL ;Die unteren 8 Bit in r17 merken in zh, ADCH ;Die oberen 2 Bit in r18 merken push temp mov temp,zl rcall hex2bcd mov send,r23 rcall sendbyte mov send,r22 rcall sendbyte mov send,temp rcall sendbyte ldi send, 32 ; die Bytes 10 und 13 senden rcall sendbyte ldi send, LF ; die Bytes 10 und 13 senden rcall sendbyte ; (Zeilenumbruch im Terminal) ldi send, CR rcall sendbyte pop temp rjmp main >;###################################################################### ###### >; Interruptroutine wird ausgeführt wenn ein Byte über UART empfangen wurde int_RXD: in get,UDR cpi get,0 brne PC + 2 rjmp end_int_rxd cpi get,SI ;(ende der aufzeichnung) brne PC + 2 rjmp wait cpi get,255 ;(Grundstellung) brne PC + 2 rjmp reset lc_modus 1,0b00000001 lc_modus 2,0b00000010 lc_modus 3,0b00000100 lc_modus 4,0b00001000 lc_modus 5,0b00010000 lc_modus 6,0b00100000 lc_modus 7,0b01000000 lc_modus 8,0b10000000 lc_conf 9, 0b00000001 lc_conf 10,0b00000010 lc_conf 11,0b00000100 lc_conf 12,0b00001000 cpi get,SO ;(Umschaltung (op call) ->run) brne PC + 2 rjmp run ldi send,CAN rcall sendbyte rjmp end_int_rxd >;###################################################################### ########### run: ldi send,'k' rcall sendbyte ldi send,ACK rcall sendbyte jmp main >;###################################################################### ########### ich weiß leider nicht mehr weiter,... schon mal vielen dank mfg
also zu prob2: >########################################### wait: sei rjmp wait .... cpi get,SI ;(ende der aufzeichnung) brne PC + 3 cli rjmp wait >########################################### also cli sei dann läufts... aber mit prob1 komm ich net weiter....
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.