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