Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
03/07/12 17:22
Read: times


 
#186478 - Serial coms, bytes not matching in serial capture
Hi, I'm currently setting up my project to send info over serial port. I have run into a problem I am having difficulty resolving. I am using MCU C8051F020 Silabs MCU and Realterm (serial capture).

What I want to do is send 25 bytes of code over the serial port and be displayed in Realterm on PC. My issue is when I hit run in the IDE, I get bytes present on the PC but they are not matching the bytes I have written in my code.

I assumed it was a baud rate issue, but I have used an oscilliscope and looped the value 'A' to be constantly written so that I could test it and oscilliscope is set at .1mS/div and I am getting 9600bps and Realterm is set for 9600bps also.

With sending only one byte over to Realterm it can reporoduce that no problem with no errors, but as soon as i introduce the 25 bytes it prints out 'garbage' (below)
~7E 00 01 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 ,2C ~7E
00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00

(expected 25 bytes below)
7EH,00H,00H,00H,01H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,01H



I have calculated the baud rate as per the datasheet and it is correct as far as i can see (unless datasheet is incorrect)

Thanks
Dave

ORG 100H

START:
			MOV SP,#4FH				;START STACK @ 50H
			MOV WDTCN,#0DEH 			;DISABLE WATCHDOG							 
			MOV WDTCN,#0ADH
			LCALL LCD_INIT				;INITILIZE LCD DISPLAY
			;LCALL CONFIGURE_INTERRUPT              ;SETS UP INTERRUPTS FPR SERIAL COMMS 									 
			LCALL CONFIGURE_PORTS			;CALLS SUBROUTINE TO INITILIZE PORTS
			LCALL CONFIGURE_UART1			;CALLS SUBROUTINE TO INITILIZE UART ON CROSSBAR
			LCALL REQUEST_CONNECTION	;CALLS REQUEST CONNECTION TO FINGERPRINT MODULE
			LCALL MAIN

MAIN:
			LCALL DISPLAY_6						;CALLS DISPLAY 'PRESS BUTTON TO SCAN FINGER'
			LCALL PUSHBUTTONS					;CALL PUSHBUTTON SUBROUTINE THATS CHECKS TO SEE IF A BUTTON IS PUSHED
LJMP MAIN
;========================================================================================
;HERE THE PORTS ARE CONFIGURED FOR THE PROGRAMME, CROSSBAR REGISTERS ARE SETUP TO ENABLE UART0.
;EACH PORT IS SETUP AS REQUIRED TO OPERATE,  
;========================================================================================

CONFIGURE_PORTS: 
			
			MOV OSCXCN,#01100111B		;SET OSCILLATOR TO 22.1184MHz
															
XTLVLD_WAIT:									;POLL FOR XTLVLD TO BE 1, XTLVLD NEEDS TO BE 1 SO THAT THE EX.OSCILLATOR IS STABLE
			MOV A,OSCXCN						;MOV EX.OSCILLATOR TO ACCUMULATOR SO THAT BIT 7 CAN BE DETERMINED IF IT IS SET OR NOT
			ANL A, #80h							;LOGIC 'AND' ACC WITH 10000000B TO CHECK AND SEE IF BIT 7 IS SET
			JZ XTLVLD_WAIT					;LOOP AROUND UNTIL ACC IS = 0
															
			MOV OSCICN, #88h				;DISABLE INTERNAL OSCILLATOR

			MOV P0MDOUT,#00000101B	;PUSHPULL FOR TX P0.2
			MOV P1MDOUT,#00000000B	;ALL 0 P1 NOT IN USE
			MOV P2MDOUT, #11111100B ;PUSHPULL FOR LCD DISPLAY

			MOV P74OUT,#00001000B  	;SET PUSH/PULL MODE FOR P5.7-5.4 (THE LEDS)
			MOV P4,#0FFH 						;PORT 4 IS SET UP AS AN INPUT PORT 
			MOV P5,#0FH  						;PORT 5 BITS 0-3 ARE ALSO PROGRAMMED AS ;INPUTS. LEDS ARE OFF 

			MOV xbr1,#00h					;NOT IN USE
			MOV xbr2,#44h					;ENABLE CROSSBAR & UART1
			MOV xbr0,#04h 				;THIS SELECTS UART0 WHICH MAKES UART1 P0.2 P0.3
RET 

;==============================================================================================
;HERE IS THE CONFIGURATION OF THE UART, WHICH WILL BE SET @ 9600 BPS, IT WILL BE CONTROLLED BY TIMER1
;UART0 IS INITIALIZED AND SET FOR 8 BIT VARIABLE BAUD RATE. 
;==============================================================================================

CONFIGURE_UART1:
													;if you want 9600 baud then you don't want to set bit 4 (T1M)
													;on the next line !    Doing so will give 230400 baud.
			ORL CKCON,#00H			;TIMER1 USES SYSTEM CLOCK AT 22.1184MHz
			MOV TMOD,#20H 			;TIMER1 MODE 1 8-BIT AUTORELOAD
			MOV TH1, #0FAH 
			MOV TL1, #0FAH  		;BAUD RATE 9600
			SETB TR1 						;START TIMER1
			MOV PCON, #00H 			;THIS WILL DIVIDE BY 2 AND GIVE 9600 BAUD RATE
			MOV SCON1,#01010000B;UART1 MODE 1, 8-BIT VARIABLE BAUD RATE, RX ENABLED			
RET

;===============================================================================================
;THIS SUBROUTINE WILL WRITE EACH BYTE FROM PACKET BEING SENT OVER THE SERIAL PORT THROUGH THE SBUF.
;THE ACCUMULATOR HOLDS THE VALUE POINTED AT BY THE DPTR
;IT WILL CONTINUE THIS LOOP UNTIL TI BIT IS SET '1'
;=============================================================================================== 

WRITE_SERIAL:
			MOV SBUF1,A				;WRITE VALUE IN ACC TO SBUF
									
TEST_TI1:
			MOV A,SCON1
			ANL A,#02H				;TEST TI1 FLAG
			JZ TEST_TI1
			MOV A,SCON1
			ANL A,#0FDH				;CLEAR TI1
			MOV SCON1,A
			;MOV A, #041H			;THESE 2 LINES ARE HERE FOR TESTING PURPOSES, COMMENT OUT FOR EXECUTION
			;JMP WRITE_SERIAL	;OF CODE IN FULL OPERATION.
RET

;=============================================================================================
;THIS SUBROUTINE TAKES A PACKET AND MOVES EACH VALUE ONE BY ONE TO THE ACCUMULATOR FROM THE DPTR,
;WHICH IS THEN SENT TO WRITE_SERIAL ROUTINE.
;=============================================================================================

WRITE_TABLE_SERIAL:
NEXT_BYTE:
    	MOVC A, @A+DPTR		;LET ACC = THE POINT THAT VALUE OF ACC POINTS TO IN DATAPOINTER
    	LCALL WRITE_SERIAL;CALL ROUTINE
    	INC DPTR					;INCREMENT DATAPOINTER TO WRITE NEXT BYTE OF CODE
			DJNZ R0,NEXT_BYTE	;LOOP R0 IF R0 =! 0
	
RET

REQUEST_CONN: DB 7EH,00H,00H,00H,01H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,01H


List of 17 messages in thread
TopicAuthorDate
Serial coms, bytes not matching in serial capture            01/01/70 00:00      
   Couple of things at first glance...            01/01/70 00:00      
      Response            01/01/70 00:00      
         OK            01/01/70 00:00      
   what does the instruction spell out            01/01/70 00:00      
      Instruction says            01/01/70 00:00      
         Got it            01/01/70 00:00      
            have a good read            01/01/70 00:00      
               Nitgen FIM5360 module            01/01/70 00:00      
                  Not familiar with the module...            01/01/70 00:00      
                     Boot up time...            01/01/70 00:00      
                     Response            01/01/70 00:00      
                        Isn't boot time always time from reset or time from power-on            01/01/70 00:00      
                           Ok            01/01/70 00:00      
                        SCON1...            01/01/70 00:00      
                           Jumping from RET to Jump Start            01/01/70 00:00      
   Please Ignore last post, issue resolved            01/01/70 00:00      

Back to Subject List