DEVICE PIC16C54,HS_OSC,WDT_OFF,PROTECT_OFF midi_out equ RA.0 temp equ 09h count equ 0ah t0 equ 0bh RESET Start Start mov !RA,#0000b ; all pins are outputs mov !RB,#00000000b mov OPTION,#00000110b ; for 16mc xtal, 31250 RTCC/sec clrb midi_out ; idle state ; send program change on midi channel 11 to program 5 mov t0,#0cah call Midi_send mov t0,#05h call Midi_send Spin jmp Spin ; ;Midi_send -- transmit the byte in t0 over midi ; ENTRY ; t0 byte to send ; midi_out should already be in idle (clrb) state ; AFFECTED ; t0,temp,count ; midi_out left in idle state ; Midi_send mov temp,RTCC ; wait for RTCC tick :l1 mov W,RTCC xor W,temp jz :l1 setb midi_out ; send start bit mov count,#8 ; loop 8 times to send 8 data bits :byteloop mov temp,RTCC ; wait for RTCC tick :l2 mov W,RTCC xor W,temp jz :l2 snb t0.0 ; send data bit clrb midi_out ; clrb sends a 1 sb t0.0 setb midi_out ; setb sends a 0 rr t0 djnz count,:byteloop mov temp,RTCC ; wait for RTCC tick :l3 mov W,RTCC xor W,temp jz :l3 clrb midi_out ; send stop bit ret