hallo zusammen,
könnte sich einer mal folgenden quäl-code anschauen?
damit will ich einen einfachen schalter abfragen und abhängig davon
licht an und ausschalten.
Initialisierung (einmalige Ausführung)
1 | void SwitchInit(void){
|
2 |
|
3 | TRISDbits.TRISD8 = 1; //d8 --> input
|
4 |
|
5 | if(PORTDbits.RD8){ //d8 is currently high
|
6 |
|
7 | INTCON2bits.INT1EP = 1; //interrupt on negative edge
|
8 |
|
9 | LightOn();
|
10 | }
|
11 | else{
|
12 |
|
13 | INTCON2bits.INT1EP = 0; //interrupt on positive edge
|
14 |
|
15 | LightOff();
|
16 | }
|
17 |
|
18 | IFS1bits.INT1IF = 0; //reset INT1 interrupt flag
|
19 |
|
20 | IEC1bits.INT1IE = 1; //enable interrupts for INT1
|
21 | }
|
ISR für INT1 und zugehörigen Timer
1 | void __attribute__((__interrupt__)) _INT1Interrupt(void){
|
2 |
|
3 | IFS1bits.INT1IF = 0; //reset INT1 interrupt flag
|
4 |
|
5 | IEC1bits.INT1IE = 0; //disable interrupts for INT1
|
6 |
|
7 |
|
8 | if(PORTDbits.RD8){ //d8 is currently high
|
9 |
|
10 | INTCON2bits.INT1EP = 1; //next interrupt on negative edge
|
11 |
|
12 | LightOn();
|
13 | }
|
14 | else{
|
15 |
|
16 | INTCON2bits.INT1EP = 0; //next interrupt on positive edge
|
17 |
|
18 | LightOff();
|
19 | }
|
20 |
|
21 |
|
22 | /* Timer 3 on (for debouncing) */
|
23 |
|
24 | TMR3 = 0x0000;
|
25 | T3CONbits.TON = 1;
|
26 | }
|
27 |
|
28 | void __attribute__((__interrupt__)) _T3Interrupt(void){
|
29 |
|
30 | /* Timer 3 off */
|
31 | T3CONbits.TON = 0;
|
32 |
|
33 |
|
34 | IFS1bits.INT1IF = 0; //reset INT1 interrupt flag
|
35 |
|
36 | IEC1bits.INT1IE = 1; //enable interrupts for INT1
|
37 |
|
38 |
|
39 | if(PORTDbits.RD8){ //d8 is currently high
|
40 |
|
41 | INTCON2bits.INT1EP = 1; //next interrupt on negative edge
|
42 |
|
43 | LightOn();
|
44 | }
|
45 | else{
|
46 |
|
47 | INTCON2bits.INT1EP = 0; //next interrupt on positive edge
|
48 |
|
49 | LightOff();
|
50 | }
|
51 |
|
52 |
|
53 | /* Reset Timer 3 Interrupt Flag */
|
54 | IFS0bits.T3IF = 0;
|
55 | }
|
Timer initialisierung
1 | void Timer3Init(void){
|
2 |
|
3 | T3CONbits.TCS = 0;
|
4 | T3CONbits.TGATE=0;
|
5 | T3CONbits.TCKPS=0b11;
|
6 | PR3=5760;
|
7 | IEC0bits.T3IE = 1;
|
8 | IFS0bits.T3IF = 0;
|
9 | TMR3 = 0x0000;
|
10 | T3CONbits.TON = 0;
|
11 | }
|
haut das so hin, dass ich einerseits den pin rb8 als input pin abfrage
und andererseits als interrupt pin verwende?
und wie siehts aus mit dem entprellen per timer passt das so?
thx,
grüße