Hi I have a function that look like this:
void set_ccp1_rc2(unsigned int match_cnt) { T1CONbits.TMR1ON = 0; // Stop timer. TMR1 = 0; //Clear timer. CCPR1 = match_cnt; CCP1CON = 0b00001001; // From here pin will be set. Cleared on match. T1CONbits.TMR1ON = 1; // Roll the timer. } It translates after compile to this: S_timing__set_ccp1_rc2 code _set_ccp1_rc2: ; .line 87; SRC/timing.c void set_ccp1_rc2(unsigned int match_cnt) MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 ; .line 89; SRC/timing.c T1CONbits.TMR1ON = 0; // Stop timer. BCF _T1CONbits, 0 ; .line 90; SRC/timing.c TMR1 = 0; //Clear timer. CLRF _TMR1 ; .line 91; SRC/timing.c CCPR1 = match_cnt; MOVF r0x00, W MOVWF _CCPR1 ; .line 92; SRC/timing.c CCP1CON = 0b00001001; // From here pin will be set. Cleared on match. MOVLW 0x09 MOVWF _CCP1CON ; .line 93; SRC/timing.c T1CONbits.TMR1ON = 1; // Roll the timer. BSF _T1CONbits, 0 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN There is a problem with the running code on the device. It occurs to me that only one byte is written to the _CCPR1 register (MOVWF _CCPR1). Also I am confused to see direct writes to 16-bit equates in the assembly code, is that possible? Should the above translation work as intended or is there something funky? / Tomas ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user