Click here to Skip to main content
15,886,809 members
Articles / Desktop Programming / MFC

A PIC C Code Wizard

Rate me:
Please Sign up or sign in to vote.
4.94/5 (27 votes)
5 May 2003CPOL5 min read 156.1K   7.9K   46  
Creates C code templates for PIC microcontrollers. The default templates are for use with the Hi-Tech (tm) PICC compiler.
#ifndef _TYPEDEFS_H_
#define _TYPEDEFS_H_

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;

// sleep
#define SLEEP_CONTINUE			0
#define SLEEP_WAKEUP			1

// macros
#define TIMER0_COUNTER_LIMIT	$$TMR0_CNT_LIMIT$$
#define TIMER0_OFFSET			$$TMR0_OFFSET$$
#define TIMER1_COUNTER_LIMIT	$$TMR1_CNT_LIMIT$$
#define TIMER1_OFFSET			$$TMR1_OFFSET$$
#define TIMER2_COUNTER_LIMIT	$$TMR2_CNT_LIMIT$$
#define TIMER2_OFFSET			$$TMR2_OFFSET$$

// 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

//registers
#define REG_OPTION					OPTION
#define REG_OPTION_SET(x)			REG_OPTION = x
#define REG_SSPCON					SSPCON
#define REG_SSPCON_SET(x)			REG_SSPCON = x
#define REG_ADCON0					ADCON0
#define REG_ADCON0_SET(x)			REG_ADCON0 = x
#define REG_ADCON1					ADCON1
#define REG_ADCON1_SET(x)			REG_ADCON1 = x
#define REG_SPBRG					SPBRG
#define REG_SPBRG_SET(x)			REG_SPBRG = x
#define REG_RCSTA					RCSTA
#define REG_RCSTA_SET(x)			REG_RCSTA = x
#define REG_TXSTA					TXSTA
#define REG_TXSTA_SET(x)			REG_TXSTA = x
#define REG_TXREG					TXREG
#define REG_TXREG_SET(x)			REG_TXREG = x
#define REG_PR2						PR2
#define REG_PR2_SET(x)				REG_PR2 = x
#define REG_T2CON					T2CON
#define REG_T2CON_SET(x)			REG_T2CON = x
#define REG_CCP1CON					CCP1CON
#define REG_CCP1CON_SET(x)			REG_CCP1CON = x
#define REG_CCP2CON					CCP2CON
#define REG_CCP2CON_SET(x)			REG_CCP2CON = x
#define REG_T1CON					T1CON
#define REG_T1CON_SET(x)			REG_T1CON = x
#define REG_T2CON					T2CON
#define REG_T2CON_SET(x)			REG_T2CON = x
#define REG_EEADR					EEADR
#define REG_EEADR_SET(x)			REG_EEADR = x
#define REG_EEDATA					EEDATA
#define REG_EEDATA_SET(x)			REG_EEDATA = x
#define REG_EECON2					EECON2
#define REG_EECON2_SET(x)			REG_EECON2 = x


//port GPIO
#define PORT_GPIO_IO				TRIS
#define PORT_GPIO_IO_SET(x)			PORT_GPIO_IO = x
#define PORT_GPIO					GPIO
#define PORT_GPIO_SET(x)			PORT_GPIO = x
#define PORT_GPIO_0					GP0
#define PORT_GPIO_1					GP1
#define PORT_GPIO_2					GP2
#define PORT_GPIO_3					GP3
#define PORT_GPIO_4					GP4
#define PORT_GPIO_5					GP5
#define PORT_GPIO_0_SET(x)			PORT_GPIO_0 = x
#define PORT_GPIO_1_SET(x)			PORT_GPIO_1 = x
#define PORT_GPIO_2_SET(x)			PORT_GPIO_2 = x
#define PORT_GPIO_3_SET(x)			PORT_GPIO_3 = x
#define PORT_GPIO_4_SET(x)			PORT_GPIO_4 = x
#define PORT_GPIO_5_SET(x)			PORT_GPIO_5 = x

//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_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_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_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

// 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
#define TIMER0_SET(x)				TIMER0 = x
#define TIMER0_EVENT_ENABLE()		TIMER0_EVENT = ENABLE
#define TIMER0_EVENT_DISABLE()		TIMER0_EVENT = DISABLE

//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
#define TIMER1_SET(x)				timer1_clone = x
#define TIMER1_EVENT_ENABLE()		TIMER1_EVENT = ENABLE
#define TIMER1_EVENT_DISABLE()		TIMER1_EVENT = DISABLE

//timer2 defines
#define TIMER2						TMR2
#define TIMER2_CONTROL				T2CON
#define TIMER2_ENABLE()				TIMER2_CONTROL |= 0x04
#define TIMER2_DISABLE()			TIMER2_CONTROL &= 0xFB
#define TIMER2_SET(x)				TIMER2 = x
#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_TX_DATA				TXREG
#define RS232_TX_EVENT				TXIE
#define RS232_TX_EVENT_ENABLE()		RS232_TX_EVENT = ENABLE
#define RS232_TX_EVENT_DISABLE()	RS232_TX_EVENT = DISABLE
#define RS232_TX_EVENT_FLAG			TXIF
#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_CONTROL_SET(x)		RS232_RX_CONTROL = x
#define RS232_TX_CONTROL			TXSTA
#define RS232_TX_CONTROL_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
$$IF(FLASH)
#define ADRES					ADRESH
$$ENDIF
#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

#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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Delphi
United States United States
Carlos Buelna works in the automotive industry.

Comments and Discussions