Using an Assmbly Routine in PBP


Results 1 to 8 of 8

Threaded View

  1. #1
    Join Date
    Jun 2005
    Posts
    20

    Default Using an Assmbly Routine in PBP

    Hi--

    I'm trying to adapt Microchip's AN1076 appnote on DMX to use as an assembly language subroutine in PBP. I'm using a PIC18F4520, 16MHz resonator, PBP 2.5a. What the code should do is initialize the LCD, read the DMX data stream, and then display the value present on DMX channel 7 on the LCD. I am feeding in a DMX signal, and I've had a PBP-coded subroutine working just fine on my hardware test board, but I need more speed. Both the SetupSerial subroutine and the DMXloop subroutine compile just fine, but when I call the DMXloop subroutine, that's the last I see of my program's execution, nothing else happens. I assume I'm jumping off into oblivion somehow... my understanding of assembly is limited, so I'd appreciate any commentary.

    Thanks in advance--

    --Alan

    Code:
        ' for PIC18F4530
    	DEFINE OSC 16   
    	INCLUDE "modedefs.bas"
    	include "LCD_defines602.pbp"
    	  
    '  ****************************************
    '  SETUP 
    '  ****************************************	
    	
    	PORTA = %00000000
    	PORTB = %00000000
    	PORTC = %00000000
    	PORTD = %00000000
        trisa = %11111101
        trisb = %01111111
        TRISC = %11101000
        trisd = %11001011
    	
    	ADCON1 = %00001111					'port a is all digital IO
    	CMCON = 7                           'and turn off those pesky comparators
    	RBPUx			VAR	INTCON2.7	    'port b pull-ups 1 = disabled 0 = enabled
    	RBPUx = 0
    	trise.4 =%0                         'disable PSP port
        	
    ' ===================================
    ' define hardware pins:
    ' ===================================
    	
    	BKLT            var portd.5         'LCD backlight
        
    ' ================================	
    '	define constants & variables:
    ' ================================
    
        DMXrxbuffer     var byte[512]
        CountH          var byte
        CountL          var byte
        count0          var byte
    
        
    '  ****************************************
    '  INITIALIZATION
    '  ****************************************
    init:
            call SetupSerial    'set up USART and clear DMXrxbuffer
            
    '  ****************************************
    '  MAIN LOOP
    '  ****************************************
    
    begin:	low bklt                        'turn on backlight
            pause 125                       'pause to let LCD initialize
            lcdout $fe,1                    'clear screen        
            LCDout "  test routine   "       'display splashscreen
            lcdout $fe,$c0,"S/W Version 6xxx"
            pause 1200
    
    
    low bklt
    
    mainloop:
    
    
        Call DMXloop
        lcdout $fe,1
        pause 3
        lcdout dec DMXrxbuffer[7]
        pause 300
        
    goto mainloop
    
    
    asm
    
    _DMXloop
    	
    ; first loop, synchronizing with the transmitter
    _WaitBreak
    	btfsc	PIR1,RCIF           ; if a byte is received correctly
    	movf	RCREG,W             ; discard it
    	btfss	RCSTA,FERR			; else 
    	bra		_WaitBreak          ; continue waiting until a frame error is detected
    	movf	RCREG,W				; read the Receive buffer to clear the error condition
    
    ; second loop, waiting for the START code
    _WaitForStart
    	btfss	PIR1,RCIF			; wait until a byte is correctly received
    	bra		_WaitForStart
    	btfsc	RCSTA,FERR
    	bra		_WaitForStart
    	movf	RCREG,W	
    
    ; check for the START code value, if it is not 0, ignore the rest of the frame
        andlw   0xff
        bnz     _DMXloop             ; ignore the rest of the frame if not zero 
    
    ; init receive counter and buffer pointer        
        clrf    _CountL
        clrf    _CountH
        lfsr    0,_DMXrxbuffer
    
    ; third loop, receiving 512 bytes of data
    _WaitForData
        btfsc   RCSTA,FERR          ; if a new framing error is detected (error or short frame)
        bra     _RXend              ; the rest of the frame is ignored and a new synchronization
        							; is attempted
    
    	btfss	PIR1,RCIF			; wait until a byte is correctly received
    	bra		_WaitForData	    ;
    	movf	RCREG,W				; 
    
    _MoveData
    	movwf	POSTINC0			; move the received data to the buffer 
                                    ; (auto-incrementing pointer)
    	incf	_CountL,F           ; increment 16-bit counter
    	btfss	STATUS,C
    	bra		_WaitForData
    	incf	_CountH,F
    
    	btfss	_CountH,1            ; check if 512 bytes of data received
    	bra		_WaitForData
    
    _RXend	
    	return
    
    ;****************************************************************
    
    ; Setup Serial port and buffers
    _SetupSerial
    
    ;Clear the receive buffer
    	lfsr	0,_DMXrxbuffer
    _CBloop
    	clrf	POSTINC0	    ; clear INDF register then increment pointer
    	incf	_CountL,F
    	btfss	STATUS,C
    	bra		_CBloop
    	incf	_CountH,F
    
    	btfss	_CountH,1
    	bra		_CBloop	
    
    ; Setup EUSART
    	bsf		TRISC,7         ; allow the EUSART RX to control pin RC7
    	bsf		TRISC,6         ; allow the EUSART TX to control pin RC6
    
    	movlw	0x04			; Disable transmission
    	movwf	TXSTA			; enable transmission and CLEAR high baud rate
    
    	movlw	0x90
    	movwf	RCSTA			; enable serial port and reception
    
    	bsf		BAUDCON,BRG16	; Enable UART for 16-bit Asyn operation
    	clrf	SPBRGH
    
    	movlw	.15				; Baud rate is 250KHz for 16MHz Osc. freq.
    	movwf	SPBRG	
    
    	return
    
    endasm
    Last edited by alanmcf; - 1st August 2008 at 01:27.

Similar Threads

  1. PBP Book
    By Bruce in forum Off Topic
    Replies: 83
    Last Post: - 4th October 2021, 12:55
  2. PBP, ASM and LST files
    By HenrikOlsson in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 12th January 2010, 13:43
  3. Compiler differences between PBP 2.33 & 2.46
    By nikopolis in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 2nd May 2006, 19:01
  4. Newby- PBP wont compile for 18F (MPLAB)
    By jd76duke in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 17th December 2005, 23:30
  5. Replies: 2
    Last Post: - 8th August 2004, 16:00

Members who have read this thread : 1

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