Hi
Hatte vor einiger Zeit schon mal hier gepostet. Aber jetzt komme ich wieder nicht weiter, dh. Verstehe nicht warum das Prog nicht läuft.
Hier erstmal eine Erläuterung damit überhaut eine Chance besteht das Prog nachzuvollziehen. Wie gesagt handelt es sich um ein kleines Effektgerät. Dieses verfügt über 16 Taster. Jeder dieser Taster stellt einen 16tel Note dar und kann entweder gesetzt sein (LED leuchtet) oder eben nicht (LED aus).
Später möchte ich das ganze noch um16 LEDs ergänzen, sodass das ganze eine typische Drumcomputeransteuerung wird.
Das Gerät verfügt darüber hinaus noch über einen Audioein- und Ausgang. In den Eingang wird zB ein Palttenspieler eingesteckt und der Ausgang kommt dann zB ins Mischpult.
Ist nun ein Taster gesetzt so lässt die Schaltung für dieses 16tel eines Takts das Audiosignal unverändert durch. Ist ein Taster nicht gesetzt so wird das Audiosignal mute/stumm geschaltet. Das ganze Gerät zerhackt also die Audiosignale. In der Fachsprache ein Gater oder Apreggiator.
Alles ist soweit fertig außer dass das Prog läuft. Für Tips, Anregungen, Verbesserungsvorschläge, Verbesserungen… und vor allem Fehlerfunde wäre ich sehr dankbar.

MfG Daniel



Hier der Code:

Code:
;************************************************************************************
;
;                         BRAINS
;                MIDI-Scratch Apreggiator
;
;************************************************************************************   
	 list p=16F874 
    #include <P16F874.INC> 
    __CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC 
;************************************************************************************
;
;Beschreibung
;Am Eingang [] ist ein MIDIClock Signal anzulegen. Dieser Takt steuert die 16
;
;Bei jeder der 16 16tel Noten kann mittels der Taster gewählt werden, ob das anliegende
;Audio-Signal für diese Zeit MUTE geschaltet werden soll oder nicht. Der erhaltene Effekt
;ist ein Apreggiatoreffekt.
;
;
;
;************************************************************************************

; 					Variablen festlegen

MIDI_CL 		EQU 0x20  	;MIDI_CL-Byte 
MIDI_ST 		EQU 0x21
;MIDI_SP		EQU 0x22
COUNTER_6 		EQU 0x23
HLS1			EQU 0x24
HLS2			EQU 0x25
OBYTE1			EQU 0x26	
OBYTE2			EQU 0x27   
TAKTART			EQU 0x28  	;Bit0: set=3/4 Takt; n.set=4/4 Takt 
				  	;Bit1: set=goto MIDI_IN_ST; n.set=goto MIDI_IN_CL

HILFE1			EQU 0x2C 	
HILFE2			EQU 0x2D

;************************************************************************************
; 	 IO-PIN-BELEGUNG
;
; 	 Ao	OUT (FX)
;
;	 Bo	T0    
;	 B1	T1		
;	 B2	T2
;	 B3	T3
;	 B4	T4
;	 B5	T5
;	 B6	T6
;	 B7	T7
;
; 	 D0	T8
;	 D1	T9
; 	 D2	T10
; 	 D3	T11
; 	 D4	T12
; 	 D5	T13
; 	 D6	T14
; 	 D7	T15
;
;        xx     MIDI IN
;
;************************************************************************************


					
	bcf 	STATUS, RP0		;auf Bank 0 umschalten

	bcf 	ADCON0,0		;ADC ausschalten


;					INIT UART

	bsf 	STATUS, RP0		;auf Bank 1 umschalten	
	movlw	0x09			;Baudrate auf 31250 Baud
	movwf	SPBRG			
	bcf	TXSTA, BRGH		;low speed Baudrate
	bcf	TXSTA, SYNC		;enable the serial port
	bcf 	STATUS, RP0		;auf Bank 0 umschalten
	bsf	RCSTA, SPEN		;enable the serial port
	bsf	RCSTA, CREN		;enable reception

	bcf	RCSTA, FERR	
	bcf 	RCSTA, OERR
	bcf	RCSTA, RX9D

	bsf 	STATUS, RP0		;auf Bank 1 umschalten	

;					ADC auf I/O umschalten 	
	movlw 	0x06
	movwf 	ADCON1


	bcf	TRISA,0			;PortA,0 auf Ausgang setzten

;					PortB auf EINGANG setzten	
	movlw 	B'11111111'
	movwf 	TRISB


	bsf	TRISC,7			;PortC,7 auf Eingang

;					PortD auf EINGANG setzten	
	movlw 	B'11111111'
	movwf 	TRISD	


	bcf 	STATUS, RP0		;auf Bank 0 umschalten

;					COUNTER_6 laden
	movlw	D'249'
	movwf	COUNTER_6

;					OBYTE1 und OBYTE2 löschen
	clrf	OBYTE1
	clrf	OBYTE2

;					HILFE1 und HILFE2 löschen	
	clrf	HILFE1
	clrf	HILFE2

;					HLS1 und HLS2 als Grundeinstellung laden
	movlw	B'00110011'
	movwf	HLS1
	movlw	B'00110011'
	movwf	HLS2

	bcf	TAKTART,0		;als Grundeinstellung 4/4 Takt

;					MIDI_CL, ST, SP Initialisierung
	movlw 	0xF8
	movwf 	MIDI_CL
	movlw 	0xFA
	movwf	MIDI_ST	
;	movlw	0xFC
;	movwf	MIDI_SP

	bcf 	STATUS, RP0		;auf Bank 0 umschalten

;****** Programmstart **************************************************


MIDI_IN_ST
	btfss 	PIR1,RCIF		;überspringe nachfolgenden Befehl, wenn Bit5 gesetzt ist, dh MIDI_IN_BYTE liegt vor
	goto 	TASTENABFRAGE_ST
	bcf 	PIR1,RCIF		;lösche das Bit, welches einen MidiEmpfang anzeigt
	movf 	RCREG,W			;kopiere RCREG nach W
	xorwf 	MIDI_ST,W		;es wird geprüft, ob das angekommene Byte ein StartBefehl war und das Ergebnis wird in W gespeichert
	btfsc	STATUS,Z		;prüfe das ZeroFlag: 0: XOR Verknüpfung war wahr
	goto 	MIDI_IN_ST

MIDI_IN_CL					;JA, es war ein StartBit, also weiter
	btfss 	PIR1,RCIF		;überspringe nachfolgenden Befehl, wenn Bit5 gesetzt ist, dh MIDI_IN_BYTE liegt vor
	goto	TASTENABFRAGE_CL
	movf 	RCREG,W			;kopiere RCREG nach W
	xorwf 	MIDI_CL,W		;es wird geprüft, ob das angekommene Byte ein ClockBefehl war
	btfsc	STATUS,Z		;prüfe das ZeroFlag: 0: XOR Verknüpfung war wahr
	goto 	MIDI_IN_ST	

;****** Counter *********************************************************************************************************

	incfsz	COUNTER_6,1		;COUNTER_6 +1 und Ergebnis wieder in COUNTER_6 speichern - falls das Ergebnis=o => ingnoriere nachfolg. Befehl
	goto 	MIDI_IN_CL
	movlw 	D'249'
	movwf	COUNTER_6

;****** Positionstest ******************************************************************************************

	btfss	OBYTE1,0		;prüfe, ob hier die aktuelle Position ist? - Nein, dann gehe zum nächsten Befehl
	goto 	OBYTE1_0NOTSET		;springe zu OBYTE1_0NOTSET
	btfss	OBYTE1,1
	goto 	OBYTE1_1NOTSET
	btfss	OBYTE1,2
	goto 	OBYTE1_2NOTSET
	btfss	OBYTE1,3
	goto 	OBYTE1_3NOTSET
	btfss	OBYTE1,4
	goto 	OBYTE1_4NOTSET
	btfss	OBYTE1,5
	goto 	OBYTE1_5NOTSET
	btfss	OBYTE1,6
	goto 	OBYTE1_6NOTSET
	btfss	OBYTE1,7
	goto 	OBYTE1_7NOTSET

	btfss	OBYTE2,0
	goto 	OBYTE2_0NOTSET
	btfss	OBYTE2,1
	goto 	OBYTE2_1NOTSET
	btfss	OBYTE2,2
	goto 	OBYTE2_2NOTSET
	btfss	OBYTE2,3
	goto 	OBYTE2_3NOTSET
	btfss	OBYTE2,4
	goto 	OBYTE2_4NOTSET
	btfss	OBYTE2,5
	goto 	OBYTE2_5NOTSET
	btfss	OBYTE2,6
	goto 	OBYTE2_6NOTSET
	btfss	OBYTE2,7
	goto 	OBYTE2_7NOTSET
	
;**** OBYTES 1 + 2 ************************************************************************************************

OBYTE1_0NOTSET
	bsf     OBYTE1,0		;setze OBYTE,0
	btfss	HLS1,0
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE1_1NOTSET
	bsf     OBYTE1,1		;setze OBYTE,1
	btfss	HLS1,1
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE1_2NOTSET
	bsf     OBYTE1,2		;setze OBYTE,2
	btfss	HLS1,2
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE1_3NOTSET
	bsf     OBYTE1,3		;setze OBYTE,3
	btfss	HLS1,3
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE1_4NOTSET
	bsf     OBYTE1,4		;setze OBYTE,4
	btfss	HLS1,4
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE1_5NOTSET
	bsf     OBYTE1,5		;setze OBYTE,5
	btfss	HLS1,5
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE1_6NOTSET
	bsf     OBYTE1,6		;setze OBYTE,6
	btfss	HLS1,6
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE1_7NOTSET
	bsf     OBYTE1,7		;setze OBYTE,7
	btfss	HLS1,7
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL

OBYTE2_0NOTSET				;hier beginnt HLS2************************************************************
	bsf     OBYTE2,0		;setze OBYTE,0
	btfss	HLS2,0
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE2_1NOTSET
	bsf     OBYTE2,1		;setze OBYTE,1
	btfss	HLS2,1
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE2_2NOTSET
	bsf     OBYTE2,2		;setze OBYTE,2
	btfss	HLS2,2
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE2_3NOTSET
	bsf     OBYTE2,3		;setze OBYTE,3
	btfsc	TAKTART,0		; 3/4 oder 4/4 Takt? überspringe nachfolgenden Befehl bei 4/4Takt
	goto	TAKT_3_4
	btfss	HLS2,3
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE2_4NOTSET
	bsf     OBYTE2,4		;setze OBYTE,4
	btfss	HLS2,4
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE2_5NOTSET
	bsf     OBYTE2,5		;setze OBYTE,5
	btfss	HLS2,5
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE2_6NOTSET
	bsf     OBYTE2,6		;setze OBYTE,6
	btfss	HLS2,6
	goto	LOWOUT
	bsf	PORTA,0			;FX high
	goto	MIDI_IN_CL
OBYTE2_7NOTSET
	bsf     OBYTE2,7		;setze OBYTE,7
	btfss	HLS2,7
	goto	LOWTAKTENDE
	bsf	PORTA,0			;FX high
	goto	TAKTENDE

;***** Sprungmarken **********************************************************************

LOWOUT
	bcf	PORTA,0
	goto 	MIDI_IN_CL

LOWTAKTENDE
	bcf	PORTA,0
	goto	TAKTENDE

TAKTENDE
	clrf	OBYTE1
	clrf	OBYTE2
	goto	MIDI_IN_CL

TAKT_3_4
	btfss 	HLS2,3
	goto	LOWTAKTENDE
	bsf		PORTA,0
	goto	TAKTENDE

;**** Tastenabfrage *********************************************************************

TASTENABFRAGE_ST
	bsf	TAKTART, 1

TASTENABFRAGE_CL 

TASTER_0				;Tastenabfrage
	btfss	PORTB,0  		;überspringe nachfolgenden Befehl, wenn PORTB,0 gesetzt ist
	goto	CLEAR_HILFE_0		;gehe zu CLEAR_HILFE_0
	btfss	HILFE1,0		;überspringe nachfolgenden Befehl, wenn HILFE1,0 gesetzt ist
	goto 	INVERT_0		;gehe zu INVERT_0
	goto	TASTER_1		;gehe zur nächsten Tasterabfrage
	
CLEAR_HILFE_0				;hier wird das CLEAR_HILFE_0-Bit gelöscht
	bcf	HILFE1,0			
	goto	TASTER_1

INVERT_0				;hier wird die aktuelle Position invertiert
	bsf	HILFE1,0
	btfsc	HLS1,0	
	btfss	HLS1,0
	goto	SETZEN_0
	bcf 	HLS1,0
	goto	TASTER_1

SETZEN_0
	bsf	HLS1,0
	goto	TASTER_1



TASTER_1
	btfss	PORTB,1  
	goto	CLEAR_HILFE_1
	btfss	HILFE1,1
	goto 	INVERT_1
	goto	TASTER_2
	
CLEAR_HILFE_1
	bcf	HILFE1,1
	goto	TASTER_2

INVERT_1
	bsf	HILFE1,1
	btfsc	HLS1,1
	btfss	HLS1,1
	goto	SETZEN_1
	bcf 	HLS1,1
	goto	TASTER_2

SETZEN_1
	bsf	HLS1,1
	goto	TASTER_2




TASTER_2
	btfss	PORTB,2  
	goto	CLEAR_HILFE_2
	btfss	HILFE1,2
	goto 	INVERT_2
	goto	TASTER_3
	
CLEAR_HILFE_2
	bcf	HILFE1,2	
	goto	TASTER_3

INVERT_2
	bsf	HILFE1,2
	btfsc	HLS1,2	
	btfss	HLS1,2
	goto	SETZEN_2
	bcf 	HLS1,2
	goto	TASTER_3

SETZEN_2
	bsf	HLS1,2
	goto	TASTER_3




TASTER_3
	btfss	PORTB,3  
	goto	CLEAR_HILFE_3
	btfss	HILFE1,3
	goto 	INVERT_3
	goto	TASTER_4
	
CLEAR_HILFE_3
	bcf	HILFE1,3	
	goto	TASTER_4

INVERT_3
	bsf	HILFE1,3
	btfsc	HLS1,3	
	btfss	HLS1,3
	goto	SETZEN_3
	bcf 	HLS1,3
	goto	TASTER_4

SETZEN_3
	bsf	HLS1,3
	goto	TASTER_4




TASTER_4
	btfss	PORTB,4  
	goto	CLEAR_HILFE_4
	btfss	HILFE1,4
	goto 	INVERT_4
	goto	TASTER_5
	
CLEAR_HILFE_4
	bcf	HILFE1,4	
	goto	TASTER_5

INVERT_4
	bsf	HILFE1,4
	btfsc	HLS1,4	
	btfss	HLS1,4
	goto	SETZEN_4
	bcf 	HLS1,4
	goto	TASTER_5

SETZEN_4
	bsf	HLS1,4
	goto	TASTER_5




TASTER_5
	btfss	PORTB,5  
	goto	CLEAR_HILFE_5
	btfss	HILFE1,5
	goto 	INVERT_5
	goto	TASTER_6
	
CLEAR_HILFE_5
	bcf	HILFE1,5	
	goto	TASTER_6

INVERT_5
	bsf	HILFE1,5
	btfsc	HLS1,5	
	btfss	HLS1,5
	goto	SETZEN_5
	bcf 	HLS1,5
	goto	TASTER_6

SETZEN_5
	bsf	HLS1,5
	goto	TASTER_6




TASTER_6
	btfss	PORTB,6  
	goto	CLEAR_HILFE_6
	btfss	HILFE1,6
	goto 	INVERT_6
	goto	TASTER_7
	
CLEAR_HILFE_6
	bcf	HILFE1,6	
	goto	TASTER_7

INVERT_6
	bsf	HILFE1,6
	btfsc	HLS1,6	
	btfss	HLS1,6
	goto	SETZEN_6
	bcf 	HLS1,6
	goto	TASTER_7

SETZEN_6
	bsf	HLS1,6
	goto	TASTER_7




TASTER_7
	btfss	PORTB,7  
	goto	CLEAR_HILFE_7
	btfss	HILFE1,7
	goto 	INVERT_7
	goto	TASTER_8
	
CLEAR_HILFE_7
	bcf	HILFE1,7	
	goto	TASTER_8

INVERT_7
	bsf	HILFE1,7
	btfsc	HLS1,7	
	btfss	HLS1,7
	goto	SETZEN_7
	bcf 	HLS1,7
	goto	TASTER_8

SETZEN_7
	bsf	HLS1,7
	goto	TASTER_8




TASTER_8
	btfss	PORTD,0  
	goto	CLEAR_HILFE_8
	btfss	HILFE2,0
	goto 	INVERT_8
	goto	TASTER_9
	
CLEAR_HILFE_8
	bcf	HILFE2,0	
	goto	TASTER_9

INVERT_8
	bsf	HILFE2,0
	btfsc	HLS2,0	
	btfss	HLS2,0
	goto	SETZEN_8
	bcf 	HLS2,0
	goto	TASTER_9

SETZEN_8
	bsf	HLS2,0
	goto	TASTER_9





TASTER_9
	btfss	PORTD,1  
	goto	CLEAR_HILFE_9
	btfss	HILFE2,1
	goto 	INVERT_9
	goto	TASTER_10
	
CLEAR_HILFE_9
	bcf	HILFE2,1	
	goto	TASTER_10

INVERT_9
	bsf	HILFE2,1
	btfsc	HLS2,1	
	btfss	HLS2,1
	goto	SETZEN_9
	bcf 	HLS2,1
	goto	TASTER_10

SETZEN_9
	bsf	HLS2,1
	goto	TASTER_1




TASTER_10
	btfss	PORTD,2  
	goto	CLEAR_HILFE_10
	btfss	HILFE2,2
	goto 	INVERT_2
	goto	TASTER_11
	
CLEAR_HILFE_10
	bcf	HILFE2,2	
	goto	TASTER_11

INVERT_10
	bsf	HILFE2,2
	btfsc	HLS2,2	
	btfss	HLS2,2
	goto	SETZEN_10
	bcf 	HLS2,2
	goto	TASTER_11

SETZEN_10
	bsf	HLS2,2
	goto	TASTER_10




TASTER_11
	btfss	PORTD,3  
	goto	CLEAR_HILFE_11
	btfss	HILFE2,3
	goto 	INVERT_3
	goto	TASTER_12
	
CLEAR_HILFE_11
	bcf	HILFE2,3	
	goto	TASTER_12

INVERT_11
	bsf	HILFE2,3
	btfsc	HLS2,3	
	btfss	HLS2,3
	goto	SETZEN_11
	bcf 	HLS2,3
	goto	TASTER_12

SETZEN_11
	bsf	HLS2,3
	goto	TASTER_12




TASTER_12
	btfss	PORTD,4  
	goto	CLEAR_HILFE_12
	btfss	HILFE2,4
	goto 	INVERT_12
	goto	TASTER_13
	
CLEAR_HILFE_12
	bcf	HILFE2,4	
	goto	TASTER_13

INVERT_12
	bsf	HILFE2,4
	btfsc	HLS2,4	
	btfss	HLS2,4
	goto	SETZEN_12
	bcf 	HLS2,4
	goto	TASTER_13

SETZEN_12
	bsf	HLS2,4
	goto	TASTER_13




TASTER_13
	btfss	PORTD,5  
	goto	CLEAR_HILFE_13
	btfss	HILFE2,5
	goto 	INVERT_13
	goto	TASTER_14
	
CLEAR_HILFE_13
	bcf	HILFE2,5	
	goto	TASTER_14

INVERT_13
	bsf	HILFE2,5
	btfsc	HLS2,5	
	btfss	HLS2,5
	goto	SETZEN_13
	bcf 	HLS2,5
	goto	TASTER_14

SETZEN_13
	bsf	HLS2,5
	goto	TASTER_14




TASTER_14
	btfss	PORTD,6  
	goto	CLEAR_HILFE_14
	btfss	HILFE2,6
	goto 	INVERT_14
	goto	TASTER_15
	
CLEAR_HILFE_14
	bcf	HILFE2,6	
	goto	TASTER_15

INVERT_14
	bsf	HILFE2,6
	btfsc	HLS2,6	
	btfss	HLS2,6
	goto	SETZEN_14
	bcf 	HLS2,6
	goto	TASTER_15

SETZEN_14
	bsf	HLS2,6
	goto	TASTER_15




TASTER_15
	btfss	PORTD,7  
	goto	CLEAR_HILFE_15
	btfss	HILFE2,7
	goto 	INVERT_15
	goto	MIDI_IN_CL
	
CLEAR_HILFE_15
	bcf	HILFE2,7	
	goto	MIDI_IN_CL

INVERT_15
	bsf	HILFE2,7
	btfsc	HLS2,7
	btfss	HLS2,7
	goto	SETZEN_15
	bcf 	HLS2,7
	goto	MIDI_IN_CL

SETZEN_15
	bsf	HLS2,7
	btfss	TAKTART, 1		;teste ob das Hilfsbit, welches die Rückkehrsprungmarke bestimmt gesetzt ist
	goto	MIDI_IN_CL
	bcf	TAKTART, 1		;lösche die Sprungmarke
	goto	MIDI_IN_ST



;**** Endmarken *************************************************************

MIDI_IN_SP

;COUNTER_6 laden
	movlw	D'249'
	movwf	COUNTER_6

;OBYTE1 und OBYTE2 löschen
	clrf	OBYTE1
	clrf	OBYTE2

	goto 	MIDI_IN_ST
	
	end
edit by stegr: Bitte in Zukunft den Code-Tag verwenden... Danke...