Guten Morgen
Ich mache meine berufsausbildung zum Elektroniker in der Schweiz. In
meiner Region ist es üblich, dass man in den ersten zwei Jahren nur
Assembler Programmiert, was ich mittlerweile auch fast im Schlaf
beherrsche.
Eigentlich fangen wir mit C erst in ein paar Monaten an, aber mich reizt
es schon jetzt ein bisschen damit anzufangen. Nun, gestern habe ich mir
mal ein Buch geholt und gemerkt, dass es doch irgendwo eine Gewisse
ähnlichkeit hat.
Ich besitze ein Board mit einem PIC16F887, zum Programmieren verwende
ich den MikroC PRO for PIC. Auf dem Board sind 8 Schalter (PORTA) und 8
LED's (PORTD) angeschlossen.
Da ich mich mit einer if-Anweisung beschäftigt habe, hatte ich folgende
Idee:
Sobald ein Schalter von PORTA (egal welcher) gedrückt ist, leuchten die
ersten 4 LED's. Ist kein Schalter gedrückt, leuchten die anderen 4.
Komischerweise reagiert mein Programm aber nur auf den Schalter der an
PORTA 5 angeschlossen ist, der ganze rest ist ihm egal. (Das Board
funktioniert zu 100 %!)
Ich vermute also, in meinem Code ist irgendwo ein Fehler. Wie gesagt,
ich habe mich bisher evtl. knapp 2 Stunden mit C beschäftigt, also ist
der Code bestimmt nicht gerade das Gelbe vom Ei, darum gehts mir
allerdings nicht. Ich möchte lediglich wissen, ob einer von euch weiss
wieso der nur auf Schalter 5 reagiert. Hier mein Code:
1 | void main()
|
2 | {
|
3 | TRISA = 0xFF; // set direction to be Input
|
4 | TRISB = 0; // set direction to be output
|
5 | TRISC = 0; // set direction to be output
|
6 | TRISD = 0; // set direction to be output
|
7 | TRISE = 0; // set direction to be output
|
8 |
|
9 |
|
10 | while(1) // Endlosschleife
|
11 | {
|
12 |
|
13 | if (PORTA != 0) { // Wenn PORTA nicht = 0
|
14 | PORTD = 0b00001111; // Schalte LED 0 - 4 an
|
15 | }
|
16 | else
|
17 | {
|
18 | PORTD = 0b11110000; // Sonst Schalte LED 5 - 8 an
|
19 | }
|
20 | }
|
21 | }
|
Zweite Frage:
Wie ihr hier gemerkt hat, frage ich einfach ab, ob PORTA nicht = 0
ist... zumindest denke ich, dass ich das mit dem Code tu...
Gibt es einen eleganteren Weg, jetzt z.B. gezielt nur Bit 6 von PORTA
abzufragen... bei Assembler könnte man ja einfach:
schreiben. Gibt es bei C einen ähnlichen Befehl?
Ich danke für alle Antworten und aufklärungen!
Gruss