Serial and interrupt


Results 1 to 21 of 21

Threaded View

  1. #14
    Join Date
    Feb 2009
    Posts
    12


    Did you find this post helpful? Yes | No

    Default

    For the past few days I have been searching the net for some sample code for the soft uart - since I couldn't find anything useful that worked I ask you guys. Anyone that can point me to some site with anything useful?

    Also I found this asm code:
    Code:
    SERBUF var byte 
    TEMP var byte
    COUNTS var byte
    ASM
    ; ********************************************************************
    ; INCH ROUTINE
    ; THIS ROUTINE INPUTS RS232 DATA USING A 22K OHM RESISTOR, NO LEVEL-
    ; CHANGING INVERTER IS USED. GPIO,3 = RX (MARK = 0, SPACE = 1).
    ; THIS ROUTINE USES A 8-DATA BIT PER CHARACTER PROTOCOL.
    ; TO RECIEVE A CHARACTER, CALL inch. THE RECEIVED CHARACTER IS PLACED
    ; IN THE REG 'W' AND IN THE REG 'SERBUF'.
    ; CHARACTER WILL ECHO IF 'retlw 0' IS REM-ED OUT.
    ; VARIABLES USED: REG 'TEMP' AND REG 'SERBUF' BOTH VARIABLES ARE
    ; SHARED WITH THE 'outch' ROUTINE
    ; ROUTINES CALLED: 'half_baud' AND 'baud' FOR THE BAUD-RATE TIMING.
    ; ********************************************************************
    inch
        btfss GPIO,3 ; SKIP ON START BIT = "SPACE" (+RS232)
        goto inch ; ELSE KEEP LOOKING FOR A START BIT
        movlw d'08' ; START SERIAL INPUT SEQUENCE
        movwf _TEMP ; COLLECT 8 DATA BITS
        clrf _SERBUF ; CLEAR SERIAL CHARACTER BUFFER
        call half_baud ; DELAY FOR ONE HALF BAUD TIME
        btfss GPIO,3 ; FALL THRU IF START BIT STILL = "SPACE"
        goto inch ; ELSE IT WAS JUST A NOISE SPIKE, LOOP
    inch1
        call baud ; DELAY ONE BAUD-BIT TIME ( = 1/BAUD-RATE)
        bcf STATUS,0 ; CLEAR THE CARRY BIT
        rrf _SERBUF,F ; ROTATE CRY -> MSB, ROTATE MSB RIGHT
        btfss GPIO,3 ; IS INPUT = "SPACE" (+RS232) ?
        bsf _SERBUF,7 ; ...SKIP IF YES, ELSE SET BIT TO LOGIC '1'
        decfsz _TEMP,F ; EIGHT COUNTS YET?
        goto inch1 ; ...NO, GET ANOTHER BIT
        call baud ; DELAY FOR THE FIRST STOP BIT
        movf _SERBUF,W ; Put the character in reg 'W'
        retlw 0 ; NOTE: REM THIS OUT IF YOU NEED AN "ECHO"
        ; ...AND FALL THROUGH TO THE 'OUTCH' ROUTINE
        
    ; ********************************************************************
    ; BAUD ROUTINE @ 4 MHz
    ; BAUD RATE: CONSTANT:
    ; 1200 Baud D'137'
    ; 2400 Baud D'68'
    ; 4800 Baud D'34'
    ; 9600 Baud D'16'
    ; 19200 Baud D'8'
    ; 38400 Baud and up - use 'NOP' delays
    ; VARIABLES USED: REG 'COUNT'
    ; ROUTINES CALLED: NONE
    ; ********************************************************************
    baud            ; AT 2400 BAUD THE PERIOD IS 416.6 US
                    ; CLK = 4MHz
        movlw D'68' ; 1 US (BAUD RATE CONSTANT)
        movwf _COUNTS ; 1 US
    baud1
        decfsz _COUNTS,F ; 1 US (+ 1 US MORE IF SKIP)
        goto baud1 ; 2 US
        ; FALL THRU...AFTER 1+1+3x68+1 = 207 US
    half_baud
        movlw D'68' ; 1 US
        movwf _COUNTS ; 1 US
    hbaud1
        decfsz _COUNTS,F ; 1 US (+ 1 US MORE IF SKIP)
        goto hbaud1 ; 2 US
        retlw 0 ; ...AFTER 1+1+3x68+1 = 207 US (X2=414 US)
    ENDASM
    END
    I've tried it but I just get a "Stack underflow executing retlw". Also how do one call the inch routine from picbasic?
    Last edited by test153; - 7th February 2009 at 14:58.

Similar Threads

  1. Instant Interrupts - Revisited
    By Darrel Taylor in forum Code Examples
    Replies: 772
    Last Post: - 17th February 2016, 23:14
  2. 18F2480 asm interrupt
    By Richard Storie in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 5th March 2009, 20:40
  3. Serial and Port B interrupt
    By Pic2008 in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 6th November 2008, 17:22
  4. timer and serial interrupt
    By yourmomOS in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 14th July 2006, 19:02
  5. USART interrupt not interrupting right
    By Morpheus in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 6th March 2005, 02:07

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts