Hallo nun ich will mein Display mit dem Max 7219 ansteuern dieser soll dann einen Buchstaben ausgeben:

Variablenfestlegung:
Code:
	CBLOCK	H'20'
		variable1	; das Wort variable1 entspricht der Adresse H'20'
		zaehl		; das Wort zaehl entspricht der Adresse H'21'
		register
		sendregister
		value
		temp
		z1
    z2
    z3
	ENDC

Hauptprogamm und unterprogramm:

Code:
;*****************
;* Hauptprogramm *
;*****************

main     
  BSF PORTB,1       ;setze Bit des Registers PORTB,1 
  GOTO up_initmax   ;gehe zu up_initmax
  GOTO up_zeichen   ;gehe zu up_zeichen
  GOTO up_warte    ;gehe zu up_warten
  GOTO main         ;gehe zu main



  

  
;******************
;* Unterprogramme *
;******************
up_warte                    ;warteschleife
         MOVLW    D'170'    ;lade W-Register mit D'170'
         MOVWF    z1        ;kopiere W-Register nach z1
outer  
         MOVLW    D'120'    ;lade W-Register mit D'120'
         MOVWF    z2        ;kopiere W-Register nach z2
middle      
         MOVLW    D'70'     ;lade W-Register mit D'70'
         MOVWF    z3        ;kopiere W-Register nach z3
inner       
         DECFSZ   z3        ;decrementier Register z3 und springe bei 0
         GOTO     inner     ;gehe zu inner
         DECFSZ   z2        ;decrementier Register z2 und springe bei 0
         GOTO     middle    ;gehe zu middle
         DECFSZ   z1        ;decrementier Register z1 und springe bei 0
         GOTO     outer     ;gehe zu outer
         
RETURN 

up_zeichen							 ; Tabelle mit den Werten der Ausgabe
			addwf   PCL, f     ;addiere W-Register zu PCL,f
			retlw	b'10000000'  ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
			retlw	b'10000000'  ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
			retlw	b'10000000'  ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
			retlw	b'10000000'  ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
			retlw	b'10000000'  ;springe aus dem Unterprogramm mit der Übergabe b'10000000'

			retlw	b'11000000'  ;springe aus dem Unterprogramm mit der Übergabe b'11000000'
			retlw	b'01000000'  ;springe aus dem Unterprogramm mit der Übergabe b'01000000'
			retlw	b'11000000'  ;springe aus dem Unterprogramm mit der Übergabe b'11000000'
			retlw	b'01000000'  ;springe aus dem Unterprogramm mit der Übergabe b'01000000'
			retlw	b'01000000'  ;springe aus dem Unterprogramm mit der Übergabe b'01000000'

			retlw	b'11100000'  ;springe aus dem Unterprogramm mit der Übergabe b'11100000'
			retlw	b'00100000'  ;springe aus dem Unterprogramm mit der Übergabe b'00100000'
			retlw	b'11100000'  ;springe aus dem Unterprogramm mit der Übergabe b'11100000'
			retlw	b'00100000'  ;springe aus dem Unterprogramm mit der Übergabe b'00100000'
			retlw	b'00100000'  ;springe aus dem Unterprogramm mit der Übergabe b'00100000'

			retlw	b'11110000'  ;springe aus dem Unterprogramm mit der Übergabe b'11110000'
			retlw	b'00010000'  ;springe aus dem Unterprogramm mit der Übergabe b'00010000'
			retlw	b'11110000'  ;springe aus dem Unterprogramm mit der Übergabe b'11110000'
			retlw	b'00010000'  ;springe aus dem Unterprogramm mit der Übergabe b'00010000'
			retlw	b'00010000'  ;springe aus dem Unterprogramm mit der Übergabe b'00010000'

			retlw	b'11111000'  ;springe aus dem Unterprogramm mit der Übergabe b'11111000'
			retlw	b'10001000'  ;springe aus dem Unterprogramm mit der Übergabe b'10001000'
			retlw	b'11111000'  ;springe aus dem Unterprogramm mit der Übergabe b'11111000'
			retlw	b'10001000'  ;springe aus dem Unterprogramm mit der Übergabe b'10001000'
			retlw	b'10001000'  ;springe aus dem Unterprogramm mit der Übergabe b'10001000'

			retlw	b'01111100'  ;springe aus dem Unterprogramm mit der Übergabe b'01111100'
			retlw	b'01000100'  ;springe aus dem Unterprogramm mit der Übergabe b'01000100'
			retlw	b'01111100'  ;springe aus dem Unterprogramm mit der Übergabe b'01111100'
			retlw	b'01000100'  ;springe aus dem Unterprogramm mit der Übergabe b'01000100'
			retlw	b'01000100'  ;springe aus dem Unterprogramm mit der Übergabe b'01000100'

			retlw	b'00111110'  ;springe aus dem Unterprogramm mit der Übergabe b'00111110'
			retlw	b'00100010'  ;springe aus dem Unterprogramm mit der Übergabe b'00100010'
			retlw	b'00111110'  ;springe aus dem Unterprogramm mit der Übergabe b'00111110'
			retlw	b'00100010'  ;springe aus dem Unterprogramm mit der Übergabe b'00100010'
			retlw	b'00100010'  ;springe aus dem Unterprogramm mit der Übergabe b'00100010'

			retlw	b'00011111'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
			retlw	b'00010001'  ;springe aus dem Unterprogramm mit der Übergabe b'00010001'
			retlw	b'00011111'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
			retlw	b'00010001'  ;springe aus dem Unterprogramm mit der Übergabe b'00010001'
			retlw	b'00010001'  ;springe aus dem Unterprogramm mit der Übergabe b'00010001'

			retlw	b'00001111'  ;springe aus dem Unterprogramm mit der Übergabe b'00001111'
			retlw	b'00001000'  ;springe aus dem Unterprogramm mit der Übergabe b'00001000'
			retlw	b'00001111'  ;springe aus dem Unterprogramm mit der Übergabe b'00001111'
			retlw	b'00001000'  ;springe aus dem Unterprogramm mit der Übergabe b'00001000'
			retlw	b'00001000'  ;springe aus dem Unterprogramm mit der Übergabe b'00001000'

			retlw	b'00000111'  ;springe aus dem Unterprogramm mit der Übergabe b'00000111'
			retlw	b'00000100'  ;springe aus dem Unterprogramm mit der Übergabe b'00000100'
			retlw	b'00000111'  ;springe aus dem Unterprogramm mit der Übergabe b'00000111'
			retlw	b'00000100'  ;springe aus dem Unterprogramm mit der Übergabe b'00000100'
			retlw	b'00000100'  ;springe aus dem Unterprogramm mit der Übergabe b'00000100'

			retlw	b'00000011'  ;springe aus dem Unterprogramm mit der Übergabe b'00000011'
			retlw	b'00000010'  ;springe aus dem Unterprogramm mit der Übergabe b'00000010'
			retlw	b'00000011'  ;springe aus dem Unterprogramm mit der Übergabe b'00000011'
			retlw	b'00000010'  ;springe aus dem Unterprogramm mit der Übergabe b'00000010'
			retlw	b'00000010'  ;springe aus dem Unterprogramm mit der Übergabe b'00000010'

			retlw	b'00000001'  ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
			retlw	b'00000001'  ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
			retlw	b'00000001'  ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
			retlw	b'00000001'  ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
			retlw	b'00000001'  ;springe aus dem Unterprogramm mit der Übergabe b'00000001'

			retlw	b'00000000'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
			retlw	b'00000000'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
			retlw	b'00000000'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
			retlw	b'00000000'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
			retlw	b'00000000'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
;------------------------
up_initmax      ;max initialisierung

  Banksel TRISB ;Umschalten auf die Datenspeicherbank TRISB
  bcf TRISB,1   ;lösche Bit des Registers TRISB,1
  bcf TRISB,2   ;lösche Bit des Registers TRISB,2
  bcf TRISB,0   ;lösche Bit des Registers TRISB,0
  
  Banksel PORTB ;Umschalten auf die Datenspeicherbank PORTB
  bsf PORTB,1   ;setze PORTB,1 LOAD_PORT
  bcf PORTB,2   ;lösche PORTB,2 CLK_PORT
  

 call clear       ;rufe clear auf
 movlw b'00001111';lade W-Register mit D'170'
 call intensity   ;rufe clear auf
 movlw b'11111111';lade W-Register mit D'170'
 call decodemode  ;rufe clear auf
 movlw b'00000111';lade W-Register mit D'170'
 call scanlimit   ;rufe clear auf
 movlw b'00000001';lade W-Register mit D'170'
 call shutdown    ;rufe clear auf
 movlw b'00000000';lade W-Register mit D'170'
 call displaytest ;rufe clear auf
  return            ;zurück
  
send                ;senden
  movf register,w   ;kopiere Register 
  movwf sendregister;kopiere W-Register nach z2
  movlw d'16'       ;lade W-Register mit D'170'
  bcf PORTB,1       ;lösche PORTB,1
  
sendloop                ;sendenschleife
  bcf PORTB,0           ;lösche PORTB,0
  btfsc sendregister,7  ;teste sendregister,7 und springe wenn gelöscht
  bsf PORTB,0           ;setze PORTB,0
  rlf value,f           ;rotiere value,f nach links durch carryflag
  rlf sendregister,f    ;rotiere sendregister,f nach links durch carryflag
  bsf PORTB,2           ;setze PORTB,2
  nop                   ;keine Operation
  bcf PORTB,2           ;lösche PORTB,2
  addlw 0xff            ;addiere Arbeitsregister mit 0xff
  btfss STATUS,Z        ;teste STATUS,Z und springe wenn gesetzt
  goto sendloop         ;geh zu sendloop
  bsf PORTB,1           ;setze PORTB,1
  return                ;zurück
  
decodemode           ;decodemode
  movwf value       ;kopiere W-Register nach value
  movlw b'00001001' ;lade W-Register mit b'00001001'
  movwf register    ;kopiere W-Register nach register
  goto send         ;gehe zu send
  
intensity           ;intensity
  movwf value       ;kopiere W-Register nach value
  movlw b'00001010' ;lade W-Register mit b'00001010'
  movwf register    ;kopiere W-Register nach register
  goto send         ;gehe zu send
  
scanlimit           ;scanlimit        
  movwf value       ;kopiere W-Register nach value
  movlw b'00001011' ;lade W-Register mit b'00001011'
  movwf register    ;kopiere W-Register nach register
  goto send         ;gehe zu send
  
displayon          ;displayon
  movlw b'00000001';lade W-Register mit b'00000001'
  goto shutdown    ;gehe zu shutdown
  
displayoff         ;displayoff
  movlw b'00000000';lade W-Register mit b'00000000'
  
shutdown            ;shutdown
  movwf value       ;kopiere W-Register nach value
  movlw b'00001100' ;lade W-Register mit b'00001100'
  movwf register    ;kopiere W-Register nach register
  goto send         ;gehe zu send
  
displaytest         ;displaytest
  movwf value       ;kopiere W-Register nach value
  movlw b'00001111' ;lade W-Register mit b'00001111'
  movwf register    ;kopiere W-Register nach register
  goto send         ;gehe zu send
  
clear
  movlw 0x00        ;lade W-Register mit D'170'
  goto send         ;gehe zu send

END                 ;Programmende

Könnt ihr mir sagen wo der Fehler liegt?

Ach ja es werden übrigens nur 4 LED´s von der D-M-Anzeige angezeigt![/list]