- //////// Standard Header file for the PIC16F877 device ////////
- #device PIC16F877
- #nolist
- /////////////////////////////// I/O definitions for INPUT() and OUTPUT_xxx()
- #define PIN_A0 40
- #define PIN_A1 41
- #define PIN_A2 42
- #define PIN_A3 43
- #define PIN_A4 44
- #define PIN_A5 45
- #define PIN_B0 48
- #define PIN_B1 49
- #define PIN_B2 50
- #define PIN_B3 51
- #define PIN_B4 52
- #define PIN_B5 53
- #define PIN_B6 54
- #define PIN_B7 55
- #define PIN_C0 56
- #define PIN_C1 57
- #define PIN_C2 58
- #define PIN_C3 59
- #define PIN_C4 60
- #define PIN_C5 61
- #define PIN_C6 62
- #define PIN_C7 63
- #define PIN_D0 64
- #define PIN_D1 65
- #define PIN_D2 66
- #define PIN_D3 67
- #define PIN_D4 68
- #define PIN_D5 69
- #define PIN_D6 70
- #define PIN_D7 71
- #define PIN_E0 72
- #define PIN_E1 73
- #define PIN_E2 74
- /////////////////////////////// Useful defines
- #define FALSE 0
- #define TRUE 1
- #define BYTE int
- #define BOOLEAN short int
- #define getc getch
- #define getchar getch
- #define puts(s) {printf(s); putchar(13); putchar(10);}
- #define putc putchar
- /////////////////////////////// Constants used for RESTART_CAUSE()
- #define WDT_FROM_SLEEP 0
- #define WDT_TIMEOUT 8
- #define MCLR_FROM_SLEEP 16
- #define NORMAL_POWER_UP 24
- /////////////////////////////// Constants used for SETUP_COUNTERS()
- #define RTCC_INTERNAL 0
- #define RTCC_EXT_L_TO_H 32
- #define RTCC_EXT_H_TO_L 48
- #define RTCC_DIV_2 0
- #define RTCC_DIV_4 1
- #define RTCC_DIV_8 2
- #define RTCC_DIV_16 3
- #define RTCC_DIV_32 4
- #define RTCC_DIV_64 5
- #define RTCC_DIV_128 6
- #define RTCC_DIV_256 7
- #define WDT_18MS 8
- #define WDT_36MS 9
- #define WDT_72MS 10
- #define WDT_144MS 11
- #define WDT_288MS 12
- #define WDT_576MS 13
- #define WDT_1152MS 14
- #define WDT_2304MS 15
- #define L_TO_H 0x40
- #define H_TO_L 0
- #define RTCC_ZERO 0x0B20 // Used for ENABLE/DISABLE INTERRUPTS
- #define INT_RTCC 0x0B20 // Used for ENABLE/DISABLE INTERRUPTS
- #define RB_CHANGE 0x0B08 // Used for ENABLE/DISABLE INTERRUPTS
- #define INT_RB 0x0B08 // Used for ENABLE/DISABLE INTERRUPTS
- #define EXT_INT 0x0B10 // Used for ENABLE/DISABLE INTERRUPTS
- #define INT_EXT 0x0B10 // Used for ENABLE/DISABLE INTERRUPTS
- #define GLOBAL 0x0BC0 // Used for ENABLE/DISABLE INTERRUPTS
- ///////////////////////////////////// Constants used for Timer1 and Timer2
- #define T1_DISABLED 0
- #define T1_INTERNAL 5
- #define T1_EXTERNAL 7
- #define T1_EXTERNAL_SYNC 3
- #define T1_CLK_OUT 8
- #define T1_DIV_BY_1 0
- #define T1_DIV_BY_2 0x10
- #define T1_DIV_BY_4 0x20
- #define T1_DIV_BY_8 0x30
- #byte TIMER_1_LOW= 0x0e
- #byte TIMER_1_HIGH= 0x0f
- #define T2_DISABLED 0
- #define T2_DIV_BY_1 4
- #define T2_DIV_BY_4 5
- #define T2_DIV_BY_16 6
- #byte TIMER_2= 0x11
- #define INT_TIMER1 0x8C01 // Used for ENABLE/DISABLE INTERRUPTS
- #define INT_TIMER2 0x8C02 // Used for ENABLE/DISABLE INTERRUPTS
- //////////////////////////////////// Constants used for SETUP_CCP1()
- #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_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
- long CCP_1;
- #byte CCP_1 = 0x15
- #byte CCP_1_LOW= 0x15
- #byte CCP_1_HIGH= 0x16
- #define INT_CCP1 0x8C04 // Used for ENABLE/DISABLE INTERRUPTS
- //////////////////////////////////// Constants used for SETUP_CCP2()
- long CCP_2;
- #byte CCP_2 = 0x1B
- #byte CCP_2_LOW= 0x1B
- #byte CCP_2_HIGH= 0x1C
- #define INT_CCP2 0x8D01 // Used for ENABLE/DISABLE INTERRUPTS
- //////////////////////////////////// Constants used for SETUP_PSP()
- #define PSP_ENABLED 0x10
- #define PSP_DISABLED 0
- #byte PSP_DATA= 8
- #define INT_PSP 0x8C80 // Used for ENABLE/DISABLE INTERRUPTS
- //////////////////////////////////// Constants used in SETUP_SSP()
- #define SPI_MASTER 0x20
- #define SPI_SLAVE 0x24
- #define SPI_L_TO_H 0
- #define SPI_H_TO_L 0x10
- #define SPI_CLK_DIV_4 0
- #define SPI_CLK_DIV_16 1
- #define SPI_CLK_DIV_64 2
- #define SPI_CLK_T2 3
- #define SPI_SS_DISABLED 1
- #define INT_SSP 0x8C08 // Used for ENABLE/DISABLE INTERRUPTS
- #define SPI_SAMPLE_AT_END 0x8000
- #define SPI_XMIT_L_TO_H 0x4000
- #define INT_RDA 0x8C20 // Used for ENABLE/DISABLE INTERRUPTS
- #define INT_TBE 0x8C10 // Used for ENABLE/DISABLE INTERRUPTS
- #define INT_BUSCOL 0x8D08 // Used for ENABLE/DISABLE INTERRUPTS
- ///////////////////////////////////// Constants used for SETUP_ADC_PORTS()
- #define NO_ANALOGS 0x86 // None
- #define ALL_ANALOG 0x80 // RA0 RA1 RA2 RA3 RA5 RE0 RE1 RE2 Ref=Vdd
- #define ANALOG_RA3_REF 0x81 // RA0 RA1 RA2 RA5 RE0 RE1 RE2 Ref=RA3
- #define A_ANALOG 0x82 // RA0 RA1 RA2 RA3 RA5 Ref=Vdd
- #define A_ANALOG_RA3_REF 0x83 // RA0 RA1 RA2 RA5 Ref=RA3
- #define RA0_RA1_RA3_ANALOG 0x84 // RA0 RA1 RA3 Ref=Vdd
- #define RA0_RA1_ANALOG_RA3_REF 0x85 // RA0 RA1 Ref=RA3
- #define ANALOG_RA3_RA2_REF 0x88 // RA0 RA1 RA5 RE0 RE1 RE2 Ref=RA2,RA3
- #define ANALOG_NOT_RE1_RE2 0x89 // RA0 RA1 RA2 RA3 RA5 RE0 Ref=Vdd
- #define ANALOG_NOT_RE1_RE2_REF_RA3 0x8A // RA0 RA1 RA2 RA5 RE0 Ref=RA3
- #define ANALOG_NOT_RE1_RE2_REF_RA3_RA2 0x8B // RA0 RA1 RA5 RE0 Ref=RA2,RA3
- #define A_ANALOG_RA3_RA2_REF 0x8C // RA0 RA1 RA5 Ref=RA2,RA3
- #define RA0_RA1_ANALOG_RA3_RA2_REF 0x8D // RA0 RA1 Ref=RA2,RA3
- #define RA0_ANALOG 0x8E // RA0
- #define RA0_ANALOG_RA3_RA2_REF 0x8F // RA0 Ref=RA2,RA3
- ///////////////////////////////////// Constants used for SETUP_ADC()
- #define ADC_OFF 0
- #define ADC_CLOCK_DIV_2 1
- #define ADC_CLOCK_DIV_8 0x41
- #define ADC_CLOCK_DIV_32 0x81
- #define ADC_CLOCK_INTERNAL 0xc1
- #define ADC_DONE 0x8C40 // Used for ENABLE/DISABLE INTERRUPTS
- #define INT_ADC 0x8C40 // Used for ENABLE/DISABLE INTERRUPTS
- #define INT_EEPROM 0x8D10 // Used for ENABLE/DISABLE INTERRUPTS
- #list