|
#if !defined(_TYPEDEFS_H_)
#define _TYPEDEFS_H_
#ifdef _WIN32
typedef unsigned __int8 UBYTE;
typedef signed __int8 SBYTE;
typedef unsigned __int8 UINT8;
typedef signed __int8 SINT8;
typedef unsigned __int16 UINT16;
typedef signed __int16 SINT16;
#if !defined(_WIN32)
typedef unsigned __int32 UINT32;
#endif
typedef signed __int32 SINT32;
typedef float DOUBLE24;
typedef float DOUBLE32;
#else // for PICC
typedef unsigned char UBYTE;
typedef signed char SBYTE;
typedef unsigned char UINT8;
typedef signed char SINT8;
typedef unsigned int UINT16;
typedef signed int SINT16;
typedef unsigned long UINT32;
typedef signed long SINT32;
typedef float DOUBLE24;
typedef double DOUBLE32;
#endif
// sleep
#define SLEEP_CONTINUE 0
#define SLEEP_WAKEUP 1
// macros
#define TIMER0_COUNTER_LIMIT 625
#define TIMER0_OFFSET 131
#define TIMER1_COUNTER_LIMIT 10
#define TIMER1_OFFSET 3036
#define TIMER2_COUNTER_LIMIT 0
#define TIMER2_OFFSET 0
// tasks
typedef void(*TASK_FUNCTION)(void);
#define TASKS_LIMIT_MASK 3
#define TASKS_LIMIT TASKS_LIMIT_MASK + 1
#define TASKS_ADD(x) tasks.funcs[tasks.ui8_Counter++] = x
#define TASKS_CHECK_LIMIT() tasks.ui8_Counter &= TASKS_LIMIT_MASK
#define TASKS_ARE_THERE_MORE tasks.ui8_Counter
#define TASKS_IS_NOT_NULL() tasks.funcs[--tasks.ui8_Counter]
#define TASKS_EXECUTE() tasks.funcs[tasks.ui8_Counter]()
typedef struct tagTASKS {
TASK_FUNCTION funcs[TASKS_LIMIT];
UBYTE ui8_Counter;
}TASKS;
#define ADC_SIGNALS 6
typedef enum ADCSIGNALS {
ADC_CH0_ui16_A,
ADC_CH1_ui16_B,
ADC_CH2_ui16_C,
ADC_CH0_ui16_AA,
ADC_CH1_ui16_BB,
ADC_CH2_ui16_CC,
}ADCSIGNAL;
typedef struct tagADC {
UBYTE ui8_Index;
UINT16 ui16_Signal[ADC_SIGNALS];
UBYTE ui8_Channel[ADC_SIGNALS];
}ADC;
// RS232
#define RS232_BUFFER_LIMIT_MASK 15
#define RS232_BUFFER_LIMIT RS232_BUFFER_LIMIT_MASK+1
typedef struct tagRS232 {
UBYTE ui8_Index;
UBYTE ui8_Buffer[RS232_BUFFER_LIMIT];
}RS232;
typedef enum RS232COMMANDS {
RS232_CMD_REBOOT = 1,
RS232_CMD_VERSIONID,
RS232_CMD_DAQ,
RS232_CMD_ADCREAD,
RS232_CMD_EEPROMWRITE,
RS232_CMD_EEPROMREAD,
RS232_CMD_USER1,
RS232_CMD_USER2,
RS232_CMD_USER3,
RS232_CMD_USER4,
RS232_CMD_USER5,
}RS232COMMAND;
// misc
#define HighByte(x) (*(((UBYTE*)(&x))+1))
#define LowByte(x) (*(((UBYTE*)(&x))))
#define TRUE 1
#define FALSE 0
#define ENABLE 1
#define DISABLE 0
#define SET 1
#define CLEAR 0
#define ON 1
#define OFF 0
#define IO_OUTPUT 0
#define IO_INPUT 1
//port A
#define PORT_A_IO TRISA
#define PORT_A_IO_SET(x) PORT_A_IO = x
#define PORT_A PORTA
#define PORT_A_SET(x) PORT_A = x
#define PORT_A_0 RA0
#define PORT_A_1 RA1
#define PORT_A_2 RA2
#define PORT_A_3 RA3
#define PORT_A_4 RA4
#define PORT_A_5 RA5
#define PORT_A_6 RA6
#define PORT_A_7 RA7
#define PORT_A_0_SET(x) PORT_A_0 = x
#define PORT_A_1_SET(x) PORT_A_1 = x
#define PORT_A_2_SET(x) PORT_A_2 = x
#define PORT_A_3_SET(x) PORT_A_3 = x
#define PORT_A_4_SET(x) PORT_A_4 = x
#define PORT_A_5_SET(x) PORT_A_5 = x
#define PORT_A_6_SET(x) PORT_A_6 = x
#define PORT_A_7_SET(x) PORT_A_7 = x
#define PORT_A_IO_0 TRISA0
#define PORT_A_IO_1 TRISA1
#define PORT_A_IO_2 TRISA2
#define PORT_A_IO_3 TRISA3
#define PORT_A_IO_4 TRISA4
#define PORT_A_IO_5 TRISA5
#define PORT_A_IO_6 TRISA6
#define PORT_A_IO_7 TRISA7
#define PORT_A_IO_0_SET(x) PORT_A_IO_0 = x
#define PORT_A_IO_1_SET(x) PORT_A_IO_1 = x
#define PORT_A_IO_2_SET(x) PORT_A_IO_2 = x
#define PORT_A_IO_3_SET(x) PORT_A_IO_3 = x
#define PORT_A_IO_4_SET(x) PORT_A_IO_4 = x
#define PORT_A_IO_5_SET(x) PORT_A_IO_5 = x
#define PORT_A_IO_6_SET(x) PORT_A_IO_6 = x
#define PORT_A_IO_7_SET(x) PORT_A_IO_7 = x
//port B
#define PORT_B_IO TRISB
#define PORT_B_IO_SET(x) PORT_B_IO = x
#define PORT_B PORTB
#define PORT_B_SET(x) PORT_B = x
#define PORT_B_0 RB0
#define PORT_B_1 RB1
#define PORT_B_2 RB2
#define PORT_B_3 RB3
#define PORT_B_4 RB4
#define PORT_B_5 RB5
#define PORT_B_6 RB6
#define PORT_B_7 RB7
#define PORT_B_0_SET(x) PORT_B_0 = x
#define PORT_B_1_SET(x) PORT_B_1 = x
#define PORT_B_2_SET(x) PORT_B_2 = x
#define PORT_B_3_SET(x) PORT_B_3 = x
#define PORT_B_4_SET(x) PORT_B_4 = x
#define PORT_B_5_SET(x) PORT_B_5 = x
#define PORT_B_6_SET(x) PORT_B_6 = x
#define PORT_B_7_SET(x) PORT_B_7 = x
#define PORT_B_IO_0 TRISB0
#define PORT_B_IO_1 TRISB1
#define PORT_B_IO_2 TRISB2
#define PORT_B_IO_3 TRISB3
#define PORT_B_IO_4 TRISB4
#define PORT_B_IO_5 TRISB5
#define PORT_B_IO_6 TRISB6
#define PORT_B_IO_7 TRISB7
#define PORT_B_IO_0_SET(x) PORT_B_IO_0 = x
#define PORT_B_IO_1_SET(x) PORT_B_IO_1 = x
#define PORT_B_IO_2_SET(x) PORT_B_IO_2 = x
#define PORT_B_IO_3_SET(x) PORT_B_IO_3 = x
#define PORT_B_IO_4_SET(x) PORT_B_IO_4 = x
#define PORT_B_IO_5_SET(x) PORT_B_IO_5 = x
#define PORT_B_IO_6_SET(x) PORT_B_IO_6 = x
#define PORT_B_IO_7_SET(x) PORT_B_IO_7 = x
//port C
#define PORT_C_IO TRISC
#define PORT_C_IO_SET(x) PORT_C_IO = x
#define PORT_C PORTC
#define PORT_C_SET(x) PORT_C = x
#define PORT_C_0 RC0
#define PORT_C_1 RC1
#define PORT_C_2 RC2
#define PORT_C_3 RC3
#define PORT_C_4 RC4
#define PORT_C_5 RC5
#define PORT_C_6 RC6
#define PORT_C_7 RC7
#define PORT_C_0_SET(x) PORT_C_0 = x
#define PORT_C_1_SET(x) PORT_C_1 = x
#define PORT_C_2_SET(x) PORT_C_2 = x
#define PORT_C_3_SET(x) PORT_C_3 = x
#define PORT_C_4_SET(x) PORT_C_4 = x
#define PORT_C_5_SET(x) PORT_C_5 = x
#define PORT_C_6_SET(x) PORT_C_6 = x
#define PORT_C_7_SET(x) PORT_C_7 = x
#define PORT_C_IO_0 TRISC0
#define PORT_C_IO_1 TRISC1
#define PORT_C_IO_2 TRISC2
#define PORT_C_IO_3 TRISC3
#define PORT_C_IO_4 TRISC4
#define PORT_C_IO_5 TRISC5
#define PORT_C_IO_6 TRISC6
#define PORT_C_IO_7 TRISC7
#define PORT_C_IO_0_SET(x) PORT_C_IO_0 = x
#define PORT_C_IO_1_SET(x) PORT_C_IO_1 = x
#define PORT_C_IO_2_SET(x) PORT_C_IO_2 = x
#define PORT_C_IO_3_SET(x) PORT_C_IO_3 = x
#define PORT_C_IO_4_SET(x) PORT_C_IO_4 = x
#define PORT_C_IO_5_SET(x) PORT_C_IO_5 = x
#define PORT_C_IO_6_SET(x) PORT_C_IO_6 = x
#define PORT_C_IO_7_SET(x) PORT_C_IO_7 = x
//port D
#define PORT_D_IO TRISD
#define PORT_D_IO_SET(x) PORT_D_IO = x
#define PORT_D PORTD
#define PORT_D_SET(x) PORT_D = x
#define PORT_D_0 RD0
#define PORT_D_1 RD1
#define PORT_D_2 RD2
#define PORT_D_3 RD3
#define PORT_D_4 RD4
#define PORT_D_5 RD5
#define PORT_D_6 RD6
#define PORT_D_7 RD7
#define PORT_D_0_SET(x) PORT_D_0 = x
#define PORT_D_1_SET(x) PORT_D_1 = x
#define PORT_D_2_SET(x) PORT_D_2 = x
#define PORT_D_3_SET(x) PORT_D_3 = x
#define PORT_D_4_SET(x) PORT_D_4 = x
#define PORT_D_5_SET(x) PORT_D_5 = x
#define PORT_D_6_SET(x) PORT_D_6 = x
#define PORT_D_7_SET(x) PORT_D_7 = x
#define PORT_D_IO_0 TRISD0
#define PORT_D_IO_1 TRISD1
#define PORT_D_IO_2 TRISD2
#define PORT_D_IO_3 TRISD3
#define PORT_D_IO_4 TRISD4
#define PORT_D_IO_5 TRISD5
#define PORT_D_IO_6 TRISD6
#define PORT_D_IO_7 TRISD7
#define PORT_D_IO_0_SET(x) PORT_D_IO_0 = x
#define PORT_D_IO_1_SET(x) PORT_D_IO_1 = x
#define PORT_D_IO_2_SET(x) PORT_D_IO_2 = x
#define PORT_D_IO_3_SET(x) PORT_D_IO_3 = x
#define PORT_D_IO_4_SET(x) PORT_D_IO_4 = x
#define PORT_D_IO_5_SET(x) PORT_D_IO_5 = x
#define PORT_D_IO_6_SET(x) PORT_D_IO_6 = x
#define PORT_D_IO_7_SET(x) PORT_D_IO_7 = x
//port E
#define PORT_E_IO TRISE
#define PORT_E_IO_SET(x) PORT_E_IO = x
#define PORT_E PORTE
#define PORT_E_SET(x) PORT_E = x
#define PORT_E_0 RE0
#define PORT_E_1 RE1
#define PORT_E_2 RE2
#define PORT_E_3 RE3
#define PORT_E_4 RE4
#define PORT_E_5 RE5
#define PORT_E_6 RE6
#define PORT_E_7 RE7
#define PORT_E_0_SET(x) PORT_E_0 = x
#define PORT_E_1_SET(x) PORT_E_1 = x
#define PORT_E_2_SET(x) PORT_E_2 = x
#define PORT_E_3_SET(x) PORT_E_3 = x
#define PORT_E_4_SET(x) PORT_E_4 = x
#define PORT_E_5_SET(x) PORT_E_5 = x
#define PORT_E_6_SET(x) PORT_E_6 = x
#define PORT_E_7_SET(x) PORT_E_7 = x
#define PORT_E_IO_0 TRISE0
#define PORT_E_IO_1 TRISE1
#define PORT_E_IO_2 TRISE2
#define PORT_E_IO_3 TRISE3
#define PORT_E_IO_4 TRISE4
#define PORT_E_IO_5 TRISE5
#define PORT_E_IO_6 TRISE6
#define PORT_E_IO_7 TRISE7
#define PORT_E_IO_0_SET(x) PORT_E_IO_0 = x
#define PORT_E_IO_1_SET(x) PORT_E_IO_1 = x
#define PORT_E_IO_2_SET(x) PORT_E_IO_2 = x
#define PORT_E_IO_3_SET(x) PORT_E_IO_3 = x
#define PORT_E_IO_4_SET(x) PORT_E_IO_4 = x
#define PORT_E_IO_5_SET(x) PORT_E_IO_5 = x
#define PORT_E_IO_6_SET(x) PORT_E_IO_6 = x
#define PORT_E_IO_7_SET(x) PORT_E_IO_7 = x
// interrupts
#define INTERRUPT_GLOBAL GIE
#define INTERRUPT_GLOBAL_DISABLE() INTERRUPT_GLOBAL = DISABLE;
#define INTERRUPT_GLOBAL_ENABLE() INTERRUPT_GLOBAL = ENABLE;
#define INTERRUPT_PERIPHERAL PEIE
#define INTERRUPT_PERIPHERAL_ENABLE() INTERRUPT_PERIPHERAL = ENABLE
#define INTERRUPT_PERIPHERAL_DISABLE() INTERRUPT_PERIPHERAL = DISABLE
//timer0 defines
#define TIMER0 TMR0
#define TIMER0_EVENT T0IE
#define TIMER0_EVENT_FLAG T0IF
#define TIMER0_EVENT_FLAG_CLEAR() TIMER0_EVENT_FLAG = CLEAR
#if !defined(_WIN32)
#define TIMER0_SET(x) TIMER0 = x
#define TIMER0_EVENT_ENABLE() TIMER0_EVENT = ENABLE
#define TIMER0_EVENT_DISABLE() TIMER0_EVENT = DISABLE
#endif
//timer1 defines
#define TIMER1 timer1_clone
#define TIMER1_CONTROL T1CON
#define TIMER1_EVENT TMR1IE
#define TIMER1_EVENT_FLAG TMR1IF
#define TIMER1_EVENT_FLAG_CLEAR() TIMER1_EVENT_FLAG = CLEAR
#define TIMER1_DISABLE() TIMER1_CONTROL &= 0xFE
#define TIMER1_ENABLE() TIMER1_CONTROL |= 0x01
#if !defined(_WIN32)
#define TIMER1_SET(x) timer1_clone = x
#define TIMER1_EVENT_ENABLE() TIMER1_EVENT = ENABLE
#define TIMER1_EVENT_DISABLE() TIMER1_EVENT = DISABLE
#endif
//timer2 defines
#define TIMER2 TMR2
#define TIMER2_CONTROL T2CON
#define TIMER2_ENABLE() TIMER2_CONTROL |= 0x04
#define TIMER2_DISABLE() TIMER2_CONTROL &= 0xFB
#define TIMER2_EVENT TMR2IE
#define TIMER2_EVENT_ENABLE() TIMER2_EVENT = ENABLE
#define TIMER2_EVENT_DISABLE() TIMER2_EVENT = DISABLE
#define TIMER2_EVENT_FLAG TMR2IF
#define TIMER2_EVENT_FLAG_CLEAR() TIMER2_EVENT_FLAG = CLEAR
//ccp1 defines
#define CCP1_CONTROL CCP1CON
#define CCP1_EVENT CCP1IE
#define CCP1_EVENT_ENABLE() CCP1_EVENT = ENABLE
#define CCP1_EVENT_DISABLE() CCP1_EVENT = DISABLE
#define CCP1_EVENT_FLAG CCP1IF
#define CCP1_EVENT_FLAG_CLEAR() CCP1_EVENT_FLAG = CLEAR
#define CCP1_PWM_IO_SET() PORT_C_IO_2_SET(IO_OUTPUT)
//ccp2 defines
#define CCP2_CONTROL CCP2CON
#define CCP2_EVENT CCP2IE
#define CCP2_EVENT_ENABLE() CCP2_EVENT = ENABLE
#define CCP2_EVENT_DISABLE() CCP2_EVENT = DISABLE
#define CCP2_EVENT_FLAG CCP2IF
#define CCP2_EVENT_FLAG_CLEAR() CCP2_EVENT_FLAG = CLEAR
#define CCP2_PWM_IO_SET() PORT_C_IO_1_SET(IO_OUTPUT)
//rs232 defines
#define RS232_RX_EVENT RCIE
#define RS232_RX_EVENT_ENABLE() RS232_RX_EVENT = ENABLE
#define RS232_RX_EVENT_DISABLE() RS232_RX_EVENT = DISABLE
#define RS232_RX_EVENT_FLAG RCIF
#define RS232_RX_EVENT_FLAG_CLEAR() RS232_RX_EVENT_FLAG = CLEAR
#define RS232_RX_DATA RCREG
#define RS232_RX_ERROR_OVERFLOW OERR
#define RS232_RX_ERROR_FRAMING FERR
#define RS232_RX_CONTINUOUS CREN
#define RS232_RX_CONTINUOUS_ON() RS232_RX_CONTINUOUS = ON
#define RS232_RX_CONTINUOUS_OFF() RS232_RX_CONTINUOUS = OFF
#define RS232_BAUDRATE_CONTROL SPBRG
#define RS232_BAUDRATE_SET(x) RS232_BAUDRATE_CONTROL = x
#define RS232_RX_CONTROL RCSTA
#define RS232_RX_SET(x) RS232_RX_CONTROL = x
#define RS232_TX_CONTROL TXSTA
#define RS232_TX_SET(x) RS232_TX_CONTROL = x
//INT external interrupt (RB0)
#define INT_EXT_EDGE_ON_RISING 1
#define INT_EXT_EDGE_ON_FALLING 0
#define INTERRUPT_EXTERNAL_EVENT INTE
#define INTERRUPT_EXTERNAL_EDGE INTEDG
#define INTERRUPT_EXTERNAL_EVENT_FLAG INTF
#define INTERRUPT_EXTERNAL_EVENT_FLAG_CLEAR() INTERRUPT_EXTERNAL_EVENT_FLAG = CLEAR
#define INTERRUPT_EXTERNAL_EDGE_SET(x) INTERRUPT_EXTERNAL_EDGE = x
#define INTERRUPT_EXTERNAL_EDGE_RISING() INTERRUPT_EXTERNAL_EDGE_SET(INT_EXT_EDGE_ON_RISING)
#define INTERRUPT_EXTERNAL_EDGE_FALLING() INTERRUPT_EXTERNAL_EDGE_SET(INT_EXT_EDGE_ON_FALLING)
#define INTERRUPT_EXTERNAL_EVENT_ENABLE() INTERRUPT_EXTERNAL_EVENT = ENABLE
#define INTERRUPT_EXTERNAL_EVENT_DISABLE() INTERRUPT_EXTERNAL_EVENT = DISABLE
//RB7:RB4 change interrupt
#define INTERRUPT_PORTB_EVENT RBIE
#define INTERRUPT_PORTB_EVENT_FLAG RBIF
#define INTERRUPT_PORTB_EVENT_FLAG_CLEAR() INTERRUPT_PORTB_EVENT_FLAG = CLEAR
#define INTERRUPT_PORTB_EVENT_ENABLE() INTERRUPT_PORTB_EVENT = ENABLE
#define INTERRUPT_PORTB_EVENT_DISABLE() INTERRUPT_PORTB_EVENT = DISABLE
//ADC
#define ADC_AUTO 255
#define ADRES ADRESH
#define ADC_CH0 0x00
#define ADC_CH1 0x08
#define ADC_CH2 0x10
#define ADC_CH3 0x18
#define ADC_CH4 0x20
#define ADC_CH5 0x28
#define ADC_CH6 0x30
#define ADC_CH7 0x38
#define ADC_EVENT ADIE
#define ADC_EVENT_FLAG ADIF
#define ADC_EVENT_ENABLE() ADC_EVENT = ENABLE
#define ADC_EVENT_DISABLE() ADC_EVENT = DISABLE
#define ADC_EVENT_FLAG_CLEAR() ADC_EVENT_FLAG = CLEAR
// software implementation of I2C
// SDA (data) and SCL (clock) bits
#define I2C_SCL (UBYTE)PORT_C_3
#define I2C_SCL_DIR PORT_C_IO_3
#define I2C_SDA (UBYTE)PORT_C_3
#define I2C_SDA_DIR PORT_C_IO_3
#define I2C_ERROR (UBYTE)0xFF
#define I2C_OUTPUT 0
#define I2C_INPUT 1
#define I2C_SCL_HIGH() I2C_SCL_DIR = I2C_INPUT
#define I2C_SCL_LOW() I2C_SCL_DIR = I2C_OUTPUT
#define I2C_SDA_HIGH() I2C_SDA_DIR = I2C_INPUT
#define I2C_SDA_LOW() I2C_SDA_DIR = I2C_OUTPUT
#define I2C_DELAY_1uS_20MHz() asm("goto $+1"); asm("goto $+1"); asm("nop")
#if OSC_FREQUENCY <= 4000000UL
#define I2C_DELAY_1uS() asm("nop")
#elif OSC_FREQUENCY <= 8000000UL
#define I2C_DELAY_1uS() asm("goto $+1")
#elif OSC_FREQUENCY <= 16000000UL
#define I2C_DELAY_1uS() asm("goto $+1");asm("goto $+1")
#else
#define I2C_DELAY_1uS() asm("goto $+1");asm("goto $+1");asm("nop")
#endif
#endif // _TYPEDEFS_H_
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.