- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Uart senden empfangen Interrups

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2005
    Beiträge
    25
    Anzeige

    Powerstation Test
    achso, das sei habe ich noch dazu gefügt (allerdings noch nicht im obigen quelltext), ronald

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Kennt dein Assembler diese Notation von Binärkonstanten? Die kenn ich nur von einigen Versionen von GCC.
    Disclaimer: none. Sue me.

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2005
    Beiträge
    25
    habe es auch mit 0x86 (b10000110) probiert, aber bin-konst. geht zumind. beim laden zu arbeitsreg
    danke

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo Ronald,
    ich würd Dir gerne helfen ,aber so wie Du Dein Code schreibst, bekommt das kein Mensch zu lesen(nicht böse sein...), ich bin mir auch sicher, daß Du selber in einem Monat nicht mehr weißt, was Du geproggt hast....

    Hier ein paar Beispiele, wie Du es besser machen könntest:
    1. die Bedeutung von .org .def .equ kennenlernen
    Code:
    .include "m8def.inc"
    
    ;UART Konstanten
    .equ CLOCK = 10000000
    .equ BAUD = 9600
    .equ UBRRVAL = CLOCK / (BAUD*16)-1
    
    ;DataPort
    .equ DataPort = PORTB
    .equ DataDDR = DDRB
    .equ DataPin = PINB
    
    ;RamRingPuffer Einstellungen 
    .equ PUFFER = 0x0060
    .equ PUFFER_END = PUFFER + 0x32
    
    ;Ringpufferinit
      ldi XH,HIGH(PUFFER)
      ldi XL,LOW(PUFFER)
      ldi YH,HIGH(PUFFER)
      ldi YL,LOW(PUFFER)
    
    ;Registerdefinieren
    .def LCD_read = R1 ;Display Ausleseregister
    .def Parameter_Counter = R2
    .def Save_rueckspH = R3
    .def Save_rueckspL = R4
    .def Cursor_Status = R5
    .def Zaehler1 = R6
    .def tmp = R16  ;Arbeitsregister 1
    .def tmp2 = R17 ;Arbeitsregister 2
    .def tmp3 = R18 ;Arbeitsregister 3
    .def Status = R19 ;Register fuer diverse Flags
    .def DDRAM = R20 ;DDRAM Zaehler
    So weißt man direkt, welcher Register für was ist, und welche Konstante was zu sagen hat.

    2. Die Vektoren und die reset routine:
    Code:
    .org 0x0000
    	rjmp reset
    	
    .org URXCaddr
    	rjmp read
    reset:
    	
    	ldi tmp,HIGH(RAMEND)
    	out SPH,tmp
    	ldi tmp,LOW(RAMEND)
    	out SPL,tmp
            sbi EnableDDR,Enable
      sbi RSDDR,RS
      sbi RWDDR,RW
      sbi BacklightDDR,Backlight
      sbi KontrastDDR,Kontrast
      ldi tmp,0x0F
      out DataDDR,tmp
      ;UARTinit
      ldi tmp,HIGH(UBRRVAL)
      out UBRRH,tmp
      ldi tmp,LOW(UBRRVAL)
    	out UBRRL,tmp
    	ldi tmp,(1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0) 
    	out UCSRC,tmp
    	ldi tmp,(1<<RXEN) | (1<<TXEN) | (1<<RXCIE)	 
    	out UCSRB,tmp
            sei
    loop:
     rjmp loop
    So, hier sieht man ja welche Bits bei welchen Registern gesetzt werden, auch nach Jahren gut zu lesen....

    3. ISR:

    Code:
    read:
    	
    	push tmp
    	in tmp,SREG
    	push tmp
    	in tmp,UDR
    	st X+,tmp
    	ldi tmp2,LOW(PUFFER_END)
    	ldi tmp,HIGH(PUFFER_END)
    	cp XL,tmp2
    	cpc XH,tmp
    	brlo read1
    	ldi XH,HIGH(PUFFER)
    	ldi XL,LOW(PUFFER)
    read1:
    	pop tmp
    	out SREG,tmp
    	pop tmp
    	reti
    Da brauchst Du kein cli mehr machen (sagte der Sprinter ja schon)

    Diese Beispiele habe ich gerade per copy/paste eingefügt, es ist nicht vollständig, nur als Beispiel anzusehen, aber so werden die Interrupt auf jedem Fall ausgelöst

    gute Nacht Sebastian

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2005
    Beiträge
    25
    hallo,

    also mit sbi setzt man wirklich nur ein bit und nicht den ganzen port bzw register.

    vielen dank trotzdem für die infos, aber bei einem so kleinen programm, war ich zu faul, erst die register usw. umzubennen.
    ich wollte nur das grundlegende testen, dass der UART int beim empfang von daten auslöst. aber bei größeren progs mache ich das natürllich auch.
    danke, ronald

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    also mit sbi setzt man wirklich nur ein bit und nicht den ganzen port bzw register.
    Hat hier jemand was anderes behauptet, oder wie ist diese Aussage gemeint?

    aber bei einem so kleinen programm, war ich zu faul, erst die register usw. umzubennen.
    Dann wundere Dich nicht, wenn hier ein paar Leute zu faul sind Dein Programm zu lesen...

    Gruß Sebastian

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad