PIC Tastenabfrage

Gast #1357471
Lesenswert?
• ▲
▼
Hallo,
kann mir jemand einen gefallen tun?

Ich hab hier ein PIC18f4550
verwende dazu einen 20MHz Quartz und habe drei Schalter an (RE0, RE1, 
RE2) angeschlossen, dazu sind noch an den PORT's RC2 RB6 & RB7 LED's 
angeschlossen.

Ich Programmiere in Microchip C18

Nun kurz zum Programm und desen Funktion:
Taster 1 einmal drücken LED1 leuchtet (RC2)
Taster 1 nocheinmal drucken LED1 geht wieder aus

Taster 2 einmal drücken LED2 leuchtet (RB6)
Taster 2 nocheinmal drucken LED2 geht wieder aus

Taster 3 einmal drücken LED1 leuchtet (RB7)
Taster 3 nocheinmal drucken LED3 geht wieder aus

Die Taster sind über Pullup und einem Vorwiderstand an den Ports 
angschlossen und werden gegen GND geschaltet
Betriebspg: 5V

Ich habe mal ein bischen versucht:
1
   /** I N C L U D E S **********************************************************/
2
#include <p18cxxx.h>
3
 
4

5
/** Configuration ********************************************************/
6
#pragma config FOSC = HS   //CPU=20 MHz
7
#pragma config PWRT = ON
8
#pragma config BOR = OFF
9
#pragma config WDT = OFF  //Watchdog Timer
10
#pragma config LVP = OFF  //Low Voltage ICSP
11

12

13
#define led1  LATBbits.LATB7
14
#define led2  LATBbits.LATB6
15
#define led3  LATCbits.LATC
16

17

18
#define taster1  PORTEbits.RE0
19
#define taster2  PORTEbits.RE1
20
#define taster3  PORTEbits.RE2
21

22

23
/** D E C L A R A T I O N S **************************************************/
24
#pragma code
25

26
void main(void)
27
{
28
  TRISB = 0;
29
  TRISC = 0;
30
  TRISE = 1;
31

32

33
  while(1)
34
  {
35
  if (taster1 == 1) {
36
    led1 = 1;
37
  } else {
38
    led1 = 0;
39
  }
40
  if (taster2 == 1) {
41
    led2 = 1;
42
  } else {
43
    led2 = 0;
44
  }
45
  if (taster3 == 1) {
46
    led3 = 1;
47
  } else {
48
    led3 = 0;
49
  }
50
  }
51
 }

Leider Funktioniert es nicht (das die LEDs nicht anbleiben beim drücken 
ist mir klar (dazu ist das Programm "noch" nicht im Stande... :)))

Kann mir Jemand helfen BITTE


MfG
Maximilian
Gast #1359428
Lesenswert?
• ▲
▼
Interrupt? Zu was?


Das Problem in Deinem Programm ist, daß die Eingaben der Tasten und 
Ausgaben auf die Led entkoppelt werden müssen. Will heißen:

Taste gedrückt ->
a) Led ist aus -> Led einschalten
b) Led ist ein -> Led ausschalten

Taste nicht gedrückt -> nix tun


und gut.
Gast #1359506
Lesenswert?
• ▲
▼
Der TE sucht ein einfaches Programm. Ihm fehlen doch noch grundlegende 
Kenntnisse in der Programmierung.

Die Interruptlösung ist doch erst für etwas fortgeschrittene User, oder 
seh ich das falsch?

Was macht ein Prozessor in Deiner Interruptlösung? Er dreht 
Warteschleifen und macht nix oder er schläft vor sich hin. Da kann er 
doch ohne Performanceverlust 3 Tasten abfragen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.