mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C167 (Keil) Interrupt und Timer


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,
ich bin neu hier, und auch neu in der MC-programmierung, welcher ich 
mich im Rahmen meines Studiums widmen muss. Die Aufgabe besteht darin, 
an P2 eine LED timergesteuert blinken zu lassen (Sekundentakt), und 
genau hier haeng ich fest. Es blinkt einfach nicht und der Debugger 
(µVision 3) hilft mir auch nicht weiter. Hier zunaechst mal mein Code:
/****************************************************
* Program: blink.c
* ...toggles a LED connected
* to Pin 57 (Port P2.8)...
* Embedded Systems / Technikum Wien
***************************************************/
#include <reg167.h>
#include <intrins.h>

sbit DirPortP28 = DP2^8 ; // define direction bit
sbit DirT3OUT = DP3^3; // Timer output
sbit PortP28 = P2^8 ; // define port bit

void timX_isr (void) interrupt T3INT = 0x23 {
  PortP28 ^= 1;
}

void init(void) {
  DirPortP28 = 1 ; // set Port2.8 direction to output
  DirT3OUT = 1; //direction bit of timer set to out
  T3CON = 0x0144; // timer configuration, binary: 10 1 000 100, description in usermanual cap. 9
  T3 = 0; // reset Timer
  IEN = 1; // enable interrupts
}

void main(void) {
  init();
  while (1) { // Endless Loop
    _idle_();
  } ;
}

Die Sache ist, dass ich keine Ahnung hab, ob der Interrupt ueberhaupüt 
getriggert wird und nur die LED nicht angeht oder ob schon am IRQ was 
nicht stimmt. Der Compiler hat dazu keine Meinung, syntaktisch scheint 
das Programm so richtig zu sein. Kann mir jemand einen Tipp geben?
Danke sehr.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es wenn du die LED erst mal ohne Timer Interrupt blinken läst. 
Wenn das geht würde ich mich an den Interrupt ran machen.

Ansonsten vermisse ich bei deinem Code den Teil wo der Timer Interrupt 
aktiviert wird.

Autor: wsp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HAllo,

T3IC = ????;

Frequenzberechnung fehlt (T3 laden bzw. nachladen (in der Int. Routine)

zum Testen in der Interrupt Roeutine einen HAltepunkt setzen, dann 
siehst Du ob diese "erreicht" wird

Welche Hochschule arbeitet mit dem C167? (Steinbeis?)

Gruss Winfried

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und danke fuer die Antworten.
Ohne IRQ blinken funktioniert, also mit Warteschleife. Welche Hochschule 
das ist, steht lustigerweise noch im Header (Technikum Wien ;-) ), es 
ist der Grundkurs Embedded Systems. Leider hab ich bisher immer nur 
"normale" PCs programmiert.
Das mit der Frequenzberechnung hatte ich schon befuerchtet, ja. Gibts 
dafuer irgendwo ein Codebeispiel? Muss das in die init() oder direkt in 
die Interruptroutine?
Naja, ich such mal noch bissel, wenn ihr Tips habt, ich nehm sie gerne.
Gruss, Frank

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: ich habs!
T3IC gesetzt (danke noch mal) und natuerlich muss man mit T3R den timer 
auch starten... nun blinkts.

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.