HAI, I would like to implement TTL interface to a swipe card reader. I want to read track 2 of a card .This contains alphanumeric characters and each character is of 5 bit size which includes one parity bit. I designed a hardware circuit for this with AT89c2051. The data is coming as a stream of bits from the readers magnetic head. So I have store this bit stream to a bit array. I used bdata variable for this purpose, but is not possible to write to the bit position. How I can write these bits to my bit array? What is wrong with code below: I used the pin P1.6 as the input for the data from card reader's magnetic head. Please help me.
sbit dat=P1^6; bdata unsigned char mydata[13]; for (i = 0; i < 13; i++) { for (mask = 0x01; mask != 0x00; mask <<= 1) { mydata[i] & mask = dat; } }
Here the error I got is errorC141:syntax error near'=';
Please give a replay.
HAI, How can I acess a single bit from a character and store a bit into that location ? can you please post a simple example of that.
Access:
(*Store) & (1<<BitNumber);
Store:
if (BitVal==0) *Store &= ~(1<<BitNumber); else *Store |= (1<<BitNumber);
BitNumber is a value 0 to 7.
Since bit manipulation into normal C data types (char or int) is really standard: Why do you not use Google to search for example code? Are you afraid that you may find too many examples?
read bit 5:
unsigned char c = (mydata[i] & 0x20) >> 5 ;
turning bit 5 on:
mydata[i] |= 0x20 ;
turning bit 5 off:
mydata[i] &= ~0x20 ;
This has two magic constants that needs to be updated if changing to another bit number:
Probably better to only have one constant that depends on which bit position to work with.
unsigned char c = (mydata[i] >> 5) & 1;
I really prefer (1<<5) before 0x20 when working with single bits.