/* Amplitude modulation block and sine wave patterns*/ int modulatedWave [] = { 0x000000,0x0C8BD3,0x18F8B8,0x25280C,0x30FBC5,0x3C56BA,0x471CED,0x5133CD ,0x5A827A,0x62F202,0x6A6D99,0x70E2CC,0x7641AF,0x7A7D05,0x7D8A5F,0x7F6237 ,0x7FFFFF,0x7F6237,0x7D8A5F,0x7A7D05,0x7641AF,0x70E2CC,0x6A6D99,0x62F202 ,0x5A827A,0x5133CD,0x471CED,0x3C56BA,0x30FBC5,0x25280C,0x18F8B8,0x0C8BD3 ,0x000000,0xF3742D,0xE70748,0xDAD7F4,0xCF043B,0xC3A946,0xB8E313,0xAECC33 ,0xA57D86,0x9D0DFE,0x959267,0x8F1D34,0x89BE51,0x8582FB,0x8275A1,0x809DC9 ,0x800000,0x809DC9,0x8275A1,0x8582FB,0x89BE51,0x8F1D34,0x959267,0x9D0DFE ,0xA57D86,0xAECC33,0xB8E313,0xC3A946,0xCF043B,0xDAD7F4,0xE70748,0xF3742D }; #define SINE_SIZE (sizeof(modulatedWave)/sizeof(modulatedWave[0])) int sineWave [] = { 0x000000,0x0C8BD3,0x18F8B8,0x25280C,0x30FBC5,0x3C56BA,0x471CED,0x5133CD ,0x5A827A,0x62F202,0x6A6D99,0x70E2CC,0x7641AF,0x7A7D05,0x7D8A5F,0x7F6237 ,0x7FFFFF,0x7F6237,0x7D8A5F,0x7A7D05,0x7641AF,0x70E2CC,0x6A6D99,0x62F202 ,0x5A827A,0x5133CD,0x471CED,0x3C56BA,0x30FBC5,0x25280C,0x18F8B8,0x0C8BD3 ,0x000000,0xF3742D,0xE70748,0xDAD7F4,0xCF043B,0xC3A946,0xB8E313,0xAECC33 ,0xA57D86,0x9D0DFE,0x959267,0x8F1D34,0x89BE51,0x8582FB,0x8275A1,0x809DC9 ,0x800000,0x809DC9,0x8275A1,0x8582FB,0x89BE51,0x8F1D34,0x959267,0x9D0DFE ,0xA57D86,0xAECC33,0xB8E313,0xC3A946,0xCF043B,0xDAD7F4,0xE70748,0xF3742D }; int speed = 0x0004; /* USED TO CONTROL WAIT LOOP */ struct sine { int inValue; int outValue; int factor; }; struct sine sineValue; int main (void); int modulate (struct sine *value); int multiply (struct sine *value); int delay_update (int count); int main (void) { int i, j; while (1){ for (i = SINE_SIZE-1; i >= 0; i--){ sineValue.factor = i; modulate (&sineValue); } for (i = 0; i < SINE_SIZE; i++){ sineValue.factor = -i; modulate (&sineValue); } for (i = SINE_SIZE-1; i >= 0; i--){ sineValue.factor = -i; modulate (&sineValue); } for (i = 0; i < SINE_SIZE; i++){ sineValue.factor = i; modulate (&sineValue); } } } int modulate (struct sine *value) { int j; for (j = 0; j < SINE_SIZE; j ++){ value->inValue = sineWave[j]; multiply (value); modulatedWave[j] = value->outValue; delay_update (speed); } return 0; } int multiply (struct sine *value) { int tmp; int size; size = SINE_SIZE; tmp = value->inValue; while (size > 1) { tmp >>= 1; size /= 2; } value->outValue = tmp * value->factor; return 0; } int delay_update (int count) { int value; int i; value = 0; for (i = 0; i < count; i++) value += count; return value; }