Code:
#include <p18f452.h>
#include <usart.h>
#include <delays.h>
void rx_handler (void);//declare the ISR function.HIGH
void pull_chord (void);//declare the ISR function.LOW
#define BUF_SIZE 25
/*
* Step #1 The data is allocated into its own section.
*/
#pragma idata bigdata
char data[11][BUF_SIZE+1] = {
{ "String #0\n\r" },
{ "String #1\n\r" },
{ "String #2\n\r" },
{ "String #3\n\r" },
{ "String #4\n\r" },
{ "String #5\n\r" },
{ "String #6\n\r" },
{ "String #7\n\r" },
{ "String #8\n\r" },
{ "String #9\n\r" },
{ "Invalid key (0-9 only)\n\r" }
};
#pragma idata
//location of the ISR.(HIGH)
#pragma code rx_interrupt = 0x8
void rx_int (void)
{
_asm goto rx_handler _endasm
}
#pragma code //return to default code section
//location of the ISR.(LOW)
#pragma code low_pull = 0x18
void low_pull (void)
{
_asm goto pull_chord _endasm
}
#pragma code //return to default code section
#pragma interruptlow pull_chord
void pull_chord (void)
{
/* OMG WHAT TO PUT? */
}
#pragma interrupt rx_handler
void rx_handler (void)
{
unsigned char c;
/* Get the character received from the USART */
c = ReadUSART() ;
if (c >= '0' && c <= '9')
{
c -= '0';
/* Display value received on LEDs */
PORTB = c;
//enables driver so it can transmit value to hyperterm
PORTCbits.RC5 = 1;
putsUSART (data[c]);// writes string of character from data[c]
//disables
PORTCbits.RC5 = 0;
}
else
{
//enable driver
PORTCbits.RC5 = 1;
putsUSART (data[11]);
/* Display value received on LEDs */
PORTB = c;
//disable driver
PORTCbits.RC5 = 0;
}
/* Clear the interrupt flag */
PIR1bits.RCIF = 0;
}
void main (void)
{
ADCON1 = 0x0F;
TRISCbits.TRISC5 = 0;
//LED
TRISB = 0;
OpenUSART (USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 25);
//lighting up LED at RB0
PORTCbits.RC5 = 1;
//value sent
putcUSART(0x31);//1st byte
Delay10KTCYx(50);
PORTCbits.RC5 = 0;
PORTCbits.RC5 = 1;
//value sent
putcUSART(0x41);//2nd byte
Delay10KTCYx(50);
PORTCbits.RC5 = 0;
PORTCbits.RC5 = 1;
//value sent
putcUSART(0x4f);//3rd byte
Delay10KTCYx(50);
PORTCbits.RC5 = 0;
PORTCbits.RC5 = 1;
//value sent
putcUSART(0x65);//4th byte
Delay10KTCYx(50);
PORTCbits.RC5 = 0;
/* Enable interrupt priority */
RCONbits.IPEN = 1;
/* Make receive interrupt high priority */
IPR1bits.RCIP = 1;
/* Enable all high priority interrupts */
INTCONbits.GIEH = 1;
/* Enable all low priority interrupts */
INTCONbits.GIEL = 1;
/* Loop forever */
while (1)
;
}
i am currently able to send 4 static bytes to hyperterminal via rs-485.. whereby if PORTCbits.RC5 = 1 is present, the rs-485 sending part would be activated and send the respective static hex values... and when PORTCbits.RC5 = 0, it would enable the rs-485 receiving part and would interrupt the main programme... and hence serve the interrupt...
my problem is that how do i send dynamic hex values...? do i need arrays?