Hi Leute,
wir haben ein Problem und kriegen es nicht gelöst. Das folgende Programm
zeigt im Groben, was nicht funktioniert.
An einem PIC 16F887 soll an den Pins RB7-RB4 ein Interrupt on Change
registriert werden, und der PORT B wird komplett auf PORTD (zu
Debugging-Zwecken gegeben.) Nach dem ersten Interrupt sollen weitere
Interrupts verboten werden.
Hier der Code:
1 | #include <htc.h>
|
2 | #include <pic16f887.h>
|
3 |
|
4 | void pic_init(){
|
5 | TRISB = 0xff;
|
6 |
|
7 | INTCONbits.RBIE = 1;
|
8 | INTCONbits.GIE = 1;
|
9 |
|
10 | IOCBbits.IOCB7 = 1; // Interrupt an Pin RB 4-7 ermoeglichen
|
11 | IOCBbits.IOCB7 = 1;
|
12 | IOCBbits.IOCB7 = 1;
|
13 | IOCBbits.IOCB7 = 1;
|
14 |
|
15 | ANSELH = 0x00;
|
16 | TRISD = 0x00;
|
17 | }
|
18 |
|
19 | void main (){
|
20 | pic_init();
|
21 | PORTD = 0;
|
22 | while(1)
|
23 | {
|
24 | }
|
25 | }
|
26 |
|
27 | void interrupt isr(void){
|
28 |
|
29 | _delay(10);
|
30 | PORTD = PORTB;
|
31 | INTCONbits.RBIE = 0;
|
32 | INTCONbits.GIE = 0;
|
33 |
|
34 | IOCBbits.IOCB7 = 0; // Interrupt an Pin RB 4-7 verbieten
|
35 | IOCBbits.IOCB7 = 0;
|
36 | IOCBbits.IOCB7 = 0;
|
37 | IOCBbits.IOCB7 = 0;
|
38 | }
|
Allerdings funktioniert das Programm nicht, es werden auch noch weitere
Interrupts akzeptiert.
Wäre echt toll, wenn uns jemand helfen könnte.
MfG David