ik heb volgende probleem:

ik heb 2 atmels aan elkaar gekoppeld via hun poorten C

Maar wanneer ik de poort wil uitlezen lukt het niet
ik gebruikt de volgende code

if ((PINC & 0x02) == 0x02)

op deze manier werkt het. In de help echter zeggen ze dat het

if ((PINC & 0x02) == 0) moet zijn, dit werkt met een 0 ja, MAAR niet met == 1.

kan iemand uitleggen hoe ik dit het best doe???

Je hebt geen probleem met de Atmel, maar met de C code. Het probleem is dat je niet helemaal begrijpt hoe de & (bitwise and) operator werkt.

Een voorbeeld (voor het gemak gebruik ik dezelfde waarden):

PINC = 0x02

wat gebeurt er dan als je het volgende doet:

PINC & 0x02

0x02 in hex is hetzelfde als 00000010 binair

de and operator doet het volgende


00000010 (0x02)
00000010 (0x02)
-------- &
00000010 (0x02)

de uitkomst is dus 00000010 binair (0x02 hex)

een tweede voorbeeld, nu met PINC = 0x1b en 0x17


00011011 (0x1b)
00010111 (0x17)
-------- &
00010011 (0x13)

zoals je ziet wordt er dus bit voor bit een and toegepast

ehmm marcel, je uitleg klopt prima, maar danz ou het werken
kijk maar:



0000 0010  (0x02)
0000 0010  (0x02)
--------- &
0000 0010  (0x02)

dit heb je goed

maar stel nu even dat de bovenst waarde Pin C en en PINC is even een andere waard Bijv zoeits


0101 0011  (0x53)
0000 0010  (0x02)
--------- &
0000 0010  (0x02)

dan klopt de vergelijking dus nog

hij test slechts of bit 2 inderdaad hoog is