'**************************************************************** '* Name : MIDI Controller.PBP * '* Author : Robert Joseph Korn * '* Notice : Copyright (c) 2011 Open Valley Consulting Corp * '* : All Rights Reserved * '* Date : 3/11/2011 * '* Version : 1.5 * '* Notes : * '* : * '**************************************************************** DEFINE OSC 4 DEFINE HSER_RCSTA 90h DEFINE HSER_TXSTA 20h DEFINE HSER_BAUD 31250 DEFINE HSER_CLROERR 1 char var byte cmd var byte command var byte channel var byte sysex var byte message var byte value var byte state var byte ADCON1 = 6 on interrupt goto serial INTCON = %11000000 PIE1 = %00100000 STATE = 0 LOW PORTA.0 high PORTA.1 low PORTA.2 LOW PORTA.3 LOW PORTA.5 LOW PORTC.0 LOW PORTC.1 LOW PORTC.2 LOW PORTC.3 LOW PORTC.4 LOW PORTC.5 LOW PORTB.0 LOW PORTB.1 LOW PORTB.2 LOW PORTB.3 LOW PORTB.4 LOW PORTB.5 LOW PORTB.6 LOW PORTB.7 lp: PAUSEUS 50 goto lp disable serial: hserin 0,endisr,[char] if char.7 = 1 then ' Realtime ' 0 DATA BYTE COMMANDS F6, F8, FA, FB, FC, FE, FF ' UNDEFINED COMMANDS F4, F5, F9, FD ' SYSEX PATCH START F0 END F7 SELECT CASE Char case $F0 SYSEX = 1 state = 0 case $F7 SYSEX = 0 state = 0 case $F1,$F2,$F3,$F4,$F5,$F6 case $F8,$F9,$FB,$FD,$FE,$FF CASE $FA HIGH PORTA.0 LOW PORTA.1 CASE $FC LOW PORTA.0 HIGH PORTA.1 CASE ELSE STATE = 2 command = char CHANNEL = COMMAND AND $0F END SELECT ENDIF if state = 3 then STATE = 2 VALUE = CHAR ' Process 2 DATA BYTE COMMANDS 8x, 9x, Ax, Bx, Ex, F2 if command = $80 then PORTA.2=0 ENDIF if command = $90 then PORTA.2=1 ENDIF if command = $B0 then select case message case 1 hpwm 2, value*2, 1000 CASE 2 hpwm 1, value*2, 1000 CASE 25 PORTB.7 = VALUE.2 CASE 26 PORTB.6 = VALUE.2 CASE 27 PORTB.5 = VALUE.2 CASE 28 PORTB.4 = VALUE.2 CASE 29 PORTB.3 = VALUE.2 CASE 30 PORTB.2 = VALUE.2 CASE 31 PORTB.1 = VALUE.2 CASE 32 PORTB.0 = VALUE.2 CASE 33 PORTC.5 = VALUE.2 CASE 34 PORTC.4 = VALUE.2 CASE 35 PORTC.0 = VALUE.2 CASE 36 PORTC.3 = VALUE.2 end select endif ENDIF if state = 2 then message = char ' Process 1 DATA BYTE COMMANDS Cx, Dx, F1, F3 cmd = command AND $F0 select case cmd case $C0 case $D0 case $F0 case else STATE = 3 end select ENDIF endisr: resume enable end