Hallo,
Ich bin am Verzweifeln. Ich hab scho überall nach Lösungen gesucht aber
nichts hat funktioniert.
An meinen PIC hab ich ein 2. Externes Quarz (32768Hz) an RC0 und RC1
angeschlossen.
Der Timer 1 soll bis zum Overflow zählen und dann einen Interrupt
werfen.
Im Interrupt soll mir dann ein Buchstabe angezeigt werden.
Geschrieben habe ich den Code für den SDC-Compiler:
1 | #define __16f873
|
2 | #include "pic/pic16f873a.h"
|
3 | #include "LCD/lcd.h"
|
4 |
|
5 | typedef unsigned int config;
|
6 | config at 0x2007 __CONFIG = _CP_OFF &
|
7 | _WDT_OFF &
|
8 | _BODEN_OFF &
|
9 | _PWRTE_ON &
|
10 | _HS_OSC &
|
11 | _LVP_OFF;
|
12 |
|
13 |
|
14 | static void Intr(void) interrupt 0 //auszulösender Inter.
|
15 | {
|
16 | LCD_write_char('I');
|
17 | TMR1IF = 0;
|
18 | TMR1IE = 1;
|
19 | }
|
20 |
|
21 | void main()
|
22 | {
|
23 | TRISB = 0x00; // PortB als Ausgang
|
24 | TRISA = 0xff; // PortA als Eingang
|
25 | TRISC &= 0x03; // PortC als Ausgang (ausser PC0 PC1)
|
26 |
|
27 | ADCON1 = 0x06; // PortA alles auf D I/O
|
28 | PORTB = 0x00;
|
29 |
|
30 | TMR1CS = 1; // Externes Quarz aktiviert
|
31 | TMR1IE = 1; // Timer 1 Interrupt durch Overflow
|
32 | TMR1ON = 1; // Timer 1 wird aktiviert
|
33 | NOT_T1SYNC = 1; // Synchronisation deaktiviert
|
34 | T1OSCEN = 1; // Zähler aktiviert
|
35 | T1CKPS0 = 0; // kein Vorteiler
|
36 | T1CKPS1 = 0; // kein Vorteiler
|
37 | TMR1IF = 0; // Timer1-Interruptflag löschen
|
38 | while ( !GIE ) // Globaler Interrupt aktiviert
|
39 | GIE=1;
|
40 |
|
41 | init_LCD();
|
42 |
|
43 | LCD_write_char('T');
|
44 | while(1); // Endlosschleife
|
45 | }
|
Das LCD funktioniert, Das T wird mir ausgegeben. Der Interrupt soll
jedesmal I schrieben wenn er ausgelöst wird, was aber nicht geschieht.
Der Zähler zählt, das habe Ich schon getestet.
Ich hoffe jemand kann mir helfen.
MfG Andy