C167 (Keil) Interrupt und Timer

Gast #1439602
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:
1
/****************************************************
2
* Program: blink.c
3
* ...toggles a LED connected
4
* to Pin 57 (Port P2.8)...
5
* Embedded Systems / Technikum Wien
6
***************************************************/
7
#include <reg167.h>
8
#include <intrins.h>
9

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

14
void timX_isr (void) interrupt T3INT = 0x23 {
15
  PortP28 ^= 1;
16
}
17

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

26
void main(void) {
27
  init();
28
  while (1) { // Endless Loop
29
    _idle_();
30
  } ;
31
}

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.
Gast #1440641
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
Gast #1441307
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.