ExampleByHenrikOlsson

Works with f877, see post

Code:

'****************************************************************
'*  Name    : HWTX.BAS                                          *
'*  Author  : Henrik Olsson                                     *
'*  Notice  : Copyright (c) 2010 Henrik Olsson 2010             *
'*          : All Rights NOT Reserved - use as you see fit.     *
'*  Date    : 2010-11-16                                        *
'*  Version : 0.0                                               *
'*  Notes   : Test for interrupt based USART transmit using     *
'*          : DT_ints-18 on a 18F4520                           *
'****************************************************************
DEFINE LOADER_USED 1                ' We're using a bootloader
DEFINE OSC 20                       ' 20Mhz x-tal is used
DEFINE HSER_BAUD 38400              ' Baudrate is 38400
CMCON = 7                           ' Comparators OFF 
ADCON1 = %00001111                  ' No analog inputs
TRISC.7 = 1                         ' RxPin is input
TRISC.6 = 0                         ' TxPin is output
TRISB.0 = 1                         ' PortB.0 is input
TxBuffer VAR BYTE[128]              ' Transmit buffer array.
TxPointer VAR Byte                  ' Pointer into the above array
INCLUDE "DT_INTS-18.bas"            ' Include Darrels interrupt engine.
INCLUDE "ReEnterPBP-18.bas"         ' And the stub needed for interrupts in PBP 

ASM                                 ; Set up the USART transmit interrupt.
INT_LIST  macro     ; IntSource,   Label,    Type, ResetFlag?
        INT_Handler    TX_INT,   _USART_TX,   PBP,    no
    endm
    INT_CREATE                      ; Creates the interrupt processor
ENDASM
Boot:
  HSEROUT ["Program start",13]        ' A dummy HSEROUT here to init the USART and show we're alive.

  ' Now load the array with something we want to send. The string is, in this case, terminated with a CR (13).
  ArrayWrite TxBuffer,["This is the TX Array Buffer and we're sending it with an interupt based routine",13]

Main: 
  If PortB.0 = 0 then                 ' PortB.0 going low is what
    TxPointer = 0                     ' Initialize pointer to beginning of array
@   INT_ENABLE   TX_INT               ; Enable USART TX interrupt  
    Pause 100                         ' Simple debounce for the button
  ENDIF
  Goto Main                           ' And do it again.

USART_TX:
  TXREG = TxBuffer[TxPointer]       ' Load character from array into USART TX register
  If TxBuffer[TxPointer] = 13 then  ' If that character was a CR we're done so we.....
@   INT_DISABLE  TX_INT             ; ...disable the any further USART TX interrupts.
  ELSE                              ' If the character was not a CR we.....
    TxPointer = TxPointer + 1       ' ...increase prepare to send the next character.
  ENDIF
@ INT_RETURN                        ; And exits the interrupt.
Page last modified on March 24, 2018, at 11:46 PM