Pic Programm und maskieren????Wie ist es richtig
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache C  |  Pic Programm und maskieren????Wie ist es richtig « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Pic Programm und maskieren????Wie ist es richtig  (Gelesen 392 mal)
 
gw-tuning
Newbie
*
Offline Offline

Beiträge: 10


Profil anzeigen
« am: Januar 07, 2012, 23:02:35 »

Hallo zusammen,

ich habe ein kleines Problem.

Ich habe ein Byte aus einem Array das die Werte 0x00 bis 0x0F annehmen kann...

dieses muss ich am RC0 bis RC3 ausgeben ohne die anderen Bits des Port C zu beeinflussen...

geht das so??:

PORTC = Byte2&0x0F // heisst Byte2 UND 0x0F ausgeben...das heisst alle die auch 1 sind werden ausgegeben alle anderen werden ignoriert? Oder??

Oder muss ich && schreiben???

Danke
Gespeichert
AnyKey
Newbie
*
Offline Offline

Beiträge: 35



Profil anzeigen
« Antworten #1 am: Januar 08, 2012, 18:30:11 »

HI,
mit dem & führst du eine AND Verknüpfung durch.
PORTC = Byte2&0x0F

0x0f = 00001111
          &
Byte2= 11110100
          =
PORTC= 00000100

Mit dem && führst du eine Vergeleich Operation durch.

0x0f = 00001111
          &&
Byte2= 11110100
           =
         FALSE

0x0f = 00001111
          &&
Byte2= 00001111
           =
          TRUE


Gruß Robert
Gespeichert
Edson
Globaler Moderator
Sr. Member
*****
Offline Offline

Beiträge: 373



Profil anzeigen
« Antworten #2 am: Januar 08, 2012, 20:46:24 »

Hallo,

Ich habe ein Byte aus einem Array das die Werte 0x00 bis 0x0F annehmen kann...

dieses muss ich am RC0 bis RC3 ausgeben ohne die anderen Bits des Port C zu beeinflussen...


zuerst musst du die unteren 4 Bit des Port auf Null setzen, damit eine anschliessende ODER-Verknüpfung den neuen Wert auf den Port legt, ohne die anderen Pins zu beeinflussen:

Code:

   ;Beispiel für PIC16:
   PORTC &= 0xF0;
   PORTC |= Byte2;

   ;Beispiel für PIC18:
   LATC &= 0xF0;
   LATC |= Byte2;


Gruß,
Edson
Gespeichert
oerni
Full Member
***
Offline Offline

Beiträge: 196



Profil anzeigen WWW
« Antworten #3 am: Januar 09, 2012, 12:29:56 »

Fast richtig.
Erst den PORTC temporär einlesen und zu ändernde Werte ausblenden, dann verändern und wieder ausgeben.
Wenn du direkt mit den PORTS arbeitest, erzeugst du sonst Spikes an den Ausgängen.

Code:
temp  = PORTC & 0b11110000; nicht relevante retten + zu ändernde löschen
PORTC = temp  | 0b0000xxxx; zu den geretteten die neuen dazu odern

Tschau Oerni
Gespeichert
Edson
Globaler Moderator
Sr. Member
*****
Offline Offline

Beiträge: 373



Profil anzeigen
« Antworten #4 am: Januar 09, 2012, 18:29:40 »

Fast richtig.

Stimmt. Danke für die Richtigstellung.

Gruß,
Edson
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.038 Sekunden mit 18 Zugriffen.
 
Top! Top!