how_to_mix_c_and_asm
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| how_to_mix_c_and_asm [2006/05/11 10:37] – created audiocommander | how_to_mix_c_and_asm [2008/09/29 12:27] (current) – wackazong | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | It's actually quite easy! | ||
| + | As you can see in the example below, just enclose the ASM part with // | ||
| + | You might have to declare some additional variables, but the concept is quite straightforward. | ||
| + | |||
| + | Do not forget to include the header file of your processor from the SDCC header files, or variables like PRODL will not be defined: e.g. #include < | ||
| + | |||
| + | <code c> | ||
| + | unsigned char Scale_7bit(unsigned char evnt2, unsigned char min, unsigned char max) { | ||
| + | // scaled value is (<8-bit random> * ) >> 8 | ||
| + | PRODL = evnt2 << 1; // 8bit value | ||
| + | PRODH = max-min+1; | ||
| + | __asm | ||
| + | movf _PRODL, W | ||
| + | mulwf _PRODH, 0 | ||
| + | __endasm; | ||
| + | |||
| + | return min + PRODH; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Also, as well as the above example of ' | ||
