TXSTA, TRMT -problem PIC16.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
opatagio
Inlägg: 236
Blev medlem: 24 maj 2005, 20:19:21

TXSTA, TRMT -problem PIC16.

Inlägg av opatagio »

Då var det dags igen. Nu har jag fått problem med att TXSTA,TRMT inte blir satt ("hög") efter jag skickat ett tal. När jag pollar med btfss TXSTA, TRMT om ej satt går jag till föregående instruktion, alltså kör btfss igen. Det verkar som TRMT aldrig blir hög oavsett om talet är skickat eller ej. PIC:en ifråga är en 16F887. Och för att testa detta skrev jag ett litet program för att skicka ett tal till PC. Jag får talet i Hyperterm men sedan stannar programmet vid btfss TXSTA, TRMT.

Programmet jag har testat med är detta:

Kod: Markera allt

START	ORG		h'0000'
	goto	INIT

	ISR		ORG		h'0004'
	goto	INIT


	INIT

		banksel	OSCCON
		movlw	b'01110101'
		movwf	OSCCON
		movlw	b'00001111'
		movwf	OSCTUNE


		banksel	PORTA
		clrf	PORTA
		clrf	PORTB
		clrf	PORTC
		clrf	PORTD

		banksel	ANSEL
		clrf	ANSEL
		clrf	ANSELH
		
		banksel	TRISA
		clrf	TRISA
		clrf	TRISB
		movlw	b'11000000'
		movwf	TRISC
		clrf	TRISD

		
		goto	MAIN

	

	MAIN

		BOOT_UP_UART
			banksel	BAUDCTL
			movlw	b'01001000'
			movwf	BAUDCTL

			banksel	SPBRG
			movlw	d'103'			; 207 = 9200bps, 103 = 19200bps, 34 = 57600bps
			movwf	SPBRG
			
			banksel	RCSTA
			movlw	b'10010000'
			movwf	RCSTA

			banksel	TXSTA
			movlw	b'00100100'
			movwf	TXSTA
			
		UART_PREPARE
			call	DELAY

			movf	RCREG, W
			movf	RCREG, W
			movf	RCREG, W


		call	UART_MESSAGE

	UART_RX		
				bsf		PORTD,1
				call	CHAR_RX
				call	DELAY
				goto	UART_RX



	CHAR_RX
				banksel	PIR1
				btfss	PIR1, RCIF
				goto	CHAR_RX
				movf	RCREG,W
				;bsf		PORTD,1
				return

	UART_MESSAGE		
				movlw	h'41'
				call	CHAR_TX
				return


	CHAR_TX
                              banksel TXREG
				movwf	TXREG

		CHAR_TX_WAIT	
				banksel	TXSTA
				btfss	TXSTA,TRMT
				goto	CHAR_TX_WAIT
                                banksel PORTD
				bsf		PORTD,0
				return




DELAY
			;1999996 cycles
	movlw	0x11
	movwf	d1
	movlw	0x5D
	movwf	d2
	movlw	0x05
	movwf	d3
Delay_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	Delay_0

			;4 cycles (including call)
	return




		END
Tack på förhand.

Edit: Kom att tänka på att jag inte hade sådana här problem med en 16F688. Där gick det att skicka till 16F887 utan problem. Dock fick jag problem när jag skulle skicka från 16F887 till 16F688.

16F688 har en .INC fil från MPLAB 7.62 medan 16F887 använder den som kommer med MPLAB 7.60.
Senast redigerad av opatagio 9 oktober 2007, 23:26:54, redigerad totalt 2 gånger.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det verkar lite konstigt, men vi kan ju börja med att fixa några
andra småfel så får vi se...

> banksel CHAR_TX

CHAR_TX är en label, banksel används enbart för FSR eller GPR referenser.

Samma sak här :;

>banksel UART_MESSAGE



>CHAR_TX
> banksel TXSTA
> btfss TXSTA, TRMT
> goto CHAR_TX
> movwf TXREG <<<=== Fel bank !!

Samma sak längre ner där PORTD inte ligger i samma bank som TXSTA.

Jag vet inte riktigt hur du får iväg något alls till PCn...
opatagio
Inlägg: 236
Blev medlem: 24 maj 2005, 20:19:21

Inlägg av opatagio »

Aj aj aj aj .... det jag klistrade in ovan är efter jag felsökt men inte rensat i koden tillbaka till ursprunget jag testade med. Jag blev för ivrig .... eller frusterad antar jag. Helt och hållet mitt fel.

Fixar till det genast. Att jag skrivit banksel innan labels bevisar nog mer än väl att jag blivit smått förvirrad.
Senast redigerad av opatagio 9 oktober 2007, 23:28:38, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK.
Ja, jag behöver sannolikt inte säga vad jag tycker... :-)

Men, posta gärna ett så litet som möjligt exempel (men
fortfarande kopmplett) som visar just det problem som frågan rör.
Plocka bort alla andra funktioner som inte har med det att göra.
Ofta hittar man felet *innan* man postar, så det blir ingeting alls
av det på forumet... :-)
Skriv svar