'DEFINITIONS' DEFINE OSC 16'clock speed 'ADC Defines DEFINE ADC_BITS 10 DEFINE ADC_CLOCK 3 DEFINE ADC_SAMPLEUS 15 'serial registers DEFINE HSER_RCSTA 90h DEFINE HSER_TXSTA 20h DEFINE HSER_BAUD 31250 'PORT SETUP' TRISA = %11111111 ADCON1 = %10000000 TRISD = %11111111 TRISB = %00000000 'VARIABLES' ADC1Pitch var word ADC2Vel var word ADC3Pulse var word pitch var byte(24) pulse var WORD pitch(0) = 60 pitch(1) = 64 pitch(2) = 66 pitch(3) = 67 pitch(4) = 69 pitch(5) = 71 pitch(6) = 72 pitch(7) = 74 pitch(8) = 76 pitch(9) = 77 pitch(10) = 79 pitch(11) = 81 pitch(12) = 83 pitch(13) = 84 pitch(14) = 86 pitch(15) = 88 pitch(16) = 89 pitch(17) = 91 pitch(18) = 93 pitch(19) = 95 pitch(20) = 96 pitch(21) = 98 pitch(22) = 100 pitch(23) = 102 note var byte velocity var byte sustain var byte INPUT PORTD.1 serVar var byte i var byte 'LOOP' main: ADCin 0,ADC1Pitch note = ADC1Pitch / 43 ADCIN 1, ADC2Vel velocity = ADC2Vel / 8 ADCIN 2, ADC3Pulse pulse = (ADC3Pulse + 200) hserout [$90,pitch(note),velocity] PAUSE pulse FOR i=0 to 22 hserout [$90,pitch(i), 0] ' all notes off, system wide next i hserout [$90, pitch(23),0] PAUSE 75 goto main