We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Dear all, I have a small keyboard in my application and I poll all the keys periodically. I can read all the key values with 2 bytes. Next, I check the bits of these bytes for specific keys. In my program, I have function (check_button()) which gets the byte value and the bit index of the required key. It extracts the bit using '>>' and '<<', and interprets the value.
for (button_index=0; button_index<8; button_index++) check_button(button_port_1, button_index); : : : void check_button(unsigned char buttons, unsigned char button_index) { get the bit using << and >> process it }
for (button_index=0; button_index<8; button_index++) { button_port_1 >>= 1; (I need to get the carry bit) check_button(carry_bit_taken_above, button_index); }
Carry bit is accessible as 'CY' in C51; But beware - there is not necessarily any guarantee that the carry bit will be retained between 'C' statements. If you really need to be working at that level of machine-dependance, you probably need to do it in assembler. Note that C51 does provide a bit data type - could you use that, rather than rely specifically on the CPU's Carry Flag?
Andrew, Thanks for the reply. I know the bit data type. But, fastest way of accessing bits of a byte seems as using RRC and accessing carry flag. Am I wrong? Maybe I should change the question as follows: What is the fastest method to access any bit of a byte programmitically?
The question is really how to test a given bit in a byte. Here is code I often use.
typedef unsigned char BYTE; BYTE code BMaskC[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; main() { BYTE Dummy; BYTE Button,Idx; if( Button & BMaskC[Idx] ) Dummy++; } ; FUNCTION main (BEGIN) 0000 E500 R MOV A,Idx 0002 900000 R MOV DPTR,#BMaskC 0005 93 MOVC A,@A+DPTR 0006 5500 R ANL A,Button 0008 6002 JZ ?C0002 000A 0500 R INC Dummy 000C ?C0002: 000C 22 RET
Jon, Thanks for the reply. I'll use this approach for bit access.