Soft_UART_Write() Problems

Discuss about beta versions of mikroBasic
compiler.
Post Reply
Author
Message
xor
Posts: 5465
Joined: 18 May 2005 00:59
Location: NYC
Contact:

Soft_UART_Write() Problems

#1 Post by xor » 24 Apr 2008 21:17

As a followup to a thread in the mB forum I checked the generated ASM for Soft_UART_Write() in the Inverted Mode. I see problems with the STOPBIT. See Below:

Code: Select all

dim txt as char

main:
txt = "H"
Soft_Uart_Init(PORTE, 0,1,2400,1)
Soft_Uart_Write(txt[0])
end.



$0030	$	_soft_uart_write:

 '********  Apply Invert Mask to DATA; mask created by compiler   ********
 '******** InvertMask = 255 in This Example; So Data Is Inverted  ********
 '************************************************************************

$0030	$5015	    			MOVF	soft_uart_invertmaskrd, 0, 0
$0032	$1A1D	    			XORWF	FARG_Soft_Uart_Write, 1, 0

 '********           Load Address of TX Port Into FSR0            ********
 '************************************************************************
$0034	$0EFF	    			MOVLW	255
$0036	$1416	    			ANDWF	soft_uart_port_address, 0, 0
$0038	$6EE9	    			MOVWF	FSR0L, 0
$003A	$C017	F000			MOVFF	soft_uart_port_address+1, STACK_0
$003E	$C000	FFEA			MOVFF	STACK_0, FSR0H

 '********       Test Invert Mask & DO START BIT (Hi or Lo)       ********
 '********        START BIT Forced to High in this Example        ********
 '************************************************************************
$0042	$5015	    			MOVF	soft_uart_invertmaskrd, 0, 0
$0044	$0A00	    			XORLW	0
$0046	$E103	    			BNZ	Soft_uart_L_6
$0048	$92EF	    			BCF	INDF0, ___SOFT_UART_TX, 0
$004A	$EF28	F000			GOTO	Soft_uart_L_7
$004E	$	Soft_uart_L_6:
$004E	$82EF	    			BSF	INDF0, ___SOFT_UART_TX, 0

 '********          Call FullBit Delay After START BIT            ********
 '************************************************************************
$0050	$	Soft_uart_L_7:
$0050	$C018	F01E			MOVFF	soft_uart_fullbit, FARG_Delay_Cyc
$0054	$EC04	F000			CALL	_delay_cyc

 '********       Make TX pin = Data Bit0 Then FullBit Delay       ********
 '************************************************************************
$0058	$92EF	    			BCF	INDF0, ___SOFT_UART_TX, 0
$005A	$B01D	    			BTFSC	FARG_SOFT_UART_WRITE, 0, 0
$005C	$82EF	    			BSF	INDF0, ___SOFT_UART_TX, 0
$005E	$C018	F01E			MOVFF	soft_uart_fullbit, FARG_Delay_Cyc
$0062	$EC04	F000			CALL	_delay_cyc

 '********       Make TX pin = Data Bit1 Then FullBit Delay       ********
 '************************************************************************
$0066	$92EF	    			BCF	INDF0, ___SOFT_UART_TX, 0
$0068	$B21D	    			BTFSC	FARG_SOFT_UART_WRITE, 1, 0
$006A	$82EF	    			BSF	INDF0, ___SOFT_UART_TX, 0
$006C	$C018	F01E			MOVFF	soft_uart_fullbit, FARG_Delay_Cyc
$0070	$EC04	F000			CALL	_delay_cyc

 '********       Make TX pin = Data Bit2 Then FullBit Delay       ********
 '************************************************************************
$0074	$92EF	    			BCF	INDF0, ___SOFT_UART_TX, 0
$0076	$B41D	    			BTFSC	FARG_SOFT_UART_WRITE, 2, 0
$0078	$82EF	    			BSF	INDF0, ___SOFT_UART_TX, 0
$007A	$C018	F01E			MOVFF	soft_uart_fullbit, FARG_Delay_Cyc
$007E	$EC04	F000			CALL	_delay_cyc

 '********       Make TX pin = Data Bit3 Then FullBit Delay       ********
 '************************************************************************
$0082	$92EF	    			BCF	INDF0, ___SOFT_UART_TX, 0
;Soft_uart.ppas,184 ::
$0084	$B61D	    			BTFSC	FARG_SOFT_UART_WRITE, 3, 0
;Soft_uart.ppas,185 ::
$0086	$82EF	    			BSF	INDF0, ___SOFT_UART_TX, 0
;Soft_uart.ppas,187 ::
$0088	$C018	F01E			MOVFF	soft_uart_fullbit, FARG_Delay_Cyc
$008C	$EC04	F000			CALL	_delay_cyc

 '********       Make TX pin = Data Bit4 Then FullBit Delay       ********
 '************************************************************************
$0090	$92EF	    			BCF	INDF0, ___SOFT_UART_TX, 0
$0092	$B81D	    			BTFSC	FARG_SOFT_UART_WRITE, 4, 0
$0094	$82EF	    			BSF	INDF0, ___SOFT_UART_TX, 0
$0096	$C018	F01E			MOVFF	soft_uart_fullbit, FARG_Delay_Cyc
$009A	$EC04	F000			CALL	_delay_cyc

 '********       Make TX pin = Data Bit5 Then FullBit Delay       ********
 '************************************************************************
$009E	$92EF	    			BCF	INDF0, ___SOFT_UART_TX, 0
$00A0	$BA1D	    			BTFSC	FARG_SOFT_UART_WRITE, 5, 0
$00A2	$82EF	    			BSF	INDF0, ___SOFT_UART_TX, 0
$00A4	$C018	F01E			MOVFF	soft_uart_fullbit, FARG_Delay_Cyc
$00A8	$EC04	F000			CALL	_delay_cyc

 '********       Make TX pin = Data Bit6 Then FullBit Delay       ********
 '************************************************************************
          	    			BCF	INDF0, ___SOFT_UART_TX, 0
$00AE	$BC1D	    			BTFSC	FARG_SOFT_UART_WRITE, 6, 0
$00B0	$82EF	    			BSF	INDF0, ___SOFT_UART_TX, 0
$00B2	$C018	F01E			MOVFF	soft_uart_fullbit, FARG_Delay_Cyc
$00B6	$EC04	F000			CALL	_delay_cyc

 '********       Make TX pin = Data Bit7 Then FullBit Delay       ********
 '************************************************************************
$00BA	$92EF	    			BCF	INDF0, ___SOFT_UART_TX, 0
$00BC	$BE1D	    			BTFSC	FARG_SOFT_UART_WRITE, 7, 0
$00BE	$82EF	    			BSF	INDF0, ___SOFT_UART_TX, 0
$00C0	$C018	F01E			MOVFF	soft_uart_fullbit, FARG_Delay_Cyc
$00C4	$EC04	F000			CALL	_delay_cyc

 '********       Make TX pin = STOPBIT Then FullBit Delay         ********
 '********           STOPBIT = STARTBIT- Not Good !!              ********
 '************************************************************************
$00C8	$82EF	    			BSF	INDF0, ___SOFT_UART_TX, 0
$00CA	$C018	F01E			MOVFF	soft_uart_fullbit, FARG_Delay_Cyc
$00CE	$EC04	F000			CALL	_delay_cyc


 '********       STOPBIT value on TX Pin Inverted - Not Good !!   ********
 '********          since invertmaskwr = TX pin value             ********
 '*****************************************************************************
$00D2	$5019	    			MOVF	soft_uart_invertmaskwr, 0, 0
$00D4	$1AEF	    			XORWF	INDF0, 1, 0
$00D6	$0012	    			RETURN
[color=darkred][b]xor[/b][/color]
[url=http://circuit-ed.com]CircuitED -[/url]

User avatar
zristic
mikroElektronika team
Posts: 6608
Joined: 03 Aug 2004 12:59
Contact:

Re: Soft_UART_Write() Problems

#2 Post by zristic » 05 May 2008 07:32

We have just solved it. Thanks for the report.

Post Reply

Return to “mikroBasic Beta testing”