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]







Zitieren


Lesezeichen