Forum: Mikrocontroller und Digitale Elektronik Entwicklungsboard Easy PIC v7 (PIC18F45K22)


von Da Mo (Gast)


Lesenswert?

Guten Morgen,

wie muss ich bei folgendem Chip mit Interrupts umgehen (typspezifische 
Befehle, ...)?

- PIC18F45K22

Ich habe den Chip auf einem Entwicklungsboard Easy PIC v7.

VIELEN DANK!

von Chris B. (dekatz)


Lesenswert?


von Michael_ohl (Gast)


Lesenswert?

Das klingt nach Kaffeesatz und Glaskugel!

Welchen Interrupt willst Du benutzen (müssen einzeln für jede Periferie 
eingeschaltet werden) welche Programierspache, was soll die ISR tun etc.

fragen über fragen...


mfG
Michael

von Da Mo (Gast)


Lesenswert?

Guten Abend,

ich möchte folgendes Programm auf meinem Easy PIC v7 (PIC18F45K22) zum 
laufen bringen!?

Das folgende Programm ist für den PIC18F4550 geschrieben.
1
#include <p18f4550.h>
2
#include <portb.h>
3
#include <timers.h>
4
#include <delays.h>
5
6
/* low voltage programming off*/
7
#pragma config LVP = OFF
8
/* wathdog timer off*/
9
#pragma config WDT = OFF
10
/* portb komplett digital */
11
#pragma config PBADEN = OFF
12
#pragma config DEBUG = ON
13
14
void isr_high();
15
void isr_low();
16
17
#pragma code high_vector= 0x08
18
 void high_isr (void){
19
  _asm
20
    goto isr_high
21
  _endasm
22
}
23
#pragma code
24
25
#pragma code low_vector= 0x18
26
 void low_isr (void){
27
  _asm
28
    goto isr_low
29
  _endasm
30
}
31
#pragma code
32
33
#pragma interrupt isr_high  
34
void isr_high(){
35
  if(INTCONbits.INT0IF== 1){
36
    INTCONbits.INT0IF= 0;
37
    PORTD= 0x0F;
38
    Delay10KTCYx(255);
39
  }
40
}
41
42
#pragma interruptlow isr_low
43
void isr_low(){
44
  static unsigned char counter= 0;
45
  if(INTCONbits.TMR0IF== 1){
46
    INTCONbits.TMR0IF= 0;
47
    if(counter %2)
48
      PORTD= 0x30;
49
    else{
50
      PORTD= 0xC0;
51
      counter= 0;
52
    }
53
    counter++;
54
  }
55
}
56
57
void main(){
58
  static unsigned char counter= 0;
59
  TRISD= 0x00;
60
  TRISC= 0x00;
61
  TRISB= 0x01;  
62
  PORTD= 0x00;
63
  PORTC= 0x01;
64
65
  RCONbits.IPEN= 1; /*enable low interrupts generally*/
66
  INTCON2bits.TMR0IP= 0;  /*timer0 auf low int*/
67
   INTCONbits.PEIE = 1; // Enable Peripheral interrupt
68
  INTCONbits.GIEL = 1; // Enble Global interrupt low
69
  INTCONbits.GIEH = 1; // Enble Global interrupt high
70
71
  OpenTimer0(TIMER_INT_ON & T0_SOURCE_INT & T0_16BIT & T0_PS_1_128);
72
  OpenRB0INT(PORTB_CHANGE_INT_ON & FALLING_EDGE_INT &PORTB_PULLUPS_OFF);
73
  WriteTimer0(0);
74
75
  while(1){
76
    if(counter %2)
77
      PORTC= 0xF0;
78
    else{
79
      PORTC= 0x0F;
80
      counter= 0;
81
    }
82
    Delay10KTCYx(255);
83
    counter++;
84
  }
85
}

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

So auf den ersten Block sollte es reichen, das Include zu ändern.

Und dann sollte man über den Sinn von Delays in ISRs nachdenken...

von Da Mo (Gast)


Lesenswert?

ISRs???

von Michael_Ohl (Gast)


Lesenswert?

Interrupt Service Routine.

Und Delay sind da schon recht gewöhnungsbedürftig drin.

mfG
Michael

von Da Mo (Gast)


Lesenswert?

@ Michael_Ohl

Hast du selber ein EasyPIC v7?

von Stefan (Gast)


Lesenswert?

Geht der hier nicht in den DEBUG Modus ?
#pragma config DEBUG = ON

Nimm die ganzen #pragma raus und
stell es im Compilerprogramm ein.

PROJECT/EDIT PROJEKCT

von Da Mo (Gast)


Lesenswert?

Funktioniert nicht!?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.