May I run this code snippet past you all... for some reason, the=20 addition of WREG into ADCON0 (to select the next channel to convert) is=20 failing, but works for numbers less than 0x40: DO_INT_ADC_3 banksel ADCON0 ; just in case BSR was wrong, but makes=20 no difference movlw b'00001111' andwf ADCON0,F,A ; clear top nibble of ADCON0 movlw 0x40 addwf ADCON0,F,A ; set top nibble with next ADC channel=20 to convert: *** FAILS HERE!!! *** movlw 4 movwf INT_ADC_CH,A ; set the next channel to process on=20 following call bsf ADCON0,GO,A ; start conversion return It repeatably fails to add 0x40 to ADCON0, just leaving its value=20 unchanged, but works for values 0x30, 0x20 and 0x10. It doesn't seem to be a carry or 2's compliment issue. I really can't=20 see why this doesn't work. I'll go back to bit twiddling, it works and=20 takes the same amount of code space! Just curious as to why this=20 addition breaks down at this value. Best regards, Matt --=20 http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .