-         
+ Antworten
Ergebnis 1 bis 9 von 9

Thema: Probleme bei USART-Ini.

  1. #1
    Jen
    Gast

    Probleme bei USART-Ini.

    Hallo,

    ich versuche schon einige Tage lang, meinem PIC das Senden von Daten beizubringen. Aber irgendwie stellt er sich stur.

    Hier mein Initialisierungscode:
    Code:
    Ini_start	
    	
    	; Setzen der Ein- und Ausgänge
    	BANK_1	; alle Pins, die nicht belegt sind, werden als   
                                    ; Eingänge initialisiert, um Kurzschlüsse zu
    	                ; vermeiden
    	movlw 	 b'11111011'	; Pin-Belegung
    	movwf 	 TRISA					; in TRIS-Register schreiben (konfiguriert PORT)
    
    	movlw 	 b'11100011'	
    	movwf    TRISB			
    			
    	movlw	 b'00001000'   ; TMR0: 1/4 Pic-Takt, RB0-I: 
    	movwf	 OPTION_REG ; fallende Flanke
    
    	movlw	 b'11000000' ; Interrupts konfigurieren (RB0, 
    	movwf	 INTCON       ; PORTB, generell=1)
    
    	BANK_0
    	; Pegel der Ein- und Ausgänge initialisieren
    	movlw 	b'00000100'	; initialisieren der Pegel
    	movwf 	PORTA		; in PORT-Register schreiben
    
    	movlw 	b'00111001'				movwf 	PORTB					
    	; initialisieren von TMR1
    	movlw	 b'00000111'
    	movwf	 T1CON
    
    	; alle Comparatoreingänge auf Digital umschalten 
                    bsf 	 CMCON, CM0 
                    bsf 	 CMCON, CM1 
                    bsf 	 CMCON, CM2 
    
    	clrf	 adresse
    
    	call	LED_B                 ; hier blinkt eine LED
                    ; BIS HIER HIN FUNKTIONIERT´S!!!!
                                  
    	; USART initialisieren
    	BANK_1
    	movlw	 b'01000000'
    	movwf	 SPBRG		; Baudrate 19200
    	
    	bcf		 TXSTA, TXEN
    	
    	movlw	 b'00000100'
    	movwf	 TXSTA			; Sender
    
    	call	LED_B
    
    	BANK_0
    	bcf		 RCSTA, CREN
    	
    	movlw	 b'10000000'
    	movwf	 RCSTA		; Empfänger
    	
    	call	LED_B
    
    	clrf	 PIR1					; alle Interrupt-Flags löschen
    	
    	BANK_1
    	bsf		 TXSTA, TXEN
    	bsf		 PIE1, TXIE ; Sender-Interrupt zulassen
    	
    	return
    Das Main ruft nach Ini_start dann nochmal LED_B auf. Wird aber nicht gemacht. Wegen irgendwas kommt der PIC nicht aus Ini_start raus.

    Sieht einer den Fehler? Welche Fehler könnten denn in der Hardware sein?
    Die Pins für RX und TX gehen auf ein MAX232, aber nicht während des Programmierens oder ausführen des Programms, es wird erst zu geschaltet, wenn ausgelesen werden soll.

    Hier noch einige Daten: PIC16F628, programmiert wird in Assembler, JDM Programmer.

    Bitte helft mir, ich verzweifle sonst noch [-o<

    LG
    Jen

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Schau mal
    Ich definiere zwar ne andere Baudrate, aber so geht's zumindest (Die Bank-selectionen hab ich weggelassen, die weißt du ja)
    MOVLW 0x20
    MOVWF TXSTA
    MOVLW 0x90 ;
    MOVWF RCSTA
    MOVLW D'9' Set Baud rate 31,250 BPS (MIDI) at 20 MHz
    MOVWF SPBRG
    BCF TXSTA, BRGH
    BSF PIE1,RCIE
    BSF PIE1,TXIE

    BSF INTCON,GIE // Interrrupts general enab
    BSF INTCON,PEIE // + device interrrupts enab

    Anm: Init endet mit "return"--> Wird sie auch mit "CALL" aufgerufen ?
    2 . Ist die LED-Routine sicher in Ordnung ? denn falsch oder richtig, DURCHLAUFEN muß er in jedem Fall
    mfg

  3. #3
    Jen
    Gast
    Hallo,

    danke erstmal für deine Antwort.

    Ja,Ini_start wird vom main aufgerufen.

    Die LED-Routine ist in Ordnung, sobald ich die gesamte USART-Ini. auskommentiere, funktioniert das Ganze auch wieder. Aber das ist ja nicht Sinn und Zweck der Sache.

    LG
    Jen

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Logo.
    nochmal "aufgerufen" ---> CALL oder JMP (branch, goto) ???
    der Kerl MUSS zurückkommen richtig oder falsch initialisiert, egal.
    Next : die Init-statements alle auskommentieren, dann einzeln wieder dazu geben
    Wie gesagt, es is mal wurst, ob der INIT auch stimmt, Erst geht's mal ums überleben mfg

  5. #5
    Jen
    Gast
    Call

    das andere werd ich gleich mal ausprobieren

    LG

  6. #6
    Jen
    Gast
    Hallo,

    hab mich jetzt auf die Weise durchgekämpft, wie du gesagt hast.

    Hab zuerst einmal den Pin der LED gewechselt, denn den, wo ich die LED bis jetzt hatte wollt er nicht.

    Dann bin ich nach und nach die Ini. durchgegangen. Folgendes macht er nicht richtig:

    Code:
    BANK_1
    	movlw	 b'01000000'
    	movwf	 SPBRG		; Baudrate 19200
    (nur eine LED blinkt ohne "Betriebsanzeige")

    Code:
    BANK_1
    	bsf		 TXSTA, TXEN
    	bsf		 PIE1, TXIE  ; Sender-Interrupt zulassen
    (beide LED blinken ohne "Betriebsanzeige")

    Damit die Sachen in Klammern verstanden werden, hier noch schnell, was mein Programm derzeit macht:
    Code:
    ; UP 
    ; LED-Warten 
    Warte_100							; 100ms
    	movlw	b'1100100'
    	movwf	warte_ko
    Warte
    	movlw	b'11111001'				movwf	warte_1m
    LOOP_1m
    	NOP								; 20Zyklen
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP	
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP
    	decfsz	warte_1m,f				; 1ms
    	goto 	LOOP_1m
    	decfsz	warte_ko,f	
    	goto	Warte
    	return
    
    ; UP 
    ; Blinken durch Auslesen aus EEPROM
    eeblinken
    	bsf	INTCON, GIE ; Interrupts allgemein zu lassen
    	movfw	adresse
    	call 	eeread
    	movwf	PORTB
    
    	incf    adresse, f    	; Adresse erhöhen 
                    btfsc  adresse, 1    	; Adresse = '00000010' = 2 ?? 
                    clrf    adresse     	; zurück zur Adresse 0 
    
    	call	Warte_100
    	goto	eeblinken
    	return
    
    ; UP
    ; EEPROM auslesen
    eeread
    	BANK_1      
                    movwf  	EEADR           	
                    bsf    	EECON1,RD       		 
                    movf   	EEDATA,w        		 	BANK_0	
             
    	return
    
    ; UP
    ; EEPROM beschreiben
    
    eeschreiben
    	BANK_1
    	movlw	0x00
    	movwf	EEADR					movfw	zahl_2
    	movwf	EEDATA					bsf	EECON1,WREN				
    	movlw	0x55
    	movwf	EECON2
    	movlw	0xAA
    	movwf	EECON2
    	bsf	EECON1,WR				
    	call	Warte_100				
    
    	movlw	0x01
    	movwf	EEADR					movfw	zahl_3
    	movwf	EEDATA					bsf	EECON1,WREN				
    	movlw	0x55
    	movwf	EECON2
    	movlw	0xAA
    	movwf	EECON2
    	bsf	EECON1,WR				
    	call	Warte_100
    	BANK_0
    	return
    
    ; UP
    ; Rechnen
    eerechnen
    	movlw	d'20'
    	movwf	zahl_1
    	
    	movlw	d'4'
    	subwf	zahl_1,w
    	movwf	zahl_2	; hier müsste jetzt 16 drin stehen
    
    	movlw	d'12'
    	subwf	zahl_1,w		
    	movwf	zahl_3	; hier müsste jetzt 8 drin stehen
    	return
    
    ; UP 
    ; LED-Betriebsanzeige 
    LED_B
    	movlw	0x0A
    	movwf	blin_10
    LOOP_B
    	bcf	PORTA,2
    	call	Warte_100
    	bsf	PORTA,2
    	call	Warte_100
    	decfsz	blin_10,f
    	goto	LOOP_B
    	return
    
    ; Hauptprogramm 
    main
    	call  	Ini_start
    	call	LED_B	
    	call	eerechnen
    	call	eeschreiben
    	call	eeblinken
    
     end
    Wieso funkionieren nur die obigen Code-Teile nicht richtig?
    Kann es sein, dass sie wegen irgendetwas übersprungen werden?

    LG
    Jen

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Gut, ich seh schon, ich muß das heute auf meinem Pic mal probieren, ich rühr' mich.
    Eines WICHTIG: Die PIC's sind heikel auf dir Reihenfolge der Initialisierung, das wissen wir schon.
    Vielleicht: Erst durch das Setzen von SPEN im RCSTA definiert sich der Bursche seine Pins für RxTx. Das machst du relativ spät., vielleicht hängt er sich deswegen auf
    Ein Rat noch im Moment: Mach die Initialisierung von der Reihenfolge her klitzeklein genau so wie bei mir (mit Deinen Baud-Werten natürlich). Ich kann damit seit Monaten kreuz- und quer USARTen.
    Nach dem Initialisieren kannst du dann sicher enablen und disablen, wie du magst,
    ! aber tu' mir die Liebe und versuchs mal.!
    Wie gesagt, ich probier's daheim mal durch, vielleich kann ich den gleichen Fehler verursachen., mal sehen. bis dann Robert

  8. #8
    Jen
    Gast
    Hallo!

    DANKE! DANKE! DANKE!

    Dein Tipp mit der Reihenfolge hat geholfen!!!! Hab ein paar Sachen umgestellt und jetzt funktioniert´s!!!!! \/

    LG
    Jen

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Wieder das Phänomen:
    Kaum macht du es richtig, geht's auch schon
    also, auf geht's mfg robert

+ Antworten

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •