Hi, I have to transmit an unsigned long as four bytes, so I split them up
and join them again, but with the folowing example code, I get overflow at
long_counter>32767 - can any of you give me a clue how to do it right?

<http://code.google.com/p/kodak-timer/source/browse/ir_test/four_unsigned_char_to_unsigned_long.c>

unsigned char i;
unsigned long long_counter;
unsigned char char_counter[4];

void main(void) {
        unsigned char len;
        unsigned char lcd_buf[16];

        OSCCONbits.SCS = 0x0;           // System Clock Select bits = External 
oscillator
        OSCCONbits.IRCF = 0x7;          // Internal Oscillator Frequency Select 
bits 8
MHz (INTOSC drives clock directly)

        lcd_init();
        while (1) {
                for (long_counter = 0; long_counter < 0xffff0000; long_counter 
+= 50) {
                        // split long_counter to four unsigned char's
                        for (i = 0; i < 4; i++) {
                                char_counter[i] = (long_counter & (0xff << (i * 
8))) >> (i * 8);
                        }

                        // convert them to unsigned int again
                        long_counter = char_counter[0] | (char_counter[1] << 8) 
|
(char_counter[2] << 16) | (char_counter[3] << 24);
                        sprintf(lcd_buf, "%lu", long_counter);
                        debug(lcd_buf);
                }
        }
}

P.S. Compiling for pic18f2550

- kristoffer ek


------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to