Official Release 1 ( 17-Dec-2002) does not generate this problem. This is a bug when using patches from 10 Feb 2003.
The first scenario (right shift 3) generates incorrect code. it should be bit.b #llo(8), &0x0030 c-code : /* Initialise key matrix variables */ KP_CurKeyVal = (P5IN & 0x08) >> 3; list file output: 246:src/keys.c **** /* Initialise key matrix variables */ 247:src/keys.c **** KP_CurKeyVal = (P5IN & 0x08) >> 3; 223 .stabn 68,0,247,.LM16-KEYS_InitSW 224 .LM16: 225 0054 F2B0 0300 bit.b #llo(3), &0x0030 225 3000 226 005a C243 0000 clr.b &KP_CurKeyVal 227 005e C263 0000 adc.b &KP_CurKeyVal Correct code is generated for a right shift of 2 c-code: /* Initialise key matrix variables */ KP_CurKeyVal = (P5IN & 0x08) >> 2; list file: 246:src/keys.c **** /* Initialise key matrix variables */ 247:src/keys.c **** KP_CurKeyVal = (P5IN & 0x08) >> 2; 223 .stabn 68,0,247,.LM16-KEYS_InitSW 224 .LM16: 225 0054 5F42 3000 mov.b &0x0030, r15 226 0058 7FF2 and.b #llo(8), r15 227 005a 12C3 clrc 228 005c 4F10 rrc.b r15 229 005e 4F11 rra.b r15 230 0060 C24F 0000 mov.b r15, &KP_CurKeyVal Regards, Phil Hancock Design Engineer Tekelek Pty Ltd 7 Comley St Export Park South Australia 5950 Ph 61 8 8234 3011 Fx 61 8 8234 3242