www.mikrocontroller.net

Forum: Compiler & IDEs interrupt0 für softwareuart


Autor: karlheinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo, ich möchte am interrupt0 vom avr16 (int0 falling)
serielle daten empfangen.
die eingebundene asm.S ist auch im anhang, da habe ich das register30
genommen???richtig??.

ich weis nicht, ob ich jetzt mit den int0-befehlen richtig liege.
das problem, nach aufruf des int0 muss der der portd.2 auf ausgang
geschaltet werden und danach wieder vorbereitet werden für den int0.
es geht zur zeit mit meinen code nicht. woran leigt das?

der c-code:

#include <inttypes.h>
#include <avr/pgmspace.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include "lcd.h"
#include "lcd.c"
#include <avr/delay.h>

#define delay_us(us)  _delayFourCycles_( ( ( 1*(F_CPU/4000) )*us)/1500
)

uint8_t x;

volatile uint8_t wert_empf;
extern void soft_uart_empf(void);

SIGNAL(SIG_INTERRUPT0)
{
   char buffer[7];

   GICR|=0x00;
   DDRD=4;

   soft_uart_empf();
   x=wert_empf;
   itoa( x , buffer, 10);
   lcd_clrscr();
   lcd_puts("Wert: ");
   lcd_puts(buffer);

   DDRD=0;
   GICR|=0x40;
}

static inline void _delayFourCycles_(uint16_t z)
{
  uint16_t i;

    for (i=0; i<z; i++)
    asm volatile("nop");
}

static inline void delay_ms(uint16_t z)
{
  uint16_t i;

  for (i=0; i<z; i++)
    delay_us(999);
}


int main(void)
{

    DDRD=0;
    MCUCR|=2;
    GICR|=0x40;
    sei();

    lcd_init(LCD_DISP_ON);
    lcd_clrscr();

    for(;;)
   {
  delay_ms(100);
   }

}

die asm.S :
#include <avr/io.h>


.global soft_uart_empf
.func   soft_uart_empf

soft_uart_empf:

__Com1I:     ldi   r24,0x09
    rcall   __Wtic_1
__C1I2:    rcall    __Wtic_1
    clc
    ldi     r16,4
    out     _SFR_IO_ADDR(PORTD), r16
    sec
    dec    r24
    breq    __ende_1
    ror    r30
    rjmp    __C1I2


__Wtic_1:    ldi    R17, 130
WGLOOP1:   dec    R17
      brne   WGLOOP1
      ret

__ende_1:   sts    wert_empf,r30
      ret

.endfunc
 .end

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.