This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

TTL interface of swipe card reader

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.

Parents
  • C doesn't has any bit arrays.

    Standard C programming can allow you to use a byte array to store any sequence of bits. All you need are the shift operations << and >> together with bit-and & and bit-or |.

    To insert five bits at a time, you can keep two variables.

    Current start byte to write in. (0 .. sizeof(array))
    Current bit position to write in. (0 .. 7)

    if bit offset is 0: write only in first byte and increment bit offset by 5.

    if bit offset is 1: write only in first byte and increment bit offset by 5.

    if bit offset is 2: write only in first byte and increment bit offset by 5.

    if bit offset is 3: write only in first byte. then increment byte offset and set bit offset to 0.

    if bit offset is 4: write four bits in first byte. then write 1 bit to start of second byte. increment byte offset and set bit offset to 1.

    ...

    if bit offset is 7: write one bit to first byte. then write 4 bits to start of second byte. increment byte offset and set bit offset to 4.

    The above can be merged into quite few lines of C code, and is left as an exercise.

    Note that writes to the first byte may require a shift left to skip a number of bit positions. Writes to the second byte may require a shift right, to throw away already written bits.

    If a 16-bit processor was used, it would normally be efficient to have a 16-bit variable where the data is shifted in, and whenever it contains >= 8 bits of data, then one byte is written. This of course also requires that the transfer is finalized by inserting dummy bits after the transfer, until a full byte is available for storing.

Reply
  • C doesn't has any bit arrays.

    Standard C programming can allow you to use a byte array to store any sequence of bits. All you need are the shift operations << and >> together with bit-and & and bit-or |.

    To insert five bits at a time, you can keep two variables.

    Current start byte to write in. (0 .. sizeof(array))
    Current bit position to write in. (0 .. 7)

    if bit offset is 0: write only in first byte and increment bit offset by 5.

    if bit offset is 1: write only in first byte and increment bit offset by 5.

    if bit offset is 2: write only in first byte and increment bit offset by 5.

    if bit offset is 3: write only in first byte. then increment byte offset and set bit offset to 0.

    if bit offset is 4: write four bits in first byte. then write 1 bit to start of second byte. increment byte offset and set bit offset to 1.

    ...

    if bit offset is 7: write one bit to first byte. then write 4 bits to start of second byte. increment byte offset and set bit offset to 4.

    The above can be merged into quite few lines of C code, and is left as an exercise.

    Note that writes to the first byte may require a shift left to skip a number of bit positions. Writes to the second byte may require a shift right, to throw away already written bits.

    If a 16-bit processor was used, it would normally be efficient to have a 16-bit variable where the data is shifted in, and whenever it contains >= 8 bits of data, then one byte is written. This of course also requires that the transfer is finalized by inserting dummy bits after the transfer, until a full byte is available for storing.

Children