Externe Interrupt und Uart

Gast #575550
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();
}
Gast #575589
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?
Gast #575595
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.
#575628
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
Gast #575657
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.
Gast #576432
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren