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(); }
>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?
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.
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
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.
sven wrote:
> kann mir keiner da weiterhelfen?
Du hast ja immer noch nicht die beiden Fragen beantwortet.
Peter
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.