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???
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
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