;**********************************************************************************************;
; File 16f877_LVP.ASM															;
; Assembly code using 20 MHz clock with the PIC16F877A microcontroller. Using a PCB with ISP	;
; programmer inclueded. PortA all analouge inputs, PortC, PortD inputs for controllermessages,	;
; PortA,4 out to serial 8 digit LED, PortC, 0-4 for indication LEDs.						;
; Midi out on RC6TX, set BRGH=Hi, load SPBRG registor with 0X28 for midi baudrate at 31.250Kb	;		
; 																			;
; Author  : M.Hug																;
; Written : Oct. 2005															;
; Last update: April 6th 2007														;
;**********************************************************************************************;

LIST P=16F877A
LIST C=132
RADIX HEX

#include	  "p16F877A.inc"
__config  _HS_OSC & _WDT_OFF & _PWRTE_OFF &_LVP_ON & _BODEN_OFF



w	     	EQU 0X00
f         	EQU 0X01
PC        	EQU 0X02
PORTA     	EQU 0X05
PORTB     	EQU 0X06
PORTC     	EQU 0X07
PORTD     	EQU 0X08
PORTE     	EQU 0X09
STATUS    	EQU 0X03
EEDATA    	EQU 0X10C
EEADR     	EQU 0X10D
EEDATH    	EQU 0X10E
EEADRH    	EQU 0X10F
T1CON     	EQU 0X10

TMR0			EQU 0X01

INTCON     	EQU 0X0B
EECON1     	EQU 0X18C
EECON2     	EQU 0X18D
ADCON0     	EQU 0X1F
ADCON1     	EQU 0x9F
OPTION_REG    	EQU 0x81

sendreg	equ	   0x20		;stores number to send
count	equ	   0x21
tmr0		equ	   0x22		;var serial send PortA, RA4	
TEMP		equ     0x23
TEMP1	equ     0x24        ;variable to store temp PortA
XMIT		equ	   0x25		;has to be erase!!!!!!!!!!!!!!!!!!
		


Note0     equ     0x26        ;EEPROM address 0x01         
NoteOn0   equ     0x27        ;EEPROM address 0x02         
Count1    equ     0x28
Count2    equ     0x29
Setup     equ     0x2A		;vatiable to store the audio channel number (1-8)
NoteOn1   equ     0x2B        ;EEPROM address 0x04
Note1     equ     0x2C        ;EEPROM address 0x03
Add       equ     0x2D        ;constant of =0x30 to add to NoteOn variable to send prog.change massages
TEMP2     equ     0x2E        ;Temp variable for botton switches
NoteOn2   equ     0x2F        ;EEPROM address 0x06
Note2     equ     0x30        ;EEPROM address 0x05
NoteOn3   equ     0x31        ;EEPROM address 0x08
Note3     equ     0x32        ;EEPROM address 0x07
NoteOn4   equ     0x33        ;EEPROM address 0x0A
Note4     equ     0x34        ;EEPROM address 0x09
NoteOn5   equ     0x35        ;EEPROM address 0x0C
Note5     equ     0x36        ;EEPROM address 0x0B
NoteOn6   equ     0x37        ;EEPROM address 0x0E
Note6     equ     0x38        ;EEPROM address 0x0D
NoteOn7   equ     0x39        ;EEPROM address 0x10
Note7     equ     0x3A        ;EEPROM address 0x0F
OFF		equ	   0x3B		;switch to Note Off routine
INI       equ     0x41        ;EEPROM address 0x00
CH        equ     0x42        ;variable midi_ch_number
Oct       equ     0x43        ;variable octave
Vel_0	equ     0x45        ;EEPROM address 0x11
Vel_1	equ     0x46        ;EEPROM address 0x12
Vel_2	equ     0x47        ;EEPROM address 0x13
Vel_3     equ     0x48        ;EEPROM address 0x14
Vel_4     equ     0x49        ;EEPROM address 0x15
Vel_5	equ     0x4A        ;EEPROM address 0x16
Vel_6     equ     0x4B        ;EEPROM address 0x17
Vel_7	equ     0x4C        ;EEPROM address 0x18
Mode      equ     0x55        ;EEPROM address 0x19 stores ADC Mode
Prg0      equ     0x4D		;EEPROM address 0x20
Prg1      equ     0x4E		;EEPROM address 0x21
Prg2      equ     0x4F		;EEPROM address 0x22
Prg3      equ     0x50		;EEPROM address 0x23
Prg4      equ     0x51		;EEPROM address 0x24
Prg5      equ     0x52		;EEPROM address 0x25
Prg6      equ     0x53		;EEPROM address 0x26
Prg7      equ     0x54		;EEPROM address 0x27

TEMP_CONT equ	   0x56		;Temp variable for all contollermessages
Add_B	equ     0x57		;add 0x20 NoteON + Add_B = Bx (Contr. Messages)

Volume0   equ     0x58		;EEPROM address 0x30
Volume1   equ     0x59		;EEPROM address 0x31
Volume2   equ     0x60		;EEPROM address 0x32
Volume3   equ     0x61		;EEPROM address 0x33
Volume4   equ     0x62		;EEPROM address 0x34
Volume5   equ     0x63		;EEPROM address 0x35
Volume6   equ     0x64		;EEPROM address 0x36
Volume7   equ     0x65		;EEPROM address 0x37

MidiStat  equ     0x66        ;EEPROM addess  0x38
ContrVal  equ     0x67        ;EEPROM address 0x28

Bank0     equ     0x68		;EEPROM address 0x40
Bank1     equ     0x69		;EEPROM address 0x41
Bank2     equ     0x70		;EEPROM address 0x42
Bank3     equ     0x71		;EEPROM address 0x43
Bank4     equ     0x72		;EEPROM address 0x44
Bank5     equ     0x73		;EEPROM address 0x45
Bank6     equ     0x74		;EEPROM address 0x46
Bank7     equ     0x75		;EEPROM address 0x47

bot_cons0 equ     0xA0		;EEPROM address 0x50
bot_cons1 equ     0xA1        ;EEPROM address 0x51 
bot_cons2 equ     0xA2		;EEPROM address 0x52
bot_cons3 equ     0xA3		;EEPROM address 0x53
bot_cons4 equ     0xA4		;EEPROM address 0x54
bot_cons5 equ     0xA5		;EEPROM address 0x55
bot_cons6 equ     0xA6		;EEPROM address 0x56
bot_cons7 equ     0xA7	     ;EEPROM address 0x57

slider_0  equ     0xA8		;EEPROM address 0x60
slider_1  equ     0xA9        ;EEPROM address 0x61
slider_2  equ     0xAA		;EEPROM address 0x62
slider_3  equ     0xAB		;EEPROM address 0x63
slider_4  equ     0xAC		;EEPROM address 0x64
slider_5  equ     0xAD		;EEPROM address 0x65
slider_6  equ     0xAE		;EEPROM address 0x66
slider_7  equ     0xAF	     ;EEPROM address 0x67

slider0_0  equ    0xB0		;EEPROM address 0x70
slider1_1  equ    0xB1        ;EEPROM address 0x71
slider2_2  equ    0xB2		;EEPROM address 0x72
slider3_3  equ    0xB3		;EEPROM address 0x73
slider4_4  equ    0xB4		;EEPROM address 0x74
slider5_5  equ    0xB5		;EEPROM address 0x75
slider6_6  equ    0xB6		;EEPROM address 0x76
slider7_7  equ    0xB7	     ;EEPROM address 0x77

ON_del_0	 equ	   0xB8
ON_del_1	 equ	   0xB9
ON_del_2	 equ	   0xBA
ON_del_3	 equ	   0xBB
ON_del_4	 equ	   0xBC
ON_del_5	 equ	   0xBD
ON_del_6	 equ	   0xBE
ON_del_7	 equ	   0xBF

OFF_del_0	 equ    0xC0
OFF_del_1	 equ    0xC1
OFF_del_2	 equ    0xC2
OFF_del_3	 equ    0xC3
OFF_del_4	 equ    0xC4
OFF_del_5	 equ    0xC5
OFF_del_6	 equ    0xC6
OFF_del_7	 equ    0xC7

NoteOff_0	 equ	   0xC8
NoteOff_1	 equ	   0xC9
NoteOff_2	 equ	   0xCA
NoteOff_3	 equ	   0xCB
NoteOff_4	 equ	   0xCC
NoteOff_5	 equ	   0xCD
NoteOff_6	 equ	   0xCE
NoteOff_7	 equ	   0xCF	



TEMP_CONT1 equ	   0xb8		; Temp variable for contrmessages bank1
var_slid   equ    0xb9		; Variable for Slider Value

	    	 org	  0x00         ; start at address 0
	      goto  start
           org   0x05
       		        
         
			
start bsf   	STATUS,5     	; select Bank1	
	 movlw 	b'11101111'	
      movwf 	PORTA        	; select PortA,0-1-2-3-5-6-7 to analog inputs; RA4 out serial 16F84
      movlw 	b'11110111'  	; PortB RB3 set to 0 for LVP 
      movwf 	PORTB        	; PortB RB0-RB2 & RB4-RB7 inputs, PAD CN1
      movlw 	b'10100000'		  
      movwf 	PORTC        	; PortC RC0-4 outputs, RC5 input replaces RB3 LVP pin; RC6/TX RC7/RX Usart
      movlw 	b'11111111'	; RD all inputs.
      movwf 	PORTD        	; PortD0-D2 outputs PortD3 input(replaceRB3,low
      movlw 	b'00000111'
      movwf 	PORTE        	; PortE ,analog inputs
      movlw 	b'11011101'  	; pull-up desactivado, wdt=1, prescaler 1/16
      movwf 	OPTION_REG
      movlw 	b'00000000'  	; digital inputs (address lo)
      movwf 	ADCON1
      

	 movlw	b'00100100'	; BRGH = Hi (16), asyncroneous, 8 bit data
	 movwf	TXSTA		; TXEN activated
	 movlw	0X28
	 movwf	SPBRG		; midi speed 31.250Kbauds
	 bcf		STATUS,5    	; select Bank0
	 bsf		RCSTA,SPEN	; USART activated

	 bsf		PORTA,4
	            
      movlw 	0x30
      movwf 	Add
      
      movlw 	0x20
      movwf 	Add_B
      
      movlw 	0x0A			; used to have a deley when reading
      movwf 	CH			; ADC to NoteON x value
      
      movlw 	0x00
      movwf 	INI
      movwf 	Setup
      movwf 	TEMP1
      movwf 	MidiStat
      
      bsf		STATUS,5
      movlw 	0x0B
      movwf 	var_slid
      bcf   	STATUS,5 
      
	clrf  	PORTD
	clrf  	PORTC
             
             
             	movlw 0x00		;0x00 address INI value
              	bsf   STATUS,6
              	movwf EEADR
              	bsf   STATUS,5		;select bank3
              	bcf   EECON1,7		;point to EEPROM
              	bsf   EECON1,0
wait_readI    	btfsc EECON1,0		;wait to end read
              	goto  wait_readI
              	bcf   STATUS,5	     ;select bank2
              	movf  EEDATA,0
              	bcf   STATUS,6      ;select bank0
              	movwf INI
              	comf  INI
              
      		      
     		movf  TEMP1,0
     		subwf INI,0
     		btfss STATUS,2
     		goto  read_EEP
      		  
      		 
     		call  inicial        ;iniziate data value 
      		  
    			movlw b'00010000'    ;pgina2, subpgine0
     		movwf PCLATH
     		call  storedata      ;iniziate data value 
     		clrf  PCLATH
     		goto  cont
 

              
read_EEP		movlw 	b'00001010'    ;pgina1, subpgine2
      	  	movwf 	PCLATH
      	  	call  	read_data      ;reads stored data value (IF INI <1)
      	  	clrf  	PCLATH
 
cont		clrf  PORTB
		clrf  PORTC
		clrf  PORTD
		clrf  Setup
		clrf  Mode

		bsf		PORTD,0		;initialize 16F84A "7_digit display"
		bsf		PORTD,1
wait_A	call		deley3
 		decfsz	Add_B
		goto		wait_A
 		movlw	0x0A
 		movwf	CH
		bcf		PORTD,0
		bcf		PORTD,1
		movlw	0x20
		movwf	Add_B
   		      		     
			  
call    	Mode_ON_OFF		 ; sets the ADC status


loop_1	call  deley3
		call  deley3          
  		bsf   PORTC,4
		bcf   PORTC,2
		bcf   PORTC,3


call		serial
		

loop   	clrwdt
		clrf  TEMP1
		clrf  TEMP2
		bcf   PORTC,3
		
		
		movlw 0x0C
		movwf Oct

		movlw b'000001110'   ;pgina1, subpgine6
      	movwf PCLATH
      	call  DAC_0     
       	clrf  PCLATH

     	movf  PORTB,0		 ;RB0, CN1, Pin1 audioCh_down
      	xorlw B'00000001'
      	btfsc STATUS,2
      	call  audioCh_down             
              	      	  
      	movf  PORTB,0		 ;RB1, CN1, Pin2 audioCh_up
      	xorlw B'00000010'
      	btfsc STATUS,2
      	call  audioCh_up
      	
      	movf  PORTB,0        ;RB2, PAD octave-  
      	xorlw B'00000100'
      	btfsc STATUS,2
      	call  octavM_P

		movf  PORTC,0        ;RC5 octave+ (replaces RB3) 
      	xorlw B'00110000'	 ;Pin RC4 set Hi because of blue LED, level 1 indication. 	     	 
      	btfsc STATUS,2		 
      	call  octavP

		movf  PORTB,0		 ;RB4 note -      
      	xorlw B'00010000'	 
      	btfsc STATUS,2
      	call  configN_M_P    
            	
      	movf  PORTB,0		 ;RB5 note +
      	xorlw B'00100000'
      	btfsc STATUS,2
      	call  configNoteP    
            	        
      	movf  PORTB,0		 ;RB6 velocity +
      	xorlw B'01000000'
      	btfsc STATUS,2
      	call  Volume_P
      	
      	movf  PORTB,0		 ;RB7 velocity -    
      	xorlw B'10000000'
      	btfsc STATUS,2
      	call  VolumeM_P

		movf  PORTD,0		 ;RD0, Ch_Set setup (MENUE)
      	xorlw B'00000001'
      	btfsc STATUS,2
      	call  Ch_Set

		movf  PORTD,0		 ;RD1, store_data 
      	xorlw B'00000010'
      	btfsc STATUS,2
      	call  storedataP

		movf  PORTD,0		 ;RD2, reset,; sets all channels to 
      	xorlw B'00000100'	 ;NoteOFF and resets the PIC
      	btfsc STATUS,2
     	call  resetP 

		movf  PORTD,0		 ;RD3, PAD level, LED blue off, LED red on 
      	xorlw B'00001000'
      	btfsc STATUS,2
      	goto  loop_lvl_1

		movf  PORTD,0		 ;RD4, controller + (0X17)
   		xorlw B'00010000'
 		btfsc STATUS,2
   		call  bank_P		 
      	      	
      	movf  PORTD,0		 ;RD5, controller - (0X17)	
      	xorlw B'00100000'
      	btfsc STATUS,2
    		call  bankM_P

		movf  PORTD,0		 ;?????????????????? RD3, CN5, Pin6 Trigger PORTA,0
      	xorlw B'10000100'
      	btfsc STATUS,2
      	call  trans
		     	           	        
     	movf  PORTD,0        ;CN2, Pin09 (RC6) PAD Program +  
      	xorlw B'01000000'     
      	btfsc STATUS,2
      	call  prgP  
      	
      	movf  PORTD,0        ;CN2, Pin10 (RC7) PAD Program -  
      	xorlw B'10000000'    
      	btfsc STATUS,2
      	call  prgP_M

        	         
      	movlw 0x00           ;explores TEMP1,0-7 for velocity values
      	subwf TEMP1          ;if velocit >0 the routin transm.lib  
      	btfsc STATUS,2       ;sends MIDI DATA
       	goto  loop
      

trans   	bsf  PORTD,2
	    	bcf  PCLATH,4
        	bsf  PCLATH,3
        	call transm
        	bcf  PCLATH,3
		bcf  STATUS, RP0	; make shure using bank 0
       	goto loop
       
           
	  
;************************ routines configuration PCLATH ***************

configNoteP 	movlw b'00000011'       ;pgina0, subpgine3
      		movwf PCLATH
      		call  configNote         
      		clrf  PCLATH
      	    return
      	   
configN_M_P 	movlw b'00000100'       ;pgina0, subpgine4
      		movwf PCLATH
      		call  configNoteM         
      		clrf  PCLATH
      	    return
      	   
configChP   	movlw b'00000101'       ;pgina0, subpgine5
      		movwf PCLATH
      		call  configCh        
      		clrf  PCLATH
      	    return
      	   
configChM_P 	movlw b'00000110'       ;pgina0, subpgine6
      		movwf PCLATH
      		call  configChM        
      		clrf  PCLATH
      	    return
      	   
Mode_OnOffP 	movlw b'00000111'       ;pgina0, subpgine7
       		movwf PCLATH
      		call  Mode_On_Off        
       		clrf  PCLATH
      	    return
      	   
inicialP    	movlw b'00000010'       ;pgina0, subpgine2
      		movwf PCLATH
      		call  inicial       
      		clrf  PCLATH
      	    return

Volume_P    	movlw b'00010110'       ;pgina2, subpgine6
      		movwf PCLATH
      		call  VolumeUp        
      		clrf  PCLATH
      	    return
      	   
VolumeM_P   	movlw b'00010111'       ;pgina2, subpgine7
      		movwf PCLATH
      		call  VolumeDown        
      		clrf  PCLATH
      	    return

storedataP 	movlw b'00010000'       ;pgina2, subpgine0
      		movwf PCLATH
      		call  storedata        
      		clrf  PCLATH
      	    return
      	   
resetP	 	movlw b'00000000'       ;pgina0, subpgine1
      		movwf PCLATH
      		call  resetPIC        
      		clrf  PCLATH
      	    return

prgP      	movlw b'000010100'      ;pgina2, subpgine4
      		movwf PCLATH
      		call  confPrg     
       		clrf  PCLATH
      	    return

prgP_M     	movlw b'000010100'      ;pgina2, subpgine4
       		movwf PCLATH
       		call  confPrgM       
      		clrf  PCLATH
      	    return 
      	   
octavP   		movlw b'000010101'      ;pgina2, subpgine5
      		movwf PCLATH
      		call  octave       
      		clrf  PCLATH
      		clrf  TEMP1
      	    return
      	   
octavM_P 		movlw b'000010101'      ;pgina2, subpgine5
      		movwf PCLATH
      		call  octavM       
      		clrf  PCLATH
      	    return
      	   
bank_P	 	movlw b'000011000'      ;pgina3, subpgine0
      		movwf PCLATH
      		call  bank_up       
      		clrf  PCLATH
      	    return
      	   
bankM_P	 	movlw b'000011000'      ;pgina3, subpgine0
      		movwf PCLATH
      		call  bank_down       
      		clrf  PCLATH
      	    return
      	   
Slider_P    	movlw b'00011010'       ;pgina3, subpgine2
      		movwf PCLATH
       		call  Slider0Up
       		bcf   STATUS,5			;bank0 after 0cut        
      		clrf  PCLATH
       	    return
      	   
SliderM_P   	movlw b'00011010'       ;pgina3, subpgine2
      		movwf PCLATH
       		call  Slider0Down
       		bcf   STATUS,5			;bank0 after 0cut        
     		clrf  PCLATH
      	    return
      	   
Slider1_P   	movlw b'00001010'       ;pgina1, subpgine2
      		movwf PCLATH
       		call  Slider1Up
       		bcf   STATUS,5		     ;bank0 after 0cut        
      		clrf  PCLATH
       	    return
      	   
Slider1M_P  	movlw b'00001010'       ;pgina1, subpgine2
      		movwf PCLATH
       		call  Slider1Down
       		bcf   STATUS,5		     ;bank0 after 0cut        
     		clrf  PCLATH
      	    return      	   
      	   	
ContrSW_P   	movlw b'00011011'       ;pgina3, subpgine3
      		movwf PCLATH
      		call  ContrSW       
      		clrf  PCLATH
      	    return      		
      	   
;**
;**




bit9   		goto  loop        
       


;*************deley3 total de 20ms ***********************************************
              ORG   0X0680
deley3        movlw    0x23
              movwf    Count2    
deley_3       clrwdt
		    decfsz   Count1               
              goto     deley_3
              decfsz   Count2
              goto     deley_3
             return

deley4        clrwdt
		    decfsz   Count1               
              goto     deley4
             return
             
;*************deleyTrigger  *****************************************************             
              ORG   0X0690
deley_trig    clrwdt
		    decfsz   Count1               
              goto     deley_trig
             return
;**************** channel_up *****************************************************

audioCh_up     call    deley3
			incf    Setup        ;Setup stores the Audio_Channel variable
			call    Mode_ON_OFF	;explores registor "Mode" (green LED)
               call    trigger_up
               movlw   B'00001000'   
               subwf   Setup,0
               btfss   STATUS,2
              return
               movlw   0x00
               movwf   Setup
               call    Mode_ON_OFF	;explores registor "Mode" (green LED)
              return 

;**************** channel_down ****************************************************

audioCh_down   call    deley3
               movlw   0xFF
               decf    Setup
               subwf   Setup,0
               btfsc   STATUS,2
               goto    set7
               call    trigger_down
               call    Mode_ON_OFF	;explores registor "Mode" (green LED)
              return
set7           movlw   0x07
               movwf   Setup        ;Setup stores the Audio_channel variable
               call    trigger_down
               call    Mode_ON_OFF	 ;explores registor "Mode" (green LED)
              return

; **************** trigger ********************************************************             
 
 trigger_up    	bsf     PORTD,0
               	call    deley_trig
               	bcf     PORTD,0
              	    return 
              
; **************** trigger *******************************************************            
 
 trigger_down  	bsf     PORTD,1
               	call    deley_trig
               	bcf     PORTD,1
              	    return  


;****************** loop_lvl_1 ***************************************************
             
loop_lvl_1		clrwdt
				call  deley3
				call  deley3
				bcf   PORTC,4
				bsf   PORTC,3 
	  			   
loop_lvl_2     	clrwdt
				bcf   PORTD,4
				clrf  TEMP1
				clrf  TEMP2

				movlw b'000001110'   ;pgina1, subpgine6
      			movwf PCLATH
      			call  DAC_0     
       			clrf  PCLATH 
    			
      			movf  PORTB,0		 ;RB0, CN1, Pin1 audioCh_down 
      			xorlw B'00000001'
      			btfsc STATUS,2
      			call  audioCh_down             
              	      	  
      			movf  PORTB,0		 ;RB1, CN1, Pin2 audioCh_up
      			xorlw B'00000010'
      			btfsc STATUS,2
      			call  audioCh_up 
      			
      			movf  PORTB,0		 ;RB2, ContrSW_3 (Contr.Message 0x66)
      			movwf TEMP2		 ;data for table Contr.Mess. No.
      			xorlw B'00000100'
      			btfsc STATUS,2
      			call  ContrSW_P
      			
      			movf  PORTC,0		 ;RC5, ContrSW_4 (Contr.Message 0x64)
      			movwf TEMP2		 ;replaces RB3 LVP pin	 
      			xorlw B'00010000'    
      			btfsc STATUS,2
      			call  ContrSW_P
      			
      			movf  PORTB,0		 ;RB4, ContrSW_5 (Contr.Message 0x66)
      			movwf TEMP2		 ;data for table Contr.Mess. No.
      			xorlw B'00010000'
      			btfsc STATUS,2
      			call  ContrSW_P
      			
      			movf  PORTB,0		 ;RB5, ContrSW_6 (Contr.Message 0x68)
      			movwf TEMP2		 ;data for table Contr.Mess. No.
      			xorlw B'00100000'
      			btfsc STATUS,2
      			call  ContrSW_P

				movf  PORTB,0		 ;RB6 slider+, explore portB,
      			xorlw B'01000000'
      			btfsc STATUS,2
      			call  Slider_P
      	
      			movf  PORTB,0		 ;RB7 slider-, explore portB,        
      			xorlw B'10000000'
      			btfsc STATUS,2
      			call  SliderM_P
				
				movf  PORTD,0		 ;RC0, ContrSW_1 (Contr.Message 0x09)
				movwf TEMP2		        
      			xorlw B'00000001'
      			btfsc STATUS,2
      		   	call  ContrSW_P

			    	movf  PORTD,0		 ;RC1, ContrSW_2 (Contr.Message 0x12)
      	        	movwf TEMP2
      	        	xorlw B'00000010'
      	        	btfsc STATUS,2
      	        	call  ContrSW_P
			
				movf  PORTD,0		 ;RC2, PAD mode, LED green On		 
      			xorlw B'00000100'	 ;if PORTD,4 =HI set ADC to NoteOn(X)
      			btfsc STATUS,2
      			call  Mode_OnOffP	 ;ADC to NoteOnX off or on (Mode.lib)

				movf  PORTD,0		 ;CN2, Pin4 (RC3) audioCh_up; selects audio channel
      			xorlw B'00001000'
      			btfsc STATUS,2
      			goto  loop_1
 
				movf  PORTD,0		 ;RC4, slider1_up
      			xorlw B'00010000'
      			btfsc STATUS,2
      			call  Slider1_P		 
      	      	
      			movf  PORTD,0		 ;RC5, slider1_down
      			xorlw B'00100000'
      			btfsc STATUS,2
      			call  Slider1M_P

				movf  PORTD,0        ;CN2, Pin09 (RC6) PAD Program +  
      			xorlw B'01000000'     
      			btfsc STATUS,2
      			call  prgP  
      	
      			movf  PORTD,0        ;CN2, Pin10 (RC7) PAD Program -  
      			xorlw B'10000000'    
      			btfsc STATUS,2
      			call  prgP_M
      			
      	    		movlw 0x00           ;explores TEMP1,0-7 for velocity values
      			subwf TEMP1          ;if velocit >0 the routin transm.lib  
      			btfss STATUS,2       ;sends MIDI DATA
       			call  trans_1
      			goto  loop_lvl_2
      			
      		   
      			
trans_1 			movlw b'000001000'    ;pgina1, subpgine0
      			movwf PCLATH
       			call  transm
       			clrf  PCLATH
      			goto  loop_lvl_2



;******************* routin to select midi Ch ******************************
;**

Ch_Set			call  deley3
				call  deley3

				bsf   PORTC,2

Ch_Set_loop		movlw B'00000010'    ;RB1, midi channel up PortB,RB0  
      			movwf TEMP1
      			movf  PORTB,0        
      			subwf TEMP1,0
      			btfsc STATUS,2
      			call  configChP 
       
				movlw B'00000001'    ;RB0, midi channel down PortB,RB1   
      			movwf TEMP1
      			movf  PORTB,0        
      			subwf TEMP1,0
      			btfsc STATUS,2
      			call  configChM_P
      			
      			movlw B'00000001'    ;RD0, back to level1   
      			movwf TEMP1
      			movf  PORTD,0        
      			subwf TEMP1,0
      			btfss STATUS,2
      		   	goto  Ch_Set_loop
      		   
      		    	bcf   PORTC,2
      		   	call  deley3
				call  deley3
      		    return	 
;**
;**
				
          
;*********************** reset ********************************************

reset                ORG 0x0000

;*********************** ORG **********************************************
			 
		   ORG  0X01C0			 ;pagina0, subpagina1
		   include "reset.lib"
			 
		   ORG  0X0150			 ;pagina0, subpagina2
		   include "P2PSEND.lib"

		   ORG  0X0200			 ;pagina0, subpagina2
		   include "LED_green_Status.lib"
			 
		   ORG  0X0260            ;pagina0, subpagina2
             include "inicial.lib" 
			 
		   ORG  0X0300			 ;pagina0, subpagina3
		   include "configNote.lib"
			 
		   ORG  0X0400			 ;pagina0, subpagina4
		   include "configNoteM.lib"
			 
		   ORG  0X0500			 ;pagina0, subpagina5
		   include "configCh.lib"
			 
             ORG  0X0600			 ;pagina0, subpagina6
		   include "configChM.lib"
			 
		   ORG  0X0740			 ;pagina0, subpagina7
		   include "Mode.lib"
             
             ORG  0X0800			 ;pagina1, subpagina0
             include "transm.lib"
             
             ORG  0X08A0             ;pagina1, subpagina0
             include "Slider1.lib"  
                
             ORG  0X0A90             ;pagina1, subpagina2
             include "read_data.lib" 
             
             ORG  0X0EE0             ;pagina1, subpagina6
             include "DAC.lib" 
             
             ORG  0X1000             ;pagina2, subpagina0
             include "store_data.lib"
             
             ORG  0X13B8             ;pagina2, subpagina3
             include "trans_contr.lib" 
             
             ORG  0X1438             ;pagina2, subpagina4
             include "prg.lib" 
             
             ORG  0X14C8             ;pagina2, subpagina4
             include "prgM.lib" 
             
             ORG  0X1550             ;pagina2, subpagina5
             include "octav.lib" 
             
             ORG  0X15E8             ;pagina2, subpagina6
             include "octavM.lib" 
             
             ORG  0X1650             ;pagina2, subpagina6
             include "volume.lib" 
             
             ORG  0X1728             ;pagina2, subpagina7
             include "volumeM.lib" 
                                     
             ORG  0X1800			 ;pagina3, subpagina0
             include "bank.lib" 
             
             ORG  0X1968			 ;pagina3, subpagina1
             include "Slider0.lib" 
             
		   ORG  0X1B58             ;pagina3, subpagina3
             include "ContrSW.lib" 
;**
;**
    	              
end




