Hi Zafi, On Sun, Aug 7, 2011 at 9:27 PM, Zafi Ramarosandratana <zram...@gmail.com> wrote: > Hello, > > __sbit is heavily used in the mcs51 include files of sdcc. > My understanding is that __sbit selects a specific bit from a > register. For example, __sbit at (0x83) P0_3 means P0_3 is bit 3 of > register 0x80. > > With the following C source file: > > #include <8051.h> > main() > { > P0_3 = 1; // set bit 3 of P0 to 1 > P0_5 = 0; // set bit 5 of P0 to 0 > return 0; > } > > the generated asm file contains: > ... > _P0_3=0x0083 > _P0_5=0x0085 > ... > setb _P0_3 > clr _P0_5 > ... > > I don't think that the generated asm instructions do the expected > operation. I may probably miss something obvious. > I'm running sdcc mcs51 3.0.3 #6571. >
No. AFAIK, bit operation and byte operation have different address space in mcs51. So CLR 0x85 means clear the 6th bit of register 0x80, SETB 0x83 means set the 4th bit of register 0x80. I think that's why you could only do bit operations on the registers whose addresses must be a division of 8. -- Cheers, Grissiom ------------------------------------------------------------------------------ BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA The must-attend event for mobile developers. Connect with experts. Get tools for creating Super Apps. See the latest technologies. Sessions, hands-on labs, demos & much more. Register early & save! http://p.sf.net/sfu/rim-blackberry-1 _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user