You are on page 1of 14

18F4520.

h
//////////// Standard Header file for the PIC18F4520 device ////////////////
///////////////////////////////////////////////////////////////////////////
////
(C) Copyright 1996, 2013 Custom Computer Services
////
//// This source code may only be used by licensed users of the CCS C ////
//// compiler. This source code may only be distributed to other
////
//// licensed users of the CCS C compiler. No other use, reproduction ////
//// or distribution is permitted without written permission.
////
//// Derivative programs created using this software in object code
////
//// form are not restricted in any way.
////
///////////////////////////////////////////////////////////////////////////
#device PIC18F4520
#nolist
//////// Program memory: 16384x16 Data RAM: 1536 Stack: 31
//////// I/O: 36
Analog Pins: 13
//////// Data EEPROM: 256
//////// C Scratch area: 00
ID Location: 200000
//////// Fuses: LP,XT,HS,RC,EC,EC_IO,H4,RC_IO,INTRC_IO,INTRC,NOFCMEN,FCMEN
//////// Fuses: NOIESO,IESO,PUT,NOPUT,NOBROWNOUT,BROWNOUT_SW,BROWNOUT_NOSL
//////// Fuses: BROWNOUT,BORV45,BORV43,BORV27,BORV21,NOWDT,WDT,WDT1,WDT2
//////// Fuses: WDT4,WDT8,WDT16,WDT32,WDT64,WDT128,WDT256,WDT512,WDT1024
//////// Fuses: WDT2048,WDT4096,WDT8192,WDT16384,WDT32768,CCP2B3,CCP2C1
//////// Fuses: NOPBADEN,PBADEN,NOLPT1OSC,LPT1OSC,NOMCLR,MCLR,NOSTVREN
//////// Fuses: STVREN,NOLVP,LVP,NOXINST,XINST,DEBUG,NODEBUG,PROTECT
//////// Fuses: NOPROTECT,CPB,NOCPB,CPD,NOCPD,WRT,NOWRT,WRTC,NOWRTC,WRTB
//////// Fuses: NOWRTB,WRTD,NOWRTD,EBTR,NOEBTR,EBTRB,NOEBTRB
////////
#if (!defined(__PCH__)||defined(__ISNT_CCS__))
#define _bif
#define int8 char
#define int16 long
#define int32 long long
#define float32 float
#define int1 char
#endif
////////////////////////////////////////////////////////////////// I/O
// Discrete I/O Functions: SET_TRIS_x(), OUTPUT_x(), INPUT_x(),
//
PORT_x_PULLUPS(), INPUT(),
//
OUTPUT_LOW(), OUTPUT_HIGH(),
//
OUTPUT_FLOAT(), OUTPUT_BIT()
// Discrete I/O Prototypes:
_bif void set_tris_a(int8 value);
_bif void set_tris_b(int8 value);
_bif void set_tris_c(int8 value);
_bif void set_tris_d(int8 value);
_bif void set_tris_e(int8 value);
_bif int8 get_tris_a(void);
_bif int8 get_tris_b(void);
_bif int8 get_tris_c(void);
_bif int8 get_tris_d(void);
_bif int8 get_tris_e(void);
_bif void output_a(int8 value);
_bif void output_b(int8 value);
_bif void output_c(int8 value);
_bif void output_d(int8 value);
_bif void output_e(int8 value);
_bif int8 input_a(void);
_bif int8 input_b(void);
_bif int8 input_c(void);
_bif int8 input_d(void);
_bif int8 input_e(void);
_bif int1 input_change_a(void);
_bif int1 input_change_b(void);
_bif int1 input_change_c(void);
Page 1

_bif
_bif
_bif
_bif
_bif
_bif
_bif
_bif
_bif
_bif

int1
int1
int1
int1
void
void
void
void
void
void

18F4520.h
input_change_d(void);
input_change_e(void);
input(int16 pin);
input_state(int16 pin);
output_low(int16 pin);
output_high(int16 pin);
output_toggle(int16 pin);
output_bit(int16 pin, int1 level);
output_float(int16 pin);
output_drive(int16 pin);

// Constants used to identify pins in the above are:


#define
#define
#define
#define
#define
#define
#define
#define

PIN_A0
PIN_A1
PIN_A2
PIN_A3
PIN_A4
PIN_A5
PIN_A6
PIN_A7

31744
31745
31746
31747
31748
31749
31750
31751

#define
#define
#define
#define
#define
#define
#define
#define

PIN_B0
PIN_B1
PIN_B2
PIN_B3
PIN_B4
PIN_B5
PIN_B6
PIN_B7

31752
31753
31754
31755
31756
31757
31758
31759

#define
#define
#define
#define
#define
#define
#define
#define

PIN_C0
PIN_C1
PIN_C2
PIN_C3
PIN_C4
PIN_C5
PIN_C6
PIN_C7

31760
31761
31762
31763
31764
31765
31766
31767

#define
#define
#define
#define
#define
#define
#define
#define

PIN_D0
PIN_D1
PIN_D2
PIN_D3
PIN_D4
PIN_D5
PIN_D6
PIN_D7

31768
31769
31770
31771
31772
31773
31774
31775

#define
#define
#define
#define

PIN_E0
PIN_E1
PIN_E2
PIN_E3

31776
31777
31778
31779

////////////////////////////////////////////////////////////////// Useful defines


#define FALSE 0
#define TRUE 1
#define BYTE int8
#define BOOLEAN int1
#define
#define
#define
#define

getc getch
fgetc getch
getchar getch
putc putchar
Page 2

18F4520.h
#define fputc putchar
#define fgets gets
#define fputs puts
////////////////////////////////////////////////////////////////// Control
// Control Functions: RESET_CPU(), SLEEP(), RESTART_CAUSE()
// Prototypes:
_bif int8 restart_cause(void);
_bif void reset_cpu(void);
_bif void sleep(void);
_bif void sleep(int8 type);
// Constants returned from RESTART_CAUSE() are:
#define WDT_TIMEOUT
7
#define MCLR_FROM_SLEEP 11
#define MCLR_FROM_RUN
15
#define NORMAL_POWER_UP 12
#define BROWNOUT_RESTART 14
#define WDT_FROM_SLEEP
3
#define RESET_INSTRUCTION 0
// Constants for calls to sleep() are:
#define SLEEP_FULL
0 // Default
#define SLEEP_IDLE
1 // Clock and peripherals don't stop
////////////////////////////////////////////////////////////////// Timer 0
// Timer 0 (AKA RTCC)Functions: SETUP_COUNTERS() or SETUP_TIMER_0(),
//
SET_TIMER0() or SET_RTCC(),
//
GET_TIMER0() or GET_RTCC()
// Timer 0 Prototypes:
_bif void setup_timer_0(int8 mode);
_bif void set_timer0(int16 value);
_bif int16 get_timer0(void);
_bif void setup_counters(int8 mode, int8 prescaler);
_bif void set_rtcc(int16 value);
_bif int16 get_rtcc(void);
// Constants used for SETUP_TIMER_0() are:
#define T0_INTERNAL
0
#define T0_EXT_L_TO_H 32
#define T0_EXT_H_TO_L 48
#define
#define
#define
#define
#define
#define
#define
#define
#define

T0_DIV_1
T0_DIV_2
T0_DIV_4
T0_DIV_8
T0_DIV_16
T0_DIV_32
T0_DIV_64
T0_DIV_128
T0_DIV_256

8
0
1
2
3
4
5
6
7

#define T0_OFF

0x80

#define T0_8_BIT

0x40

#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

RTCC_INTERNAL
RTCC_EXT_L_TO_H
RTCC_EXT_H_TO_L
RTCC_DIV_1
RTCC_DIV_2
RTCC_DIV_4
RTCC_DIV_8
RTCC_DIV_16
RTCC_DIV_32
RTCC_DIV_64
RTCC_DIV_128

0
32
48
8
0
1
2
3
4
5
6

// The following are provided for compatibility


// with older compiler versions

Page 3

18F4520.h
#define RTCC_DIV_256
#define RTCC_OFF
#define RTCC_8_BIT

7
0x80
0x40

// Constants used for SETUP_COUNTERS() are the above


// constants for the 1st param and the following for
// the 2nd param:
////////////////////////////////////////////////////////////////// WDT
// Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS() (see above)
//
RESTART_WDT()
// WDT base is 4ms
// WDT Prototypes:
_bif void setup_wdt(int16 mode);
_bif void restart_wdt(void);
// Constants used for SETUP_WDT() are:
#define WDT_ON
0x100
#define WDT_OFF
0
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

WDT_4MS
WDT_8MS
WDT_16MS
WDT_32MS
WDT_64MS
WDT_128MS
WDT_256MS
WDT_512MS
WDT_1S
WDT_2S
WDT_4S
WDT_8S
WDT_16
WDT_32S
WDT_64S
WDT_128S

0x300
0x500
0x700
0x900
0xB00
0xD00
0xF00
0x1100
0x1300
0x1500
0x1700
0x1900
0x1B00
0x1D00
0x1F00
0x2100

////////////////////////////////////////////////////////////////// Timer 1
// Timer 1 Functions: SETUP_TIMER_1, GET_TIMER1, SET_TIMER1
// Timer 1 Prototypes:
_bif void setup_timer_1(int16 mode);
_bif int16 get_timer1(void);
_bif void set_timer1(int16 value);
// Constants used for SETUP_TIMER_1() are:
//
(or (via |) together constants from each group)
#define T1_DISABLED
0
#define T1_INTERNAL
0x85
#define T1_EXTERNAL
0x87
#define T1_EXTERNAL_SYNC
0x83
#define T1_CLK_OUT

#define
#define
#define
#define

0
0x10
0x20
0x30

T1_DIV_BY_1
T1_DIV_BY_2
T1_DIV_BY_4
T1_DIV_BY_8

////////////////////////////////////////////////////////////////// Timer 2
// Timer 2 Functions: SETUP_TIMER_2, GET_TIMER2, SET_TIMER2
// Timer 2 Prototypes:
_bif void setup_timer_2(int8 mode, int8 period, int8 postscale);
_bif int8 get_timer2(void);
_bif void set_timer2(int8 value);
// Constants used for SETUP_TIMER_2() are:
#define T2_DISABLED
0
Page 4

18F4520.h
#define T2_DIV_BY_1
#define T2_DIV_BY_4
#define T2_DIV_BY_16

4
5
6

////////////////////////////////////////////////////////////////// Timer 3
// Timer 3 Functions: SETUP_TIMER_3, GET_TIMER3, SET_TIMER3
// Timer 3 Prototypes:
_bif void setup_timer_3(int16 mode);
_bif int16 get_timer3(void);
_bif void set_timer3(int16 value);
// Constants used for SETUP_TIMER_3() are:
//
(or (via |) together constants from each group)
#define T3_DISABLED
0
#define T3_INTERNAL
0x85
#define T3_EXTERNAL
0x87
#define T3_EXTERNAL_SYNC
0x83
#define
#define
#define
#define

T3_DIV_BY_1
T3_DIV_BY_2
T3_DIV_BY_4
T3_DIV_BY_8

0
0x10
0x20
0x30

////////////////////////////////////////////////////////////////// CCP
// CCP Functions: SETUP_CCPx, SET_PWMx_DUTY
// CCP Variables: CCP_x, CCP_x_LOW, CCP_x_HIGH
// CCP1 Prototypes:
_bif void setup_ccp1(int32 mode);
_bif void setup_ccp1(int32 mode, int8 pwm);
_bif void set_pwm1_duty(int16 value);
// Constants used for SETUP_CCPx() are:
#define CCP_OFF
0
#define CCP_CAPTURE_FE
4
#define CCP_CAPTURE_RE
5
#define CCP_CAPTURE_DIV_4
6
#define CCP_CAPTURE_DIV_16
7
#define CCP_COMPARE_SET_ON_MATCH
8
#define CCP_COMPARE_CLR_ON_MATCH
9
#define CCP_COMPARE_INT
0xA
#define CCP_COMPARE_INT_AND_TOGGLE
0x2
#define CCP_COMPARE_RESET_TIMER
0xB
#define CCP_PWM
0xC
#define CCP_PWM_PLUS_1
0x1c
#define CCP_PWM_PLUS_2
0x2c
#define CCP_PWM_PLUS_3
0x3c
//#define CCP_USE_TIMER3
0x100 OBSOLETE, SEE TIMER-3
#word
CCP_1
=
getenv("SFR:CCPR1L")
#byte
CCP_1_LOW
=
getenv("SFR:CCPR1L")
#byte
CCP_1_HIGH =
getenv("SFR:CCPR1H")
// OR in one of the following to use timer 3 with a CCP unit
#define T3_CCP1_TO_2 0x48
#define T3_CCP2
0x8
// The following should be used with the ECCP unit only (or these in)
#define CCP_PWM_H_H
0x0c
#define CCP_PWM_H_L
0x0d
#define CCP_PWM_L_H
0x0e
#define CCP_PWM_L_L
0x0f
#define CCP_PWM_FULL_BRIDGE
#define CCP_PWM_FULL_BRIDGE_REV
#define CCP_PWM_HALF_BRIDGE

0x40
0xC0
0x80

#define CCP_SHUTDOWN_ON_COMP1
#define CCP_SHUTDOWN_ON_COMP2
#define CCP_SHUTDOWN_ON_COMP

0x100000
0x200000
0x300000
Page 5

#define
#define
#define
#define

CCP_SHUTDOWN_ON_INT0
CCP_SHUTDOWN_ON_COMP1_INT0
CCP_SHUTDOWN_ON_COMP2_INT0
CCP_SHUTDOWN_ON_COMP_INT0

18F4520.h
0x400000
0x500000
0x600000
0x700000

#define CCP_SHUTDOWN_AC_L
#define CCP_SHUTDOWN_AC_H
#define CCP_SHUTDOWN_AC_F

0x000000
0x040000
0x080000

#define CCP_SHUTDOWN_BD_L
#define CCP_SHUTDOWN_BD_H
#define CCP_SHUTDOWN_BD_F

0x000000
0x010000
0x020000

#define CCP_SHUTDOWN_RESTART

0x80000000

// CCP2 Prototypes:
_bif void setup_ccp2(int32 mode);
_bif void setup_ccp2(int32 mode, int8 pwm);
_bif void set_pwm2_duty(int16 value);
#word
CCP_2
=
getenv("SFR:CCPR2L")
#byte
CCP_2_LOW
=
getenv("SFR:CCPR2L")
#byte
CCP_2_HIGH =
getenv("SFR:CCPR2H")
////////////////////////////////////////////////////////////////// PSP
// PSP Functions: SETUP_PSP, PSP_INPUT_FULL(), PSP_OUTPUT_FULL(),
//
PSP_OVERFLOW(), INPUT_D(), OUTPUT_D()
// PSP Variables: PSP_DATA
// PSP Prototypes:
_bif void setup_psp(int8 mode);
_bif int1 psp_output_full(void);
_bif int1 psp_input_full(void);
_bif int1 psp_overflow(void);
// Constants used in SETUP_PSP() are:
#define PSP_ENABLED
0x10
#define PSP_DISABLED
0
#byte

PSP_DATA = 0xF83

////////////////////////////////////////////////////////////////// SPI
// SPI Functions: SETUP_SPI, SPI_WRITE, SPI_READ, SPI_DATA_IN
// SPI Prototypes:
_bif void setup_spi(int32 mode);
_bif void spi_write(int8 value);
_bif int8 spi_read(void);
_bif int8 spi_read(int8 value);
_bif int1 spi_data_in(void);
_bif void setup_spi2(int32 mode);
_bif void spi_write2(int8 value);
_bif int8 spi_read2(void);
_bif int8 spi_read2(int8 value);
_bif int1 spi_data_in2(void);
// Constants used in SETUP_SPI() are:
#define SPI_DISABLED
0x00
#define SPI_MASTER
0x20
#define SPI_SLAVE
0x24
#define SPI_SCK_IDLE_HIGH
0x10
#define SPI_SCK_IDLE_LOW
0x00
#define SPI_CLK_DIV_4
0x00
#define SPI_CLK_DIV_16
0x01
#define SPI_CLK_DIV_64
0x02
#define SPI_CLK_T2
0x03
#define SPI_SS_DISABLED
0x01
#define SPI_XMIT_L_TO_H
#define SPI_XMIT_H_TO_L

0x4000
0x0000
Page 6

18F4520.h
#define SPI_SAMPLE_AT_MIDDLE
#define SPI_SAMPLE_AT_END

0x0000
0x8000

//The following are provided for compatibility


#define SPI_L_TO_H
SPI_SCK_IDLE_LOW
#define SPI_H_TO_L
SPI_SCK_IDLE_HIGH
////////////////////////////////////////////////////////////////// UART
// UART Prototypes:
_bif void setup_uart(int32 baud);
_bif void setup_uart(int32 baud, int8 stream);
_bif void setup_uart(int32 baud, int8 stream, int32 clock);
_bif void set_uart_speed(int32 baud);
_bif void set_uart_speed(int32 baud, int8 stream);
_bif void set_uart_speed(int32 baud, int8 stream, int32 clock);
// Constants used in setup_uart() are:
// FALSE - Turn UART off
// TRUE - Turn UART on
#define UART_ADDRESS
2
#define UART_DATA
4
#define UART_AUTODETECT
8
#define UART_AUTODETECT_NOWAIT 9
#define UART_WAKEUP_ON_RDA
10
#define UART_SEND_BREAK
13
////////////////////////////////////////////////////////////////// COMP
// Comparator Variables: C1OUT, C2OUT
// Comparator Prototypes:
_bif void setup_comparator(int32 mode);
// Constants used in setup_comparator() are:
#define A0_A3_A1_A3 0xfff04
#define A0_A3_A1_A2_OUT_ON_A4_A5 0xfcf03
#define A0_A3_A1_A3_OUT_ON_A4_A5 0xbcf05
#define NC_NC_NC_NC 0x0ff07
#define A0_A3_A1_A2 0xfff02
#define A0_A3_NC_NC_OUT_ON_A4 0x9ef01
#define A0_VR_A1_VR 0x3ff06
#define A3_VR_A2_VR 0xcff0e
#define CP1_INVERT 0x0000010
#define CP2_INVERT 0x0000020
#bit C1OUT = 0xfb4.6
#bit C2OUT = 0xfb4.7
////////////////////////////////////////////////////////////////// VREF
// VREF Prototypes:
_bif void setup_vref(int8 mode);
// Constants used in setup_vref() are:
#define VREF_LOW 0xa0
#define VREF_HIGH 0x80
// Or (with |) the above with a number 0-15
#define VREF_F5
0x40
#define VREF_COMP 0x10
////////////////////////////////////////////////////////////////// VREF
// LVD Prototypes:
_bif void setup_low_volt_detect(int8 mode);
// Constants used in setup_low_volt_detect() are:
#define LVD_LVDIN
0x1F
#define LVD_45 0x1E
#define LVD_42 0x1D
#define LVD_40 0x1C
#define LVD_38 0x1B
#define LVD_36 0x1A
#define LVD_35 0x19
Page 7

18F4520.h
#define
#define
#define
#define
#define
#define
#define
#define
#define

LVD_33
LVD_30
LVD_28
LVD_27
LVD_25
LVD_24
LVD_23
LVD_22
LVD_21

0x18
0x17
0x16
0x15
0x14
0x13
0x12
0x11
0x10

#define LVD_TRIGGER_BELOW 0
#define LVD_TRIGGER_ABOVE 0x80
////////////////////////////////////////////////////////////////// INTERNAL RC
// Oscillator Prototypes:
_bif int8 setup_oscillator(int8 mode);
_bif int8 setup_oscillator(int8 mode, signed int8 tune);
// Constants used in setup_oscillator() are:
// First param:
#define OSC_31KHZ
0
#define OSC_125KHZ 0x10
#define OSC_250KHZ 0x20
#define OSC_500KHZ 0x30
#define OSC_1MHZ
0x40
#define OSC_2MHZ
0x50
#define OSC_4MHZ
0x60
#define OSC_8MHZ
0x70
#define OSC_16MHZ
0x4060
#define OSC_32MHZ
0x4070
// The following may be OR'ed in with the above using |
#define OSC_TIMER1 1
#define OSC_INTRC
2
#define OSC_NORMAL 0
// The following may be OR'ed in with the above using |
#define OSC_IDLE_MODE 0x80
#define OSC_31250
0x8000
#define OSC_PLL_ON 0x4000
#define OSC_PLL_OFF 0
// A second optional parameter may be used with this part to fine
// tune the speed (signed int,-32 to 31)
// Result may be (ignore all other bits)
#define OSC_STATE_STABLE 4
#define OSC_STATE_EXT_RUNNING 8
////////////////////////////////////////////////////////////////// ADC
// ADC Functions: SETUP_ADC(), SETUP_ADC_PORTS() (aka SETUP_PORT_A),
//
SET_ADC_CHANNEL(), READ_ADC()
// ADC Prototypes:
_bif void setup_adc(int16 mode);
_bif int8 read_adc(void);
_bif int8 read_adc(int8 mode);
_bif int16 read_adc(void);
_bif int16 read_adc(int8 mode);
_bif int1 adc_done(void);
// Constants used for SETUP_ADC() are:
#define ADC_OFF
0
// ADC Off
#define ADC_CLOCK_DIV_2
0x100
#define ADC_CLOCK_DIV_4
0x04
#define ADC_CLOCK_DIV_8
0x01
#define ADC_CLOCK_DIV_16
0x05
#define ADC_CLOCK_DIV_32
0x02
#define ADC_CLOCK_DIV_64
0x06
#define ADC_CLOCK_INTERNAL 0x07
// Internal 2-6us
Page 8

18F4520.h
// The following may be OR'ed in with the above using |
#define ADC_TAD_MUL_0
0x00
#define ADC_TAD_MUL_2
0x08
#define ADC_TAD_MUL_4
0x10
#define ADC_TAD_MUL_6
0x18
#define ADC_TAD_MUL_8
0x20
#define ADC_TAD_MUL_12
0x28
#define ADC_TAD_MUL_16
0x30
#define ADC_TAD_MUL_20
0x38
//ADC Prototypes:
_bif void setup_adc_ports(int8 pins);
_bif void setup_adc_ports(int8 pins, int8 reference);
_bif void set_adc_channel(int8 channel);
// Constants used in SETUP_ADC_PORTS() are:
// First argument:
#define NO_ANALOGS
0x0F
// None
#define ALL_ANALOG
0x00
// A0 A1 A2 A3 A5 E0 E1 E2 B2 B3 B1 B4 B0
#define AN0_TO_AN11 0x03
// A0 A1 A2 A3 A5 E0 E1 E2 B2 B3 B1 B4
#define AN0_TO_AN10 0x04
// A0 A1 A2 A3 A5 E0 E1 E2 B2 B3 B1
#define AN0_TO_AN9
0x05
// A0 A1 A2 A3 A5 E0 E1 E2 B2 B3
#define AN0_TO_AN8
0x06
// A0 A1 A2 A3 A5 E0 E1 E2 B2
#define AN0_TO_AN7
0x07
// A0 A1 A2 A3 A5 E0 E1 E2
#define AN0_TO_AN6
0x08
// A0 A1 A2 A3 A5 E0 E1
#define AN0_TO_AN5
0x09
// A0 A1 A2 A3 A5 E0
#define AN0_TO_AN4
0x0A
// A0 A1 A2 A3 A5
#define AN0_TO_AN3
0x0B
// A0 A1 A2 A3
#define AN0_TO_AN2
0x0C
// A0 A1 A2
#define AN0_TO_AN1
0x0D
// A0 A1
#define AN0
0x0E
// A0
#define AN0_TO_AN11_ANALOG
0x03
//!old only provided for compatibility
#define AN0_TO_AN10_ANALOG
0x04
//!old only provided for compatibility
#define AN0_TO_AN9_ANALOG
0x05
//!old only provided for compatibility
#define AN0_TO_AN8_ANALOG
0x06
//!old only provided for compatibility
#define AN0_TO_AN7_ANALOG
0x07
//!old only provided for compatibility
#define AN0_TO_AN6_ANALOG
0x08
//!old only provided for compatibility
#define AN0_TO_AN5_ANALOG
0x09
//!old only provided for compatibility
#define AN0_TO_AN4_ANALOG
0x0A
//!old only provided for compatibility
#define AN0_TO_AN3_ANALOG
0x0B
//!old only provided for compatibility
#define AN0_TO_AN2_ANALOG
0x0C
//!old only provided for compatibility
#define AN0_TO_AN1_ANALOG
0x0D
//!old only provided for compatibility
#define AN0_ANALOG
0x0E
//!old only provided for compatibility
// Optional Second argument:
#define VSS_VDD
#define VREF_VREF
#define VREF_VDD
#define VSS_VREF

0x00
0x30
0x20
0x10

//
//
//
//

Range
Range
Range
Range

0-Vdd
VrefL-VrefH
VrefL-Vdd
0-VrefH

// Constants used in READ_ADC() are:


#define ADC_START_AND_READ
7
// This is the default if nothing is specified
#define ADC_START_ONLY
1
#define ADC_READ_ONLY
6
////////////////////////////////////////////////////////////////// BIF
// Built In Functions Prototypes
//
// Math Prototypes:
_bif signed int8 abs(signed int8 x);
_bif signed int16 abs(signed int16 x);
_bif signed int32 abs(signed int32 x);
_bif float32 abs(float32 x);
_bif unsigned int16 _mul(unsigned int8, unsigned int8);
_bif signed int16 _mul(signed int8, signed int8);
_bif unsigned int32 _mul(unsigned int16, unsigned int16);
Page 9

18F4520.h
_bif signed int32 _mul(signed int16, signed int16);
// Memory
_bif int8
_bif void
_bif void
_bif void
_bif void
_bif void
num);

Manipulation Prototypes:
read_bank(int8 bank, int8 offset);
write_bank(int8 bank, int8 offset, int8 value);
strcpy(char* dest, char* src);
strcopy(char* dest, char* src);
memset(unsigned int8* destination, unsigned int8 value, unsigned int16 num);
memcpy(unsigned int8* destination, unsigned int8* source, unsigned int16

// String
_bif char
_bif char
_bif void

Prototypes:
toupper(char cvalue);
tolower(char cvalue);
sprintf(char* string, char* cstring, ...);

// Data Manipulators Prototypes:


_bif int1 shift_left(unsigned int8* address, unsigned int8 bytes, int1 value);
_bif int1 shift_right(unsigned int8* address, unsigned int8 bytes, int1 value);
_bif void rotate_left(unsigned int8* address, unsigned int8 bytes);
_bif void rotate_right(unsigned int8* address, unsigned int8 bytes);
_bif void swap(unsigned int8 value);
_bif unsigned int8 make8(unsigned int16 var, unsigned int8 offset);
_bif unsigned int8 make8(unsigned int32 var, unsigned int8 offset);
_bif unsigned int16 make16(unsigned int8 varhigh, unsigned int8 varlow);
_bif unsigned int32 make32(unsigned int16 var1);
_bif unsigned int32 make32(unsigned int16 var1, unsigned int16 var2);
_bif unsigned int32 make32(unsigned int16 var1, unsigned int8 var2);
_bif unsigned int32 make32(unsigned int16 var1, unsigned int8 var2, unsigned int8
var3);
_bif unsigned int32 make32(unsigned int8 var1);
_bif unsigned int32 make32(unsigned int8 var1, unsigned int8 var2);
_bif unsigned int32 make32(unsigned int8 var1, unsigned int8 var2, unsigned int8 var3);
_bif unsigned int32 make32(unsigned int8 var1, unsigned int8 var2, unsigned int8 var3,
unsigned int8 var4);
_bif unsigned int32 make32(unsigned int8 var1, unsigned int16 var2);
_bif unsigned int32 make32(unsigned int8 var1, unsigned int16 var2, unsigned int8
var3);
_bif unsigned int32 make32(unsigned int8 var1, unsigned int8 var2, unsigned int16
var3);
_bif void bit_set(unsigned int8 var, unsigned int8 bit);
_bif void bit_set(unsigned int16 var, unsigned int8 bit);
_bif void bit_set(unsigned int32 var, unsigned int8 bit);
_bif void bit_clear(unsigned int8 var, unsigned int8 bit);
_bif void bit_clear(unsigned int16 var, unsigned int8 bit);
_bif void bit_clear(unsigned int32 var, unsigned int8 bit);
_bif int1 bit_test(unsigned int8 var, unsigned int8 bit);
_bif int1 bit_test(unsigned int16 var, unsigned int8 bit);
_bif int1 bit_test(unsigned int32 var, unsigned int8 bit);
// #use delay() Prototypes:
_bif void delay_cycles(unsigned int8 count);
_bif void delay_ms(unsigned int16 time);
_bif void delay_us(unsigned int16 time);
// #use rs232() Prototypes:
_bif void putchar(char cdata);
_bif void putchar(char cdata, unsigned int8 stream);
_bif void puts(char* string);
_bif void puts(char* string, unsigned int8 stream);
_bif char getch(void);
_bif char getch(unsigned int8 stream);
_bif void gets(char* string);
_bif void gets(char* string, unsigned int8 stream);
_bif int1 kbhit(void);
Page 10

_bif
_bif
_bif
_bif
_bif
_bif
_bif
_bif
_bif
_bif
_bif
_bif
_bif

18F4520.h
int1 kbhit(unsigned int8 stream);
void printf(char* string, ...);
void fprintf(unsigned int8 stream, char* string, ...);
void putc_send(void);
void fputc_send(unsigned int8 stream);
int1 rcv_buffer_full(void);
int1 rcv_buffer_full(unsigned int8 stream);
unsigned int16 rcv_buffer_bytes(void);
unsigned int16 rcv_buffer_bytes(unsigned int8 stream);
int1 tx_buffer_full(void);
int1 tx_buffer_full(unsigned int8 stream);
unsigned int16 tx_buffer_bytes(void);
unsigned int16 tx_buffer_bytes(unsigned int8 stream);

// #use i2c() Prototypes:


_bif unsigned int8 i2c_read(void);
_bif unsigned int8 i2c_read(unsigned int8 stream);
_bif unsigned int8 i2c_read(unsigned int8 stream, int1 ack);
_bif int1 i2c_write(unsigned int8 data);
_bif int1 i2c_write(unsigned int8 stream, unsigned int8 data);
_bif void i2c_start(void);
_bif void i2c_start(unsigned int8 stream);
_bif void i2c_start(unsigned int8 stream, unsigned int8 restart);
_bif void i2c_stop(void);
_bif void i2c_stop(unsigned int8 stream);
_bif int8 i2c_isr_state(void);
_bif void i2c_slaveaddr(unsigned int8 addr);
_bif void i2c_slaveaddr(unsigned int8 stream, unsigned int8 addr);
_bif int1 i2c_poll(void);
_bif int1 i2c_poll(unsigned int8 stream);
_bif void i2c_init(unsigned int32 baud);
_bif void i2c_init(unsigned int8 stream, unsigned int32 baud);
// #use spi() Prototypes:
_bif unsigned int8 spi_xfer(void);
_bif unsigned int16 spi_xfer(void);
_bif unsigned int32 spi_xfer(void);
_bif unsigned int8 spi_xfer(unsigned int8 data);
_bif unsigned int16 spi_xfer(unsigned int16 data);
_bif unsigned int32 spi_xfer(unsigned int32 data);
_bif unsigned int8 spi_xfer(unsigned int8 stream, unsigned int8 data);
_bif unsigned int16 spi_xfer(unsigned int8 stream, unsigned int16 data);
_bif unsigned int32 spi_xfer(unsigned int8 stream, unsigned int32 data);
_bif unsigned int8 spi_xfer(unsigned int8 stream, unsigned int8 data, unsigned int8
bits);
_bif unsigned int16 spi_xfer(unsigned int8 stream, unsigned int16 data, unsigned int8
bits);
_bif unsigned int32 spi_xfer(unsigned int8 stream, unsigned int32 data, unsigned int8
bits);
_bif void spi_init(unsigned int32 baud);
_bif void spi_init(unsigned int8 stream, unsigned int32 baud);
_bif void spi_speed(unsigned int32 baud);
_bif void spi_speed(unsigned int8 stream, unsigned int32 baud);
_bif void spi_speed(unsigned int8 stream, unsigned int32 baud, unsigned int32 clock);
_bif void spi_prewrite(unsigned int8 data);
_bif void spi_prewrite(unsigned int16 data);
_bif void spi_prewrite(unsigned int32 data);
_bif void spi_prewrite(unsigned int8, unsigned int8 data);
_bif void spi_prewrite(unsigned int8, unsigned int16 data);
_bif void spi_prewrite(unsigned int8, unsigned int32 data);
_bif unsigned int8 spi_xfer_in(void);
_bif unsigned int16 spi_xfer_in(void);
_bif unsigned int32 spi_xfer_in(void);
_bif unsigned int8 spi_xfer_in(unsigned int8 bits);
_bif unsigned int16 spi_xfer_in(unsigned int8 bits);
Page 11

_bif
_bif
_bif
_bif

unsigned
unsigned
unsigned
unsigned

18F4520.h
int32 spi_xfer_in(unsigned int8 bits);
int8 spi_xfer_in(unsigned int8 stream, unsigned int8 bits);
int16 spi_xfer_in(unsigned int8 stream, unsigned int8 bits);
int32 spi_xfer_in(unsigned int8 stream, unsigned int8 bits);

// #use rtos() Prototypes:


_bif void rtos_run(void);
_bif void rtos_yield(void);
_bif void rtos_enable(unsigned int8 task);
_bif void rtos_disable(unsigned int8 task);
_bif void rtos_terminate(void);
_bif void rtos_await(int1 flag);
_bif void rtos_wait(unsigned int8 sem);
_bif void rtos_signal(unsigned int8 sem);
_bif void rtos_msg_send(unsigned int8 task, unsigned int8 msg);
_bif unsigned int8 rtos_msg_read(void);
_bif unsigned int8 rtos_msg_poll(void);
_bif int1 rtos_overrun(unsigned int8 task);
_bif void rtos_stats(unsigned int8 task, unsigned int8* stat);
// #use timer() Prototypes:
_bif unsigned int8 get_ticks(void);
_bif unsigned int16 get_ticks(void);
_bif unsigned int32 get_ticks(void);
_bif unsigned int8 get_ticks(unsigned int8 stream);
_bif unsigned int16 get_ticks(unsigned int8 stream);
_bif unsigned int32 get_ticks(unsigned int8 stream);
_bif void set_ticks(unsigned int8 value);
_bif void set_ticks(unsigned int16 value);
_bif void set_ticks(unsigned int32 value);
_bif void set_ticks(unsigned int8 stream, unsigned int8 value);
_bif void set_ticks(unsigned int8 stream, unsigned int16 value);
_bif void set_ticks(unsigned int8 stream, unsigned int32 value);
// #use pwm() Prototypes:
_bif void pwm_on(void);
_bif void pwm_on(unsigned int8 stream);
_bif void pwm_off(void);
_bif void pwm_off(unsigned int8 stream);
_bif void pwm_set_duty(unsigned int16 duty);
_bif void pwm_set_duty(unsigned int8 stream, unsigned int16 duty);
_bif void pwm_set_duty_percent(unsigned int16 percent);
_bif void pwm_set_duty_percent(unsigned int8 stream, unsigned int16 percent);
_bif void pwm_set_frequency(unsigned int32 frequency);
_bif void pwm_set_frequency(unsigned int8 stream, unsigned int32 frequency);
// #use capture() Prototypes:
_bif unsigned int16 get_capture_time(void);
_bif unsigned int16 get_capture_time(unsigned int8 stream);
_bif int1 get_capture_event(void);
_bif int1 get_capture_event(unsigned int8 stream);
// Enviroment Prototypes:
//_bif unsigned int8 getenv(char* cstring);
// Address Prototypes:
#ifndef __ADDRESS__
#if defined(__PCM__) || define(__PCB__)
typedef unsigned int16 __ADDRESS__;
#else
typedef unsigned int32 __ADDRESS__;
#endif
#endif
_bif void goto_address(__ADDRESS__ address);
_bif __ADDRESS__ label_address(__ADDRESS__ label);
Page 12

18F4520.h
// Program Memory Prototypes:
_bif void read_program_memory(__ADDRESS__ address, unsigned int8* dataptr, unsigned
int16 count);
_bif unsigned int16 read_program_eeprom(__ADDRESS__ address);
_bif void erase_program_eeprom(__ADDRESS__ address);
_bif void write_program_memory(__ADDRESS__ address, unsigned int8* dataptr, unsigned
int16 count);
_bif void write_program_eeprom(__ADDRESS__ address, unsigned int16 data);
// EEPROM Prototypes:
#ifndef __EEADDRESS__
#if getenv("DATA_EEPROM")>=0x100
typedef unsigned int16 __EEADDRESS__;
#else
typedef unsigned int8 __EEADDRESS__;
#endif
#endif
_bif unsigned int8 read_eeprom(__EEADDRESS__ address);
_bif void write_eeprom(__EEADDRESS__ address, unsigned int8 value);
////////////////////////////////////////////////////////////////// INT
// Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(),
//
CLEAR_INTERRUPT(), INTERRUPT_ACTIVE(),
//
EXT_INT_EDGE()
// INT Prototypes:
_bif void enable_interrupts(int32 interrupt);
_bif void disable_interrupts(int32 interrupt);
_bif void clear_interrupt(int32 interrupt);
_bif int1 interrupt_active(int32 interrupt);
_bif int1 interrupt_enabled(int32 interrupt);
_bif void ext_int_edge(int8 source, int8 edge);
_bif void jump_to_irs(int16 address);
// Constants used in EXT_INT_EDGE() are:
#define L_TO_H
0x40
#define H_TO_L
0
// Constants used in ENABLE/DISABLE_INTERRUPTS() are:
#define GLOBAL
0xF2C0
#define PERIPH
0xF240
#define INT_RTCC
0x00F220
#define INT_TIMER0
0x00F220
#define INT_TIMER1
0x009D01
#define INT_TIMER2
0x009D02
#define INT_TIMER3
0x00A002
#define INT_EXT_L2H
0x5000F210
#define INT_EXT_H2L
0x6000F210
#define INT_EXT
0x00F210
#define INT_EXT1_L2H
0x5001F008
#define INT_EXT1_H2L
0x6001F008
#define INT_EXT1
0x00F008
#define INT_EXT2_L2H
0x5002F010
#define INT_EXT2_H2L
0x6002F010
#define INT_EXT2
0x00F010
#define INT_RB
0x00FFF208
#define INT_PSP
0x009D80
#define INT_AD
0x009D40
#define INT_RDA
0x009D20
#define INT_TBE
0x009D10
#define INT_SSP
0x009D08
#define INT_CCP1
0x009D04
#define INT_CCP2
0x00A001
#define INT_BUSCOL
0x00A008
#define INT_LOWVOLT
0x00A004
#define INT_COMP
0x00A040
#define INT_EEPROM
0x00A010
Page 13

#define INT_OSCF
#define INT_HLVD

18F4520.h
0x00A080
0x00A004

#list

Page 14

You might also like