#include "UARTIntC.h"
// target specific file will go here
#include <p18f4620.h>
// status flags of receive and transmit buffers
struct status vUARTIntStatus;
// variable definitions
#if TXON
unsigned char vUARTIntTxBuffer[TX_BUFFER_SIZE];
unsigned char vUARTIntTxBufDataCnt;
unsigned char vUARTIntTxBufWrPtr;
unsigned char vUARTIntTxBufRdPtr;
#endif
#if RXON
unsigned char vUARTIntRxBuffer[RX_BUFFER_SIZE];
unsigned char vUARTIntRxBufDataCnt;
unsigned char vUARTIntRxBufWrPtr;
unsigned char vUARTIntRxBufRdPtr;
#endif
/*********************************************************************
* Function: void UARTIntInit(void)
* PreCondition: None
* Input: None
* Output: None
* Side Effects: None
* Stack Requirements: 1 level deep
* Overview: This function initialises UART peripheral.This
* function need to be called before using
* UARTIntPutChar and UARTIntGetChar functions to
* send and receive the characters.
********************************************************************/
void UARTIntInit(void)
{
// Intialising the status variables and circular buffer
// variables .
#if TXON
vUARTIntStatus.UARTIntTxBufferFull = 0;
vUARTIntStatus.UARTIntTxBufferEmpty = 1;
vUARTIntTxBufDataCnt = 0;
vUARTIntTxBufWrPtr = 0;
vUARTIntTxBufRdPtr = 0;
#endif
#if RXON
vUARTIntStatus.UARTIntRxBufferFull = 0;
vUARTIntStatus.UARTIntRxBufferEmpty = 1;
vUARTIntStatus.UARTIntRxError = 0;
vUARTIntStatus.UARTIntRxOverFlow = 0;
vUARTIntRxBufDataCnt = 0;
vUARTIntRxBufWrPtr = 0;
vUARTIntRxBufRdPtr = 0;
#endif
/* Initialising BaudRate value */
SPBRG = SPBRG_VAL;
TXSTAbits.BRGH = BRGH_VAL;
/* Initialising TX/RX port pins */
#if TXON
TRISCbits.TRISC6 = 0;
#endif
#if RXON
TRISCbits.TRISC7 = 1;
#endif
/* Setting priority */
#if TX_PRIORITY_ON
RCONbits.IPEN = 1;
IPR1bits.TXIP = 1;
#else
IPR1bits.TXIP = 0;
#endif
#if RX_PRIORITY_ON
RCONbits.IPEN = 1;
IPR1bits.RCIP = 1;
#else
IPR1bits.RCIP = 0;
#endif
/* Enabling Transmitter or Receiver */
#if TXON
TXSTAbits.TXEN = 1;
#endif
#if RXON
RCSTAbits.CREN = 1;
#endif
/* Enabling Serial Port */
RCSTAbits.SPEN = 1;
/* Enable the TX and RX. Interrupt */
#if TXON
PIE1bits.TXIE = 1;
#endif
#if RXON
PIE1bits.RCIE = 1;
#endif
/* Setting Global interrupt pins */
#if ((TX_PRIORITY_ON)|(RX_PRIORITY_ON))
INTCONbits.GIEH = 1;
INTCONbits.GIEL = 1;
#else
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;
#endif
}
/*********************************************************************
* Function: unsigned char UARTIntPutChar(unsigned char)
* PreCondition: UARTIntInit()function should have been called.
* Input: unsigned char
* Output: unsigned char
* 0 - single character is successfully
* added to transmit buffer.
* 1 - transmit buffer is full and the
* character could not be added to
* transmit buffer.
*
* Side Effects: None
* Stack Requirements: 1 level deep
* Overview: This function puts the data in to transmit
* buffer. Internal implementation wise ,
* it places the argument data in transmit buffer
* and updates the data count and write pointer
* variables.
*
********************************************************************/
#if TXON
unsigned char UARTIntPutChar(unsigned char chCharData)
{
/* check if its full , if not add one */
/* if not busy send data */
if(vUARTIntStatus.UARTIntTxBufferFull)
return 0;
//critical code , disable interrupts
PIE1bits.TXIE = 0;
vUARTIntTxBuffer[vUARTIntTxBufWrPtr] = chCharData;
vUARTIntStatus.UARTIntTxBufferEmpty = 0;
vUARTIntTxBufDataCnt ++;
if(vUARTIntTxBufDataCnt == TX_BUFFER_SIZE)
vUARTIntStatus.UARTIntTxBufferFull = 1;
vUARTIntTxBufWrPtr++;
if(vUARTIntTxBufWrPtr == TX_BUFFER_SIZE)
vUARTIntTxBufWrPtr = 0;
PIE1bits.TXIE = 1;
return 1;
}
/*********************************************************************
* Function: unsigned char UARTIntGetTxBufferEmptySpace(void)
* PreCondition: UARTIntInit()function should have been called.
* Input: None
* Output: unsigned char
* 0 - There is no empty space in
* transmit buffer.
* number - the number of bytes of empty
* space in transmit buffer.
*
*
* Side Effects: None
* Stack Requirements: 1 level deep
* Overview: This function returns the number of bytes
* of free space left out in transmit buffer at
* the calling time of this function. It helps
* the user to further write data in to transmit
* buffer at once, rather than checking transmit
* buffer is full or not with every addition of
* data in to the transmit buffer.
********************************************************************/
unsigned char UARTIntGetTxBufferEmptySpace(void)
{
if(vUARTIntTxBufDataCnt < TX_BUFFER_SIZE)
return(TX_BUFFER_SIZE-vUARTIntTxBufDataCnt);
else
return 0;
}
#endif
/*********************************************************************
* Function: unsigned char UARTIntGetChar(unsigned char*)
* PreCondition: UARTIntInit()function should have been called.
* Input: unsigned char*
* Output: unsigned char
* 0 - receive buffer is empty and the
* character could not be read from
* the receive buffer.
* 1 - single character is successfully
* read from receive buffer.
* Side Effects: None
* Stack Requirements: 1 level deep
* Overview: This function reads the data from the receive
* buffer. It places the data in to argument and
* updates the data count and read pointer
* variables of receive buffer.
*
********************************************************************/
#if RXON
unsigned char UARTIntGetChar(unsigned char *chTemp)
{
if( vUARTIntStatus.UARTIntRxBufferEmpty)
return 0;
//critical code, disabling interrupts here keeps the
//access pointer values proper.
PIE1bits.RCIE = 0;
vUARTIntStatus.UARTIntRxBufferFull = 0;
*chTemp = vUARTIntRxBuffer[vUARTIntRxBufRdPtr];
vUARTIntRxBufDataCnt--;
if(vUARTIntRxBufDataCnt == 0 )
vUARTIntStatus.UARTIntRxBufferEmpty = 1;
vUARTIntRxBufRdPtr++;
if(vUARTIntRxBufRdPtr == RX_BUFFER_SIZE)
vUARTIntRxBufRdPtr = 0;
PIE1bits.RCIE = 1;
return 1;
}
/*********************************************************************
* Function: unsigned char UARTIntGetRxBufferDataSize(void)
* PreCondition: UARTIntInit()function should have been called.
* Input: None
* Output: unsigned char
* number - the number of bytes
* of data in receive buffer.
* Side Effects: None
* Stack Requirements: 1 level deep
* Overview: This function returns the number of bytes
* of data available in receive buffer at
* the calling time of this function. It helps
* the user to read data from receive buffer
* at once, rather than checking receive buffer
* is empty or not with every read of data from
* receive buffer.
********************************************************************/
unsigned char UARTIntGetRxBufferDataSize(void)
{
return vUARTIntRxBufDataCnt;
}
#endif
/*********************************************************************
* Function: void UARTIntISR(void)
* PreCondition: UARTIntInit() function should have been called.
* Input: None
* Output: None
* Side Effects: None
* Stack Requirements: 2 level deep
* Overview: This is the Interrupt service routine which is
* called in the user application's ISR portion.
* This function actually sends the data from
* transmit buffer to USART and updates the data
* count and read pointer variables of transmit
* buffer. For the receive portion, it reads the
* data from USART and places the data in to
* receive buffer (if no errors occured) and
* updates data count and write pointer variables
* of receive buffer. If the receive buffer is
* full and it receives more data error flag is
* set.If frame errors(FERR) occur it sets the
* error flag. If over flow errors(OERR) occurs,
* it clears and sets the CREN bit, so that
* USART can receive further data.
********************************************************************/
void UARTIntISR(void)
{
#if RXON
unsigned char chTemp;
#endif
#if TXON
if(PIR1bits.TXIF & PIE1bits.TXIE)
{
if(!vUARTIntStatus.UARTIntTxBufferEmpty)
{
TXREG = vUARTIntTxBuffer[vUARTIntTxBufRdPtr];
if(vUARTIntStatus.UARTIntTxBufferFull)
vUARTIntStatus.UARTIntTxBufferFull = 0;
vUARTIntTxBufDataCnt--;
if(vUARTIntTxBufDataCnt == 0)
vUARTIntStatus.UARTIntTxBufferEmpty = 1;
vUARTIntTxBufRdPtr++;
if(vUARTIntTxBufRdPtr == TX_BUFFER_SIZE)
vUARTIntTxBufRdPtr = 0;
}
else
{
PIE1bits.TXIE = 0;
}
}
#endif
#if TXON_AND_RXON
else if( PIR1bits.RCIF & PIE1bits.RCIE)
#elif TXOFF_AND_RXON
if( PIR1bits.RCIF & PIE1bits.RCIE)
#endif
#if RXON
{
if(RCSTAbits.FERR) /* FERR error condition */
{
chTemp = RCREG;
vUARTIntStatus.UARTIntRxError = 1;
}
else if (RCSTAbits.OERR) /* OERR error condition */
{
RCSTAbits.CREN = 0;
RCSTAbits.CREN = 1;
chTemp = RCREG;
vUARTIntStatus.UARTIntRxError = 1;
}
else if ( vUARTIntStatus.UARTIntRxBufferFull)
{
chTemp = RCREG;
vUARTIntStatus.UARTIntRxOverFlow = 1;
}
else if(!vUARTIntStatus.UARTIntRxBufferFull)
{
vUARTIntStatus.UARTIntRxOverFlow = 0;
vUARTIntStatus.UARTIntRxBufferEmpty = 0;
vUARTIntRxBuffer[vUARTIntRxBufWrPtr] = RCREG;
vUARTIntRxBufDataCnt ++;
if(vUARTIntRxBufDataCnt == RX_BUFFER_SIZE)
vUARTIntStatus.UARTIntRxBufferFull = 1;
vUARTIntRxBufWrPtr++;
if(vUARTIntRxBufWrPtr == RX_BUFFER_SIZE)
vUARTIntRxBufWrPtr = 0;
}
}
#endif
}
#include "UARTIntC.h"
#include <p18fxxx.h>
void main (void)
{
SPBRG=15 // setup the USART for 19200 baud @ 20 MHz
TXSTA = 0x20; // setup USART transmit
RCSTA = 0x90; // setup USART receive
IPR1bits.TXIP = 1; // Use high priority interrupt
UARTIntISR(); // call of library module function
UARTIntInit(); // call of library module
INTCONbits.PEIE = 1; // Enable peripheral interrupts
INTCONbits.GIE = 1; // Enable all interrupts
}
/*********************************************************************
* Function: void UART_ISR(void)
*
* PreCondition: UART interrupt has occured
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: None
*
* Note: This function is supposed to be called in the ISR
* context.
********/
void UART_ISR(void)
{
// NOTE: All local variables used here should be declared static
static BYTE rxdata;
while (1) // loop forever
{
if(PIR1bits.RCIF) // Check for USART interrupt
{
rxdata = RCREG; // Get the byte
PIR1bits.RCIF = 0; // Clear the interrupt flag so we don't keep entering this ISR
// Copy the byte into the local FIFO, if it won't cause an overflow
if(RXHeadPtr != RXTailPtr - 1)
{
if((RXHeadPtr != vUARTRXFIFO + sizeof(vUARTRXFIFO)) || (RXTailPtr != vUARTRXFIFO))
{
*RXHeadPtr++ = i;
if(RXHeadPtr >= vUARTRXFIFO + sizeof(vUARTRXFIFO))
RXHeadPtr = vUARTRXFIFO;
}
}
}
}
}
# Exported from MPLAB IDE project `JuneBugDemoP.mcp' on Wed Feb 06 14:56:24 2008.
"JuneBugDemoP.cof" : "demo3.o"
"C:\MCC18\bin\mplink.exe" /l"C:\MCC18\lib" "C:\MCC18\lkr\18f1320i.lkr" "G:\CCS\LESSONS\JuneBugDemo\demo3.o" /o"JuneBugDemoP.cof" /M"JuneBugDemoP.map" /W
"demo3.o" : "demo3.c" "G:\CCS\LESSONS\JuneBugDemo\demo3.c" "C:\MCC18\h\p18f1320.h"
"C:\MCC18\bin\mcc18.exe" -p=18F1320 "demo3.c" -fo="demo3.o" -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
clean :
del "demo3.o" "JuneBugDemoP.cof" "JuneBugDemoP.cod" "JuneBugDemoP.hex" "JuneBugDemoP.lst"
"demo3.o" : "demo3.c" "G:\CCS\LESSONS\JuneBugDemo\demo3.c" "C:\MCC18\h\p18f1320.h"
# Exported from MPLAB IDE project `test 2.mcp' on Tue Feb 19 12:08:45 2008.
"test 2.lib" : "UARTIntC.o"
"C:\Program Files\Microchip\MPASM Suite\mplib.exe" /c "test 2.lib" "C:\Documents and Settings\Khan\Desktop\project ISR\UARTIntC.o"
"UARTIntC.o" : "UARTIntC.c" "C:\Documents and Settings\Khan\Desktop\project ISR\UARTIntC.c" "C:\Documents and Settings\Khan\Desktop\project ISR\UARTIntC.h" "C:\Documents and Settings\Khan\Desktop\project ISR\UARTIntC.c" "C:\Documents and Settings\Khan\Desktop\project ISR\UARTIntC.def" "C:\MCC18\h\p18f4620.h"
"C:\MCC18\bin\mcc18.exe" -p=18F4620 "UARTIntC.c" -fo="C:\DOCUME~1\Khan\Desktop\PROJEC~1\UARTIntC.o" -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
clean :
del "UARTIntC.o" "test 2.lib"
sohagiut said:i just change the position #include "UARTIntC.h" after #include <p18f4620.h>.
surprisingly get 'BUILD SUCCEEDED'
thanks a lot
part 1:
#ifndef __18F4620_H
#define __18F4620_H
extern volatile near unsigned char PORTA;
extern volatile near union {
struct {
unsigned RA0:1;
unsigned RA1:1;
unsigned RA2:1;
unsigned RA3:1;
unsigned RA4:1;
unsigned RA5:1;
unsigned RA6:1;
unsigned RA7:1;
};
struct {
unsigned :4;
unsigned T0CKI:1;
unsigned AN4:1;
};
struct {
unsigned :5;
unsigned SS:1;
};
struct {
unsigned :5;
unsigned NOT_SS:1;
};
struct {
unsigned :5;
unsigned LVDIN:1;
};
struct {
unsigned :5;
unsigned HLVDIN:1;
};
} PORTAbits;
extern volatile near unsigned char PORTB;
extern volatile near union {
struct {
unsigned RB0:1;
unsigned RB1:1;
unsigned RB2:1;
unsigned RB3:1;
unsigned RB4:1;
unsigned RB5:1;
unsigned RB6:1;
unsigned RB7:1;
};
struct {
unsigned INT0:1;
unsigned INT1:1;
unsigned INT2:1;
unsigned CCP2:1;
unsigned KBI0:1;
unsigned KBI1:1;
unsigned KBI2:1;
unsigned KBI3:1;
};
struct {
unsigned AN12:1;
unsigned AN10:1;
unsigned AN8:1;
unsigned AN9:1;
unsigned AN11:1;
unsigned PGM:1;
unsigned PGC:1;
unsigned PGD:1;
};
} PORTBbits;
extern volatile near unsigned char PORTC;
extern volatile near union {
struct {
unsigned RC0:1;
unsigned RC1:1;
unsigned RC2:1;
unsigned RC3:1;
unsigned RC4:1;
unsigned RC5:1;
unsigned RC6:1;
unsigned RC7:1;
};
struct {
unsigned T1OSO:1;
unsigned T1OSI:1;
unsigned CCP1:1;
unsigned SCK:1;
unsigned SDI:1;
unsigned SDO:1;
unsigned TX:1;
unsigned RX:1;
};
struct {
unsigned T13CKI:1;
unsigned CCP2:1;
unsigned :1;
unsigned SCL:1;
unsigned SDA:1;
unsigned :1;
unsigned CK:1;
unsigned DT:1;
};
struct {
unsigned T1CKI:1;
};
} PORTCbits;
extern volatile near unsigned char PORTD;
extern volatile near union {
struct {
unsigned RD0:1;
unsigned RD1:1;
unsigned RD2:1;
unsigned RD3:1;
unsigned RD4:1;
unsigned RD5:1;
unsigned RD6:1;
unsigned RD7:1;
};
struct {
unsigned PSP0:1;
unsigned PSP1:1;
unsigned PSP2:1;
unsigned PSP3:1;
unsigned PSP4:1;
unsigned PSP5:1;
unsigned PSP6:1;
unsigned PSP7:1;
};
struct {
unsigned :5;
unsigned P1B:1;
unsigned P1C:1;
unsigned P1D:1;
};
} PORTDbits;
extern volatile near unsigned char PORTE;
extern volatile near union {
struct {
unsigned RE0:1;
unsigned RE1:1;
unsigned RE2:1;
unsigned RE3:1;
};
struct {
unsigned RD:1;
unsigned WR:1;
unsigned CS:1;
unsigned MCLR:1;
};
struct {
unsigned NOT_RD:1;
unsigned NOT_WR:1;
unsigned NOT_CS:1;
unsigned NOT_MCLR:1;
};
struct {
unsigned AN5:1;
unsigned AN6:1;
unsigned AN7:1;
unsigned VPP:1;
};
} PORTEbits;
extern volatile near unsigned char LATA;
extern volatile near struct {
unsigned LATA0:1;
unsigned LATA1:1;
unsigned LATA2:1;
unsigned LATA3:1;
unsigned LATA4:1;
unsigned LATA5:1;
unsigned LATA6:1;
unsigned LATA7:1;
} LATAbits;
extern volatile near unsigned char LATB;
extern volatile near struct {
unsigned LATB0:1;
unsigned LATB1:1;
unsigned LATB2:1;
unsigned LATB3:1;
unsigned LATB4:1;
unsigned LATB5:1;
unsigned LATB6:1;
unsigned LATB7:1;
} LATBbits;
extern volatile near unsigned char LATC;
extern volatile near struct {
unsigned LATC0:1;
unsigned LATC1:1;
unsigned LATC2:1;
unsigned LATC3:1;
unsigned LATC4:1;
unsigned LATC5:1;
unsigned LATC6:1;
unsigned LATC7:1;
} LATCbits;
extern volatile near unsigned char LATD;
extern volatile near struct {
unsigned LATD0:1;
unsigned LATD1:1;
unsigned LATD2:1;
unsigned LATD3:1;
unsigned LATD4:1;
unsigned LATD5:1;
unsigned LATD6:1;
unsigned LATD7:1;
} LATDbits;
extern volatile near unsigned char LATE;
extern volatile near struct {
unsigned LATE0:1;
unsigned LATE1:1;
unsigned LATE2:1;
} LATEbits;
extern volatile near unsigned char DDRA;
extern volatile near struct {
unsigned RA0:1;
unsigned RA1:1;
unsigned RA2:1;
unsigned RA3:1;
unsigned RA4:1;
unsigned RA5:1;
unsigned RA6:1;
unsigned RA7:1;
} DDRAbits;
extern volatile near unsigned char TRISA;
extern volatile near struct {
unsigned TRISA0:1;
unsigned TRISA1:1;
unsigned TRISA2:1;
unsigned TRISA3:1;
unsigned TRISA4:1;
unsigned TRISA5:1;
unsigned TRISA6:1;
unsigned TRISA7:1;
} TRISAbits;
extern volatile near unsigned char DDRB;
extern volatile near struct {
unsigned RB0:1;
unsigned RB1:1;
unsigned RB2:1;
unsigned RB3:1;
unsigned RB4:1;
unsigned RB5:1;
unsigned RB6:1;
unsigned RB7:1;
} DDRBbits;
extern volatile near unsigned char TRISB;
extern volatile near struct {
unsigned TRISB0:1;
unsigned TRISB1:1;
unsigned TRISB2:1;
unsigned TRISB3:1;
unsigned TRISB4:1;
unsigned TRISB5:1;
unsigned TRISB6:1;
unsigned TRISB7:1;
} TRISBbits;
extern volatile near unsigned char DDRC;
extern volatile near struct {
unsigned RC0:1;
unsigned RC1:1;
unsigned RC2:1;
unsigned RC3:1;
unsigned RC4:1;
unsigned RC5:1;
unsigned RC6:1;
unsigned RC7:1;
} DDRCbits;
extern volatile near unsigned char TRISC;
extern volatile near struct {
unsigned TRISC0:1;
unsigned TRISC1:1;
unsigned TRISC2:1;
unsigned TRISC3:1;
unsigned TRISC4:1;
unsigned TRISC5:1;
unsigned TRISC6:1;
unsigned TRISC7:1;
} TRISCbits;
extern volatile near unsigned char DDRD;
extern volatile near struct {
unsigned RD0:1;
unsigned RD1:1;
unsigned RD2:1;
unsigned RD3:1;
unsigned RD4:1;
unsigned RD5:1;
unsigned RD6:1;
unsigned RD7:1;
} DDRDbits;
extern volatile near unsigned char TRISD;
extern volatile near struct {
unsigned TRISD0:1;
unsigned TRISD1:1;
unsigned TRISD2:1;
unsigned TRISD3:1;
unsigned TRISD4:1;
unsigned TRISD5:1;
unsigned TRISD6:1;
unsigned TRISD7:1;
} TRISDbits;
extern volatile near unsigned char DDRE;
extern volatile near struct {
unsigned RE0:1;
unsigned RE1:1;
unsigned RE2:1;
unsigned RE3:1;
} DDREbits;
extern volatile near unsigned char TRISE;
extern volatile near union {
struct {
unsigned TRISE0:1;
unsigned TRISE1:1;
unsigned TRISE2:1;
};
struct {
unsigned :4;
unsigned PSPMODE:1;
unsigned IBOV:1;
unsigned OBF:1;
unsigned IBF:1;
};
} TRISEbits;
extern volatile near unsigned char OSCTUNE;
extern volatile near struct {
unsigned TUN0:1;
unsigned TUN1:1;
unsigned TUN2:1;
unsigned TUN3:1;
unsigned TUN4:1;
unsigned :1;
unsigned PLLEN:1;
unsigned INTSRC:1;
} OSCTUNEbits;
extern volatile near unsigned char PIE1;
extern volatile near struct {
unsigned TMR1IE:1;
unsigned TMR2IE:1;
unsigned CCP1IE:1;
unsigned SSPIE:1;
unsigned TXIE:1;
unsigned RCIE:1;
unsigned ADIE:1;
unsigned PSPIE:1;
} PIE1bits;
extern volatile near unsigned char PIR1;
extern volatile near struct {
unsigned TMR1IF:1;
unsigned TMR2IF:1;
unsigned CCP1IF:1;
unsigned SSPIF:1;
unsigned TXIF:1;
unsigned RCIF:1;
unsigned ADIF:1;
unsigned PSPIF:1;
} PIR1bits;
extern volatile near unsigned char IPR1;
extern volatile near struct {
unsigned TMR1IP:1;
unsigned TMR2IP:1;
unsigned CCP1IP:1;
unsigned SSPIP:1;
unsigned TXIP:1;
unsigned RCIP:1;
unsigned ADIP:1;
unsigned PSPIP:1;
} IPR1bits;
extern volatile near unsigned char PIE2;
extern volatile near union {
struct {
unsigned CCP2IE:1;
unsigned TMR3IE:1;
unsigned LVDIE:1;
unsigned BCLIE:1;
unsigned EEIE:1;
unsigned :1;
unsigned CMIE:1;
unsigned OSCFIE:1;
};
struct {
unsigned :2;
unsigned HLVDIE:1;
};
} PIE2bits;
extern volatile near unsigned char PIR2;
extern volatile near union {
struct {
unsigned CCP2IF:1;
unsigned TMR3IF:1;
unsigned LVDIF:1;
unsigned BCLIF:1;
unsigned EEIF:1;
unsigned :1;
unsigned CMIF:1;
unsigned OSCFIF:1;
};
struct {
unsigned :2;
unsigned HLVDIF:1;
};
} PIR2bits;
extern volatile near unsigned char IPR2;
extern volatile near union {
struct {
unsigned CCP2IP:1;
unsigned TMR3IP:1;
unsigned LVDIP:1;
unsigned BCLIP:1;
unsigned EEIP:1;
unsigned :1;
unsigned CMIP:1;
unsigned OSCFIP:1;
};
struct {
unsigned :2;
unsigned HLVDIP:1;
};
} IPR2bits;
extern volatile near unsigned char EECON1;
extern volatile near struct {
unsigned RD:1;
unsigned WR:1;
unsigned WREN:1;
unsigned WRERR:1;
unsigned FREE:1;
unsigned :1;
unsigned CFGS:1;
unsigned EEPGD:1;
} EECON1bits;
extern volatile near unsigned char EECON2;
extern volatile near unsigned char EEDATA;
extern volatile near unsigned char EEADR;
extern volatile near unsigned char EEADRH;
extern volatile near unsigned char RCSTA;
extern volatile near union {
struct {
unsigned RX9D:1;
unsigned OERR:1;
unsigned FERR:1;
unsigned ADEN:1;
unsigned CREN:1;
unsigned SREN:1;
unsigned RX9:1;
unsigned SPEN:1;
};
struct {
unsigned :3;
unsigned ADDEN:1;
};
} RCSTAbits;
extern volatile near unsigned char TXSTA;
extern volatile near struct {
unsigned TX9D:1;
unsigned TRMT:1;
unsigned BRGH:1;
unsigned SENDB:1;
unsigned SYNC:1;
unsigned TXEN:1;
unsigned TX9:1;
unsigned CSRC:1;
} TXSTAbits;
extern volatile near unsigned char TXREG;
extern volatile near unsigned char RCREG;
extern volatile near unsigned char SPBRG;
extern volatile near unsigned char SPBRGH;
extern volatile near unsigned char T3CON;
extern volatile near union {
struct {
unsigned TMR3ON:1;
unsigned TMR3CS:1;
unsigned T3SYNC:1;
unsigned T3CCP1:1;
unsigned T3CKPS0:1;
unsigned T3CKPS1:1;
unsigned T3CCP2:1;
unsigned RD16:1;
};
struct {
unsigned :2;
unsigned NOT_T3SYNC:1;
};
} T3CONbits;
extern volatile near unsigned char TMR3L;
extern volatile near unsigned char TMR3H;
extern volatile near unsigned char CMCON;
extern volatile near struct {
unsigned CM0:1;
unsigned CM1:1;
unsigned CM2:1;
unsigned CIS:1;
unsigned C1INV:1;
unsigned C2INV:1;
unsigned C1OUT:1;
unsigned C2OUT:1;
} CMCONbits;
extern volatile near unsigned char CVRCON;
extern volatile near struct {
unsigned CVR0:1;
unsigned CVR1:1;
unsigned CVR2:1;
unsigned CVR3:1;
unsigned CVRSS:1;
unsigned CVRR:1;
unsigned CVROE:1;
unsigned CVREN:1;
} CVRCONbits;
extern volatile near unsigned char ECCP1AS;
extern volatile near struct {
unsigned PSSBD0:1;
unsigned PSSBD1:1;
unsigned PSSAC0:1;
unsigned PSSAC1:1;
unsigned ECCPAS0:1;
unsigned ECCPAS1:1;
unsigned ECCPAS2:1;
unsigned ECCPASE:1;
} ECCP1ASbits;
extern volatile near unsigned char PWM1CON;
extern volatile near struct {
unsigned PDC0:1;
unsigned PDC1:1;
unsigned PDC2:1;
unsigned PDC3:1;
unsigned PDC4:1;
unsigned PDC5:1;
unsigned PDC6:1;
unsigned PRSEN:1;
} PWM1CONbits;
extern volatile near unsigned char BAUDCON;
extern volatile near struct {
unsigned ABDEN:1;
unsigned WUE:1;
unsigned :1;
unsigned BRG16:1;
unsigned SCKP:1;
unsigned :1;
unsigned RCIDL:1;
unsigned ABDOVF:1;
} BAUDCONbits;
extern volatile near unsigned char BAUDCTL;
extern volatile near struct {
unsigned ABDEN:1;
unsigned WUE:1;
unsigned :1;
unsigned BRG16:1;
unsigned SCKP:1;
unsigned :1;
unsigned RCIDL:1;
unsigned ABDOVF:1;
} BAUDCTLbits;
extern volatile near unsigned char CCP2CON;
extern volatile near union {
struct {
unsigned CCP2M0:1;
unsigned CCP2M1:1;
unsigned CCP2M2:1;
unsigned CCP2M3:1;
unsigned CCP2Y:1;
unsigned CCP2X:1;
};
struct {
unsigned :4;
unsigned DC2B0:1;
unsigned DC2B1:1;
};
} CCP2CONbits;
extern volatile near unsigned CCPR2;
extern volatile near unsigned char CCPR2L;
extern volatile near unsigned char CCPR2H;
extern volatile near unsigned char CCP1CON;
extern volatile near union {
struct {
unsigned CCP1M0:1;
unsigned CCP1M1:1;
unsigned CCP1M2:1;
unsigned CCP1M3:1;
unsigned CCP1Y:1;
unsigned CCP1X:1;
};
struct {
unsigned :4;
unsigned DC1B0:1;
unsigned DC1B1:1;
};
} CCP1CONbits;
extern volatile near unsigned CCPR1;
extern volatile near unsigned char CCPR1L;
extern volatile near unsigned char CCPR1H;
extern volatile near unsigned char ADCON2;
extern volatile near struct {
unsigned ADCS0:1;
unsigned ADCS1:1;
unsigned ADCS2:1;
unsigned ACQT0:1;
unsigned ACQT1:1;
unsigned ACQT2:1;
unsigned :1;
unsigned ADFM:1;
} ADCON2bits;
extern volatile near unsigned char ADCON1;
extern volatile near struct {
unsigned PCFG0:1;
unsigned PCFG1:1;
unsigned PCFG2:1;
unsigned PCFG3:1;
unsigned VCFG0:1;
unsigned VCFG1:1;
} ADCON1bits;
extern volatile near unsigned char ADCON0;
extern volatile near union {
struct {
unsigned ADON:1;
unsigned GO:1;
unsigned CHS0:1;
unsigned CHS1:1;
unsigned CHS2:1;
unsigned CHS3:1;
};
struct {
unsigned :1;
unsigned DONE:1;
};
struct {
unsigned :1;
unsigned NOT_DONE:1;
};
struct {
unsigned :1;
unsigned GO_DONE:1;
};
} ADCON0bits;
extern volatile near unsigned ADRES;
extern volatile near unsigned char ADRESL;
extern volatile near unsigned char ADRESH;
extern volatile near unsigned char SSPCON2;
extern volatile near struct {
unsigned SEN:1;
unsigned RSEN:1;
unsigned PEN:1;
unsigned RCEN:1;
unsigned ACKEN:1;
unsigned ACKDT:1;
unsigned ACKSTAT:1;
unsigned GCEN:1;
} SSPCON2bits;
extern volatile near unsigned char SSPCON1;
extern volatile near struct {
unsigned SSPM0:1;
unsigned SSPM1:1;
unsigned SSPM2:1;
unsigned SSPM3:1;
unsigned CKP:1;
unsigned SSPEN:1;
unsigned SSPOV:1;
unsigned WCOL:1;
} SSPCON1bits;
part 2
extern volatile near unsigned char SSPSTAT;
extern volatile near union {
struct {
unsigned BF:1;
unsigned UA:1;
unsigned R:1;
unsigned S:1;
unsigned P:1;
unsigned D:1;
unsigned CKE:1;
unsigned SMP:1;
};
struct {
unsigned :2;
unsigned W:1;
unsigned :2;
unsigned A:1;
};
struct {
unsigned :2;
unsigned NOT_W:1;
unsigned :2;
unsigned NOT_A:1;
};
struct {
unsigned :2;
unsigned R_W:1;
unsigned :2;
unsigned D_A:1;
};
struct {
unsigned :2;
unsigned NOT_WRITE:1;
unsigned :2;
unsigned NOT_ADDRESS:1;
};
} SSPSTATbits;
extern volatile near unsigned char SSPADD;
extern volatile near unsigned char SSPBUF;
extern volatile near unsigned char T2CON;
extern volatile near struct {
unsigned T2CKPS0:1;
unsigned T2CKPS1:1;
unsigned TMR2ON:1;
unsigned T2OUTPS0:1;
unsigned T2OUTPS1:1;
unsigned T2OUTPS2:1;
unsigned T2OUTPS3:1;
} T2CONbits;
extern volatile near unsigned char PR2;
extern volatile near unsigned char TMR2;
extern volatile near unsigned char T1CON;
extern volatile near union {
struct {
unsigned TMR1ON:1;
unsigned TMR1CS:1;
unsigned T1SYNC:1;
unsigned T1OSCEN:1;
unsigned T1CKPS0:1;
unsigned T1CKPS1:1;
unsigned T1RUN:1;
unsigned RD16:1;
};
struct {
unsigned :2;
unsigned NOT_T1SYNC:1;
};
} T1CONbits;
extern volatile near unsigned char TMR1L;
extern volatile near unsigned char TMR1H;
extern volatile near unsigned char RCON;
extern volatile near union {
struct {
unsigned BOR:1;
unsigned POR:1;
unsigned PD:1;
unsigned TO:1;
unsigned RI:1;
unsigned :1;
unsigned SBOREN:1;
unsigned IPEN:1;
};
struct {
unsigned NOT_BOR:1;
unsigned NOT_POR:1;
unsigned NOT_PD:1;
unsigned NOT_TO:1;
unsigned NOT_RI:1;
};
} RCONbits;
extern volatile near unsigned char WDTCON;
extern volatile near union {
struct {
unsigned SWDTEN:1;
};
struct {
unsigned SWDTE:1;
};
} WDTCONbits;
extern volatile near unsigned char HLVDCON;
extern volatile near union {
struct {
unsigned LVDL0:1;
unsigned LVDL1:1;
unsigned LVDL2:1;
unsigned LVDL3:1;
unsigned LVDEN:1;
unsigned IRVST:1;
};
struct {
unsigned LVV0:1;
unsigned LVV1:1;
unsigned LVV2:1;
unsigned LVV3:1;
unsigned :1;
unsigned BGST:1;
};
struct {
unsigned HLVDL0:1;
unsigned HLVDL1:1;
unsigned HLVDL2:1;
unsigned HLVDL3:1;
unsigned HLVDEN:1;
unsigned :2;
unsigned VDIRMAG:1;
};
struct {
unsigned :5;
unsigned IVRST:1;
};
} HLVDCONbits;
extern volatile near unsigned char LVDCON;
extern volatile near union {
struct {
unsigned LVDL0:1;
unsigned LVDL1:1;
unsigned LVDL2:1;
unsigned LVDL3:1;
unsigned LVDEN:1;
unsigned IRVST:1;
};
struct {
unsigned LVV0:1;
unsigned LVV1:1;
unsigned LVV2:1;
unsigned LVV3:1;
unsigned :1;
unsigned BGST:1;
};
struct {
unsigned HLVDL0:1;
unsigned HLVDL1:1;
unsigned HLVDL2:1;
unsigned HLVDL3:1;
unsigned HLVDEN:1;
unsigned :2;
unsigned VDIRMAG:1;
};
struct {
unsigned :5;
unsigned IVRST:1;
};
} LVDCONbits;
extern volatile near unsigned char OSCCON;
extern volatile near struct {
unsigned SCS0:1;
unsigned SCS1:1;
unsigned IOFS:1;
unsigned OSTS:1;
unsigned IRCF0:1;
unsigned IRCF1:1;
unsigned IRCF2:1;
unsigned IDLEN:1;
} OSCCONbits;
extern volatile near unsigned char DEBUG;
extern volatile near unsigned char T0CON;
extern volatile near union {
struct {
unsigned T0PS0:1;
unsigned T0PS1:1;
unsigned T0PS2:1;
unsigned PSA:1;
unsigned T0SE:1;
unsigned T0CS:1;
unsigned T016BIT:1;
unsigned TMR0ON:1;
};
struct {
unsigned :6;
unsigned T08BIT:1;
};
} T0CONbits;
extern volatile near unsigned char TMR0L;
extern volatile near unsigned char TMR0H;
extern near unsigned char STATUS;
extern near struct {
unsigned C:1;
unsigned DC:1;
unsigned Z:1;
unsigned OV:1;
unsigned N:1;
} STATUSbits;
extern near unsigned FSR2;
extern near unsigned char FSR2L;
extern near unsigned char FSR2H;
extern volatile near unsigned char PLUSW2;
extern volatile near unsigned char PREINC2;
extern volatile near unsigned char POSTDEC2;
extern volatile near unsigned char POSTINC2;
extern near unsigned char INDF2;
extern near unsigned char BSR;
extern near unsigned FSR1;
extern near unsigned char FSR1L;
extern near unsigned char FSR1H;
extern volatile near unsigned char PLUSW1;
extern volatile near unsigned char PREINC1;
extern volatile near unsigned char POSTDEC1;
extern volatile near unsigned char POSTINC1;
extern near unsigned char INDF1;
extern near unsigned char W;
extern near unsigned char WREG;
extern near unsigned FSR0;
extern near unsigned char FSR0L;
extern near unsigned char FSR0H;
extern volatile near unsigned char PLUSW0;
extern volatile near unsigned char PREINC0;
extern volatile near unsigned char POSTDEC0;
extern volatile near unsigned char POSTINC0;
extern near unsigned char INDF0;
extern volatile near unsigned char INTCON3;
extern volatile near union {
struct {
unsigned INT1F:1;
unsigned INT2F:1;
unsigned :1;
unsigned INT1E:1;
unsigned INT2E:1;
unsigned :1;
unsigned INT1P:1;
unsigned INT2P:1;
};
struct {
unsigned INT1IF:1;
unsigned INT2IF:1;
unsigned :1;
unsigned INT1IE:1;
unsigned INT2IE:1;
unsigned :1;
unsigned INT1IP:1;
unsigned INT2IP:1;
};
} INTCON3bits;
extern volatile near unsigned char INTCON2;
extern volatile near union {
struct {
unsigned RBIP:1;
unsigned :1;
unsigned TMR0IP:1;
unsigned :1;
unsigned INTEDG2:1;
unsigned INTEDG1:1;
unsigned INTEDG0:1;
unsigned RBPU:1;
};
struct {
unsigned :7;
unsigned NOT_RBPU:1;
};
} INTCON2bits;
extern volatile near unsigned char INTCON;
extern volatile near union {
struct {
unsigned RBIF:1;
unsigned INT0F:1;
unsigned TMR0IF:1;
unsigned RBIE:1;
unsigned INT0E:1;
unsigned TMR0IE:1;
unsigned PEIE:1;
unsigned GIE:1;
};
struct {
unsigned :1;
unsigned INT0IF:1;
unsigned T0IF:1;
unsigned :1;
unsigned INT0IE:1;
unsigned T0IE:1;
unsigned GIEL:1;
unsigned GIEH:1;
};
} INTCONbits;
extern near unsigned PROD;
extern near unsigned char PRODL;
extern near unsigned char PRODH;
extern volatile near unsigned char TABLAT;
extern volatile near unsigned short long TBLPTR;
extern volatile near unsigned char TBLPTRL;
extern volatile near unsigned char TBLPTRH;
extern volatile near unsigned char TBLPTRU;
extern volatile near unsigned short long PC;
extern volatile near unsigned char PCL;
extern volatile near unsigned char PCLATH;
extern volatile near unsigned char PCLATU;
extern volatile near unsigned char STKPTR;
extern volatile near union {
struct {
unsigned STKPTR0:1;
unsigned STKPTR1:1;
unsigned STKPTR2:1;
unsigned STKPTR3:1;
unsigned STKPTR4:1;
unsigned :1;
unsigned STKUNF:1;
unsigned STKOVF:1;
};
struct {
unsigned SP0:1;
unsigned SP1:1;
unsigned SP2:1;
unsigned SP3:1;
unsigned SP4:1;
unsigned :2;
unsigned STKFUL:1;
};
} STKPTRbits;
extern near unsigned short long TOS;
extern near unsigned char TOSL;
extern near unsigned char TOSH;
extern near unsigned char TOSU;
/*-------------------------------------------------------------------------
* Some useful defines for inline assembly stuff
*-------------------------------------------------------------------------*/
#define ACCESS 0
#define BANKED 1
/*-------------------------------------------------------------------------
* Some useful macros for inline assembly stuff
*-------------------------------------------------------------------------*/
#define Nop() {_asm nop _endasm}
#define ClrWdt() {_asm clrwdt _endasm}
#define Sleep() {_asm sleep _endasm}
#define Reset() {_asm reset _endasm}
#define Rlcf(f,dest,access) {_asm movlb f rlcf f,dest,access _endasm}
#define Rlncf(f,dest,access) {_asm movlb f rlncf f,dest,access _endasm}
#define Rrcf(f,dest,access) {_asm movlb f rrcf f,dest,access _endasm}
#define Rrncf(f,dest,access) {_asm movlb f rrncf f,dest,access _endasm}
#define Swapf(f,dest,access) {_asm movlb f swapf f,dest,access _endasm }
/*-------------------------------------------------------------------------
* A fairly inclusive set of registers to save for interrupts.
* These are locations which are commonly used by the compiler.
*-------------------------------------------------------------------------*/
#define INTSAVELOCS TBLPTR, TABLAT, PROD
#endif
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?