www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Externe Interrupt und Uart


Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!!
Habe da eine Frage. ich möchte einen Timer mit einem Externen Interrupt 
Starten an pin 0.1 und mit einem anderen externen Interrupt
an pin 0.3. wieder Stoppen und dann den Wert  auslesen. also habe ich ja 
dann die zeit die das zweite signal später kommt als das erste.
diese zeit möchte ich mir per Uart ausgeben lassen auf meinem PC.

Hab den folgenden Programmcode geschrieben und hoffe das mir jemand 
weiterhelfen kann sind nur die wichtigsten teile drin.
die LED bei den Interrupts habe ich nur verwedet um zu schauen ob die 
Intterupts auch ausgelöst sind und das klappt.

ich Benutze einen C8051F020 von silabs. mit 16 MHz.

Danke schonmal


Hier mein Code bis jetzt.


void main (void){


WDTCN = 0xde;                // Watchdogtimer ausschalten
WDTCN = 0xad;

Init_Device();
EA=1;
PCON |= 0x01;

while(1){


}

void PORT_Init (void)
{
   XBR0     = 0x08;
   XBR1    = 0x1C;                       // no digital peripherals 
selected
   XBR2     = 0x40;                       // Enable crossbar and weak 
pull-ups


}
void oscillator_Init (void){

OSCICN = 0x07;
}


void Interrupts_Init()
{
    IE        = 0x85;
}


void Timer1_Init (void){

   TMOD      = 0x10;
       ET1     = 1;
}



_interrupt(0) void External0IntHandler (void){

     unsigned char Wert1;
     CLR_TR1;
     TR1     = 1;                             // start Timer2

     Wert1 = TL1;

  LED = 0;


}

_interrupt(2) void External1IntHandler (void){

     unsigned char Wert2;
     Wert2 = TH1;
     LED = 1;

}

void Init_Device (void) {

PCA_Init();
PORT_Init();
oscillator_Init();
Timer1_Init();
Interrupts_Init();
}

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Habe da eine Frage.

Ich hab in Deinem Beitrag keine gefunden.

>also habe ich ja dann die zeit die das zweite signal später kommt als
>das erste.

Es wäre gut zu wissen, in welchen Größenordnungen sich Deine Zeiten 
bewegen - 1 µs, 1 ms, 1 s, 1 Stunde?

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uups sorry. wollte wissen ob ich das so mit den Interruptsprogrammieren 
kann. glaube das stimmt noch nicht so ganz.
meine maximale signallänge ist 25µs. also das was ich messe wir nie 
größer als 25µs.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven wrote:

> _interrupt(0) void External0IntHandler (void){
>
>      unsigned char Wert1;
>      CLR_TR1;
>      TR1     = 1;                             // start Timer2

Nen bischen Mühe mußt Du Dir schon geben.
Es stimmt ja nichtmal der Kommentar

>      Wert1 = TL1;

Wozu das ?

>   LED = 0;
>
>
> }
>
> _interrupt(2) void External1IntHandler (void){
>
>      unsigned char Wert2;
>      Wert2 = TH1;

Und was ist mit dem Low Byte ?


Peter

Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also habe mir mühe gegeben aber da ich sowas noch nie gemacht habe war 
ich ja schomal froh das ich die Interrupts ans laufen gebracht habe.
zur funktion der 1. Interrupt soll den Timer starten und der zweite soll 
ihn stoppen  diesen Wert möchte ich ermitteln. das mit dem LED habe ich 
nur rein gemacht um meine Interrupts zu testen ob sie funktionieren.

Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir keiner da weiterhelfen?

schade na gut trotzdem danke.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sven wrote:
> kann mir keiner da weiterhelfen?


Du hast ja immer noch nicht die beiden Fragen beantwortet.


Peter

Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja das lowbite brauche ich natürlich auch ich weiss nur nicht richtig 
wie ich das handhaben soll.

der > _interrupt(0) void External0IntHandler (void){

soll den timer zum laufen Bringen.

kann ich das einfach machen indem ich den TR1=1 setze?

beim > _interrupt(2) void External1IntHandler (void){

soll der Timer gestoppt werden und die Werte gespeichert werden.

also so :
unsigned char wert1,wert2;
TR1=0;
wert1=TL1;
wert2=TH1;

geht es so vielleicht?


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.