Brauche Eure Hilfe M16C65 R5F3650EDFB Habe Probleme mit INT0 und INT1. Beim ausführen des Interrupts hängt sich der uC auf. Was ist falsch??? main
1 | //Include Dateien
|
2 | #include "sfr65.h" //Special Function Register Definition |
3 | #include "stdio.h" //Standart io |
4 | #include "stdlib.h" |
5 | #include "lowlevelinit.h" //Lowlevelinit |
6 | #include "driver_lcd.h" //Treiber 4x20 Zeichen LCD |
7 | |
8 | |
9 | //Variabeln Konstanten Global
|
10 | char encoder_wert=0x00; |
11 | char encoder_flag=0x00; |
12 | |
13 | //Defines
|
14 | //Interrupts
|
15 | |
16 | /*INTERRUPTROUTINE------------------------------------------------------------
|
17 | ** Funktion: INT0 Interruptroutine encoder taste
|
18 | ** Parameter: Keine
|
19 | ** Rückgabe: Keine
|
20 | ** Hardwareadresse INT0
|
21 | **---------------------------------------------------------------------------*/
|
22 | #pragma INTERRUPT int_enc_taste //Encoder Tasten Interrupt
|
23 | void int_enc_taste (void) |
24 | { asm("fclr I"); //protect bit löschen |
25 | int0ic = 0; //int0 deaktivieren |
26 | asm("fset I"); //protect bit aktivieren |
27 | p10_0 = 0x00;//TEST |
28 | asm("fclr I"); //protect bit löschen |
29 | ir_int0ic = 0; //int0 flag löschen |
30 | int0ic = 1; //int0 aktivieren |
31 | asm("fset I"); //protect bit aktivieren |
32 | return; |
33 | }
|
34 | //ENDE INTERRUPTROUTINE ENCODER_Kanal1
|
35 | |
36 | /*INTERRUPTROUTINE------------------------------------------------------------
|
37 | ** Funktion: INT1 Interruptroutine encoder kanal1
|
38 | ** Parameter: Keine
|
39 | ** Rückgabe: Keine
|
40 | ** Hardwareadresse INT1
|
41 | **---------------------------------------------------------------------------*/
|
42 | #pragma INTERRUPT int_enc_ch1 //Encoder Kanal1 Interrupt
|
43 | void int_enc_ch1 (void) |
44 | { asm("fclr I"); //protect bit löschen |
45 | int1ic = 0; //int1 deaktivieren |
46 | asm("fset I"); //protect bit aktivieren |
47 | p10_0 = 0x00;//TEST |
48 | asm("fclr I"); //protect bit löschen |
49 | ir_int1ic = 0; //int1 flag löschen |
50 | int1ic = 1; //int1 aktivieren |
51 | asm("fset I"); //protect bit aktivieren |
52 | // return;
|
53 | }
|
54 | //ENDE INTERRUPTROUTINE ENCODER_Kanal1
|
55 | |
56 | |
57 | |
58 | //Hauptprogramm
|
59 | void main(void) |
60 | {
|
61 | }
|
*sect30.inc*
1 | .lword dummy_int ; vector 27 (for user) timer B1 |
2 | .lword dummy_int ; vector 28 (for user) timer B2 .glb _int_enc_taste ; INT0 (software int 29) |
3 | .lword _int_enc_taste ; INT0 (software int 29) |
4 | .glb _int_enc_ch1 ; INT1 (software int 30) |
5 | .lword _int_enc_ch1 ; INT1 (software int 30) |
6 | .lword dummy_int ; vector 31 (for user) int2 |
7 | .lword dummy_int ; vector 32 (for user or MR30) |
8 | .lword dummy_int ; vector 33 (for user or MR30) |
Danke