Forum: Mikrocontroller und Digitale Elektronik Externe Interrupt und Uart


von Sven (Gast)


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();
}

von AVRFan (Gast)


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?

von Sven (Gast)


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.

von Peter D. (peda)


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

von sven (Gast)


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.

von sven (Gast)


Lesenswert?

kann mir keiner da weiterhelfen?

schade na gut trotzdem danke.

von Peter D. (peda)


Lesenswert?

sven wrote:
> kann mir keiner da weiterhelfen?


Du hast ja immer noch nicht die beiden Fragen beantwortet.


Peter

von sven (Gast)


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?


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
Noch kein Account? Hier anmelden.