-- =================================================== -- Title: JalV2 device include file for PIC 16F722A -- -- Author: Rob Hamerling, Copyright (c) 2008..2011, all rights reserved. -- -- Adapted-by: -- -- Revision: $Revision: 2828 $ -- -- Compiler: 2.4o -- -- This file is part of jallib (http://jallib.googlecode.com) -- Released under the ZLIB license (http://www.opensource.org/licenses/zlib-license.html) -- -- Description: -- Device include file for pic16f722a, containing: -- - Declaration of ports and pins of the chip. -- - Procedures for shadowing of ports and pins -- to circumvent the read-modify-write problem. -- - Symbolic definitions for configuration bits (fuses) -- - Some device dependent procedures for common -- operations, like: -- . enable_digital_io() -- -- Sources: -- - x:/mplab880/mplab ide/device/pic16f722a.dev -- - x:/mplab880/mpasm suite/lkr/16f722a_g.lkr -- -- Notes: -- - Created with Dev2Jal Rexx script version 0.1.24 -- - File creation date/time: 9 Nov 2011 11:12 -- -- =================================================== -- const word DEVICE_ID = 0x1B20 const byte PICTYPE[] = "16F722A" const byte DATASHEET[] = "41417A" const byte PGMSPEC[] = "41332D" -- -- Vdd Range: 1.800-5.500 Nominal: 5.000 -- Vpp Range: 8.000-9.000 Default: 8.500 -- -- --------------------------------------------------- -- include chipdef_jallib -- common constants -- pragma target cpu PIC_14 -- (banks=4) pragma target chip 16f722a pragma target bank 0x0080 pragma target page 0x0800 pragma stack 8 pragma code 2048 -- (words) pragma ID 0x2000,4 pragma data 0x20-0x6F,0xA0-0xBF pragma shared 0x70-0x7F -- var volatile byte _pic_accum shared at 0x7E -- (compiler) var volatile byte _pic_isr_w shared at 0x7F -- (compiler) -- const word _FUSES_CT = 2 const word _FUSE_BASE[_FUSES_CT] = { 0x2007,0x2008 } const word _FUSES[_FUSES_CT] = { 0b_0011_1111_1111_1111, -- CONFIG1 0b_0011_1111_1111_1111 } -- CONFIG2 -- -- ------------------------------------------------ var volatile byte INDF at { 0x0,0x80,0x100,0x180 } var volatile byte _ind at { 0x0,0x80,0x100,0x180 } -- (compiler) -- ------------------------------------------------ var volatile byte TMR0 at { 0x1,0x101 } -- ------------------------------------------------ var volatile byte PCL at { 0x2,0x82,0x102,0x182 } var volatile byte _pcl at { 0x2,0x82,0x102,0x182 } -- (compiler) -- ------------------------------------------------ var volatile byte STATUS at { 0x3,0x83,0x103,0x183 } var volatile bit STATUS_IRP at STATUS : 7 var volatile bit*2 STATUS_RP at STATUS : 5 var volatile bit STATUS_NTO at STATUS : 4 var volatile bit STATUS_NPD at STATUS : 3 var volatile bit STATUS_Z at STATUS : 2 var volatile bit STATUS_DC at STATUS : 1 var volatile bit STATUS_C at STATUS : 0 var volatile byte _status at { 0x3,0x83,0x103,0x183 } -- (compiler) const byte _irp = 7 -- (compiler) const byte _rp1 = 6 -- (compiler) const byte _rp0 = 5 -- (compiler) const byte _not_to = 4 -- (compiler) const byte _not_pd = 3 -- (compiler) const byte _z = 2 -- (compiler) const byte _dc = 1 -- (compiler) const byte _c = 0 -- (compiler) -- ------------------------------------------------ var volatile byte FSR at { 0x4,0x84,0x104,0x184 } var volatile byte _fsr at { 0x4,0x84,0x104,0x184 } -- (compiler) -- ------------------------------------------------ var volatile byte _PORTA at { 0x5 } -- var byte PORTA at _PORTA var byte _PORTA_shadow -- procedure PORTA'put(byte in x at _PORTA_shadow) is pragma inline _PORTA = _PORTA_shadow end procedure -- procedure PORTA_low'put(byte in x) is pragma inline _PORTA_shadow = (_PORTA_shadow & 0xF0) | (x & 0x0F) _PORTA = _PORTA_shadow end procedure function PORTA_low'get() return byte is pragma inline return (PORTA & 0x0F) end function -- procedure PORTA_high'put(byte in x) is pragma inline _PORTA_shadow = (_PORTA_shadow & 0x0F) | (x << 4) _PORTA = _PORTA_shadow end procedure function PORTA_high'get() return byte is pragma inline return (PORTA >> 4) end function -- var volatile bit PORTA_RA7 at _PORTA : 7 var volatile bit pin_A7 at _PORTA : 7 alias pin_OSC1 is pin_A7 alias pin_CLKIN is pin_A7 -- procedure pin_A7'put(bit in x at _PORTA_shadow : 7) is pragma inline _PORTA = _PORTA_shadow end procedure -- var volatile bit PORTA_RA6 at _PORTA : 6 var volatile bit pin_A6 at _PORTA : 6 alias pin_OSC2 is pin_A6 alias pin_CLKOUT is pin_A6 alias pin_VCAP_RA6 is pin_A6 -- procedure pin_A6'put(bit in x at _PORTA_shadow : 6) is pragma inline _PORTA = _PORTA_shadow end procedure -- var volatile bit PORTA_RA5 at _PORTA : 5 var volatile bit pin_A5 at _PORTA : 5 alias pin_AN4 is pin_A5 alias pin_CPS7 is pin_A5 alias pin_SS_RA5 is pin_A5 alias pin_VCAP_RA5 is pin_A5 -- procedure pin_A5'put(bit in x at _PORTA_shadow : 5) is pragma inline _PORTA = _PORTA_shadow end procedure -- var volatile bit PORTA_RA4 at _PORTA : 4 var volatile bit pin_A4 at _PORTA : 4 alias pin_CPS6 is pin_A4 alias pin_T0CKI is pin_A4 -- procedure pin_A4'put(bit in x at _PORTA_shadow : 4) is pragma inline _PORTA = _PORTA_shadow end procedure -- var volatile bit PORTA_RA3 at _PORTA : 3 var volatile bit pin_A3 at _PORTA : 3 alias pin_AN3 is pin_A3 alias pin_VREF is pin_A3 -- procedure pin_A3'put(bit in x at _PORTA_shadow : 3) is pragma inline _PORTA = _PORTA_shadow end procedure -- var volatile bit PORTA_RA2 at _PORTA : 2 var volatile bit pin_A2 at _PORTA : 2 alias pin_AN2 is pin_A2 -- procedure pin_A2'put(bit in x at _PORTA_shadow : 2) is pragma inline _PORTA = _PORTA_shadow end procedure -- var volatile bit PORTA_RA1 at _PORTA : 1 var volatile bit pin_A1 at _PORTA : 1 alias pin_AN1 is pin_A1 -- procedure pin_A1'put(bit in x at _PORTA_shadow : 1) is pragma inline _PORTA = _PORTA_shadow end procedure -- var volatile bit PORTA_RA0 at _PORTA : 0 var volatile bit pin_A0 at _PORTA : 0 alias pin_AN0 is pin_A0 alias pin_SS_RA0 is pin_A0 alias pin_VCAP_RA0 is pin_A0 -- procedure pin_A0'put(bit in x at _PORTA_shadow : 0) is pragma inline _PORTA = _PORTA_shadow end procedure -- -- ------------------------------------------------ var volatile byte _PORTB at { 0x6 } -- var byte PORTB at _PORTB var byte _PORTB_shadow -- procedure PORTB'put(byte in x at _PORTB_shadow) is pragma inline _PORTB = _PORTB_shadow end procedure -- procedure PORTB_low'put(byte in x) is pragma inline _PORTB_shadow = (_PORTB_shadow & 0xF0) | (x & 0x0F) _PORTB = _PORTB_shadow end procedure function PORTB_low'get() return byte is pragma inline return (PORTB & 0x0F) end function -- procedure PORTB_high'put(byte in x) is pragma inline _PORTB_shadow = (_PORTB_shadow & 0x0F) | (x << 4) _PORTB = _PORTB_shadow end procedure function PORTB_high'get() return byte is pragma inline return (PORTB >> 4) end function -- var volatile bit PORTB_RB7 at _PORTB : 7 var volatile bit pin_B7 at _PORTB : 7 alias pin_ICSPDAT is pin_B7 alias pin_ICCDAT is pin_B7 -- procedure pin_B7'put(bit in x at _PORTB_shadow : 7) is pragma inline _PORTB = _PORTB_shadow end procedure -- var volatile bit PORTB_RB6 at _PORTB : 6 var volatile bit pin_B6 at _PORTB : 6 alias pin_ICSPCLK is pin_B6 alias pin_ICDCLK is pin_B6 -- procedure pin_B6'put(bit in x at _PORTB_shadow : 6) is pragma inline _PORTB = _PORTB_shadow end procedure -- var volatile bit PORTB_RB5 at _PORTB : 5 var volatile bit pin_B5 at _PORTB : 5 alias pin_AN13 is pin_B5 alias pin_CPS5 is pin_B5 alias pin_T1G is pin_B5 -- procedure pin_B5'put(bit in x at _PORTB_shadow : 5) is pragma inline _PORTB = _PORTB_shadow end procedure -- var volatile bit PORTB_RB4 at _PORTB : 4 var volatile bit pin_B4 at _PORTB : 4 alias pin_AN11 is pin_B4 alias pin_CPS4 is pin_B4 -- procedure pin_B4'put(bit in x at _PORTB_shadow : 4) is pragma inline _PORTB = _PORTB_shadow end procedure -- var volatile bit PORTB_RB3 at _PORTB : 3 var volatile bit pin_B3 at _PORTB : 3 alias pin_AN9 is pin_B3 alias pin_CPS3 is pin_B3 alias pin_CCP2_RB3 is pin_B3 -- procedure pin_B3'put(bit in x at _PORTB_shadow : 3) is pragma inline _PORTB = _PORTB_shadow end procedure -- var volatile bit PORTB_RB2 at _PORTB : 2 var volatile bit pin_B2 at _PORTB : 2 alias pin_AN8 is pin_B2 alias pin_CPS2 is pin_B2 -- procedure pin_B2'put(bit in x at _PORTB_shadow : 2) is pragma inline _PORTB = _PORTB_shadow end procedure -- var volatile bit PORTB_RB1 at _PORTB : 1 var volatile bit pin_B1 at _PORTB : 1 alias pin_AN10 is pin_B1 alias pin_CPS1 is pin_B1 -- procedure pin_B1'put(bit in x at _PORTB_shadow : 1) is pragma inline _PORTB = _PORTB_shadow end procedure -- var volatile bit PORTB_RB0 at _PORTB : 0 var volatile bit pin_B0 at _PORTB : 0 alias pin_AN12 is pin_B0 alias pin_CPS0 is pin_B0 alias pin_INT is pin_B0 -- procedure pin_B0'put(bit in x at _PORTB_shadow : 0) is pragma inline _PORTB = _PORTB_shadow end procedure -- -- ------------------------------------------------ var volatile byte _PORTC at { 0x7 } -- var byte PORTC at _PORTC var byte _PORTC_shadow -- procedure PORTC'put(byte in x at _PORTC_shadow) is pragma inline _PORTC = _PORTC_shadow end procedure -- procedure PORTC_low'put(byte in x) is pragma inline _PORTC_shadow = (_PORTC_shadow & 0xF0) | (x & 0x0F) _PORTC = _PORTC_shadow end procedure function PORTC_low'get() return byte is pragma inline return (PORTC & 0x0F) end function -- procedure PORTC_high'put(byte in x) is pragma inline _PORTC_shadow = (_PORTC_shadow & 0x0F) | (x << 4) _PORTC = _PORTC_shadow end procedure function PORTC_high'get() return byte is pragma inline return (PORTC >> 4) end function -- var volatile bit PORTC_RC7 at _PORTC : 7 var volatile bit pin_C7 at _PORTC : 7 alias pin_RX is pin_C7 alias pin_RX1 is pin_C7 alias pin_DT is pin_C7 -- procedure pin_C7'put(bit in x at _PORTC_shadow : 7) is pragma inline _PORTC = _PORTC_shadow end procedure -- var volatile bit PORTC_RC6 at _PORTC : 6 var volatile bit pin_C6 at _PORTC : 6 alias pin_TX is pin_C6 alias pin_TX1 is pin_C6 alias pin_CK is pin_C6 -- procedure pin_C6'put(bit in x at _PORTC_shadow : 6) is pragma inline _PORTC = _PORTC_shadow end procedure -- var volatile bit PORTC_RC5 at _PORTC : 5 var volatile bit pin_C5 at _PORTC : 5 alias pin_SDO is pin_C5 -- procedure pin_C5'put(bit in x at _PORTC_shadow : 5) is pragma inline _PORTC = _PORTC_shadow end procedure -- var volatile bit PORTC_RC4 at _PORTC : 4 var volatile bit pin_C4 at _PORTC : 4 alias pin_SDI is pin_C4 alias pin_SDA is pin_C4 -- procedure pin_C4'put(bit in x at _PORTC_shadow : 4) is pragma inline _PORTC = _PORTC_shadow end procedure -- var volatile bit PORTC_RC3 at _PORTC : 3 var volatile bit pin_C3 at _PORTC : 3 alias pin_SCK is pin_C3 alias pin_SCL is pin_C3 -- procedure pin_C3'put(bit in x at _PORTC_shadow : 3) is pragma inline _PORTC = _PORTC_shadow end procedure -- var volatile bit PORTC_RC2 at _PORTC : 2 var volatile bit pin_C2 at _PORTC : 2 alias pin_CCP1 is pin_C2 -- procedure pin_C2'put(bit in x at _PORTC_shadow : 2) is pragma inline _PORTC = _PORTC_shadow end procedure -- var volatile bit PORTC_RC1 at _PORTC : 1 var volatile bit pin_C1 at _PORTC : 1 alias pin_T1OSI is pin_C1 alias pin_CCP2_RC1 is pin_C1 -- procedure pin_C1'put(bit in x at _PORTC_shadow : 1) is pragma inline _PORTC = _PORTC_shadow end procedure -- var volatile bit PORTC_RC0 at _PORTC : 0 var volatile bit pin_C0 at _PORTC : 0 alias pin_T1OSO is pin_C0 alias pin_T1CKI is pin_C0 -- procedure pin_C0'put(bit in x at _PORTC_shadow : 0) is pragma inline _PORTC = _PORTC_shadow end procedure -- -- ------------------------------------------------ var volatile byte _PORTE at { 0x9 } -- var byte PORTE at _PORTE var byte _PORTE_shadow -- procedure PORTE'put(byte in x at _PORTE_shadow) is pragma inline _PORTE = _PORTE_shadow end procedure -- procedure PORTE_low'put(byte in x) is pragma inline _PORTE_shadow = (_PORTE_shadow & 0xF0) | (x & 0x0F) _PORTE = _PORTE_shadow end procedure function PORTE_low'get() return byte is pragma inline return (PORTE & 0x0F) end function -- procedure PORTE_high'put(byte in x) is pragma inline _PORTE_shadow = (_PORTE_shadow & 0x0F) | (x << 4) _PORTE = _PORTE_shadow end procedure function PORTE_high'get() return byte is pragma inline return (PORTE >> 4) end function -- var volatile bit PORTE_RE3 at _PORTE : 3 var volatile bit pin_E3 at _PORTE : 3 alias pin_MCLR is pin_E3 alias pin_VPP is pin_E3 -- procedure pin_E3'put(bit in x at _PORTE_shadow : 3) is pragma inline _PORTE = _PORTE_shadow end procedure -- -- ------------------------------------------------ var volatile byte PCLATH at { 0xA,0x8A,0x10A,0x18A } var volatile bit*5 PCLATH_PCLATH at PCLATH : 0 var volatile byte _pclath at { 0xA,0x8A,0x10A,0x18A } -- (compiler) -- ------------------------------------------------ var volatile byte INTCON at { 0xB,0x8B,0x10B,0x18B } var volatile bit INTCON_GIE at INTCON : 7 var volatile bit INTCON_PEIE at INTCON : 6 var volatile bit INTCON_T0IE at INTCON : 5 var volatile bit INTCON_TMR0IE at INTCON : 5 var volatile bit INTCON_INTE at INTCON : 4 var volatile bit INTCON_RBIE at INTCON : 3 var volatile bit INTCON_T0IF at INTCON : 2 var volatile bit INTCON_TMR0IF at INTCON : 2 var volatile bit INTCON_INTF at INTCON : 1 var volatile bit INTCON_RBIF at INTCON : 0 -- ------------------------------------------------ var volatile byte PIR1 at { 0xC } var volatile bit PIR1_TMR1GIF at PIR1 : 7 var volatile bit PIR1_ADIF at PIR1 : 6 var volatile bit PIR1_RCIF at PIR1 : 5 var volatile bit PIR1_TXIF at PIR1 : 4 var volatile bit PIR1_SSPIF at PIR1 : 3 var volatile bit PIR1_CCP1IF at PIR1 : 2 var volatile bit PIR1_TMR2IF at PIR1 : 1 var volatile bit PIR1_TMR1IF at PIR1 : 0 -- ------------------------------------------------ var volatile byte PIR2 at { 0xD } var volatile bit PIR2_CCP2IF at PIR2 : 0 -- ------------------------------------------------ var volatile word TMR1 at { 0xE } -- ------------------------------------------------ var volatile byte TMR1L at { 0xE } -- ------------------------------------------------ var volatile byte TMR1H at { 0xF } -- ------------------------------------------------ var volatile byte T1CON at { 0x10 } var volatile bit*2 T1CON_TMR1CS at T1CON : 6 var volatile bit*2 T1CON_T1CKPS at T1CON : 4 var volatile bit T1CON_T1OSCEN at T1CON : 3 var volatile bit T1CON_NT1SYNC at T1CON : 2 var volatile bit T1CON_TMR1ON at T1CON : 0 -- ------------------------------------------------ var volatile byte TMR2 at { 0x11 } -- ------------------------------------------------ var volatile byte T2CON at { 0x12 } var volatile bit*4 T2CON_TOUTPS at T2CON : 3 var volatile bit T2CON_TMR2ON at T2CON : 2 var volatile bit*2 T2CON_T2CKPS at T2CON : 0 -- ------------------------------------------------ var volatile byte SSPBUF at { 0x13 } -- ------------------------------------------------ var volatile byte SSPCON at { 0x14 } var volatile bit SSPCON_WCOL at SSPCON : 7 var volatile bit SSPCON_SSPOV at SSPCON : 6 var volatile bit SSPCON_SSPEN at SSPCON : 5 var volatile bit SSPCON_CKP at SSPCON : 4 var volatile bit*4 SSPCON_SSPM at SSPCON : 0 -- ------------------------------------------------ var volatile word CCPR1 at { 0x15 } -- ------------------------------------------------ var volatile byte CCPR1L at { 0x15 } -- ------------------------------------------------ var volatile byte CCPR1H at { 0x16 } -- ------------------------------------------------ var volatile byte CCP1CON at { 0x17 } var volatile bit*2 CCP1CON_DC1B at CCP1CON : 4 var volatile bit*4 CCP1CON_CCP1M at CCP1CON : 0 -- ------------------------------------------------ var volatile byte RCSTA at { 0x18 } var volatile bit RCSTA_SPEN at RCSTA : 7 var volatile bit RCSTA_RX9 at RCSTA : 6 var volatile bit RCSTA_SREN at RCSTA : 5 var volatile bit RCSTA_CREN at RCSTA : 4 var volatile bit RCSTA_ADDEN at RCSTA : 3 var volatile bit RCSTA_FERR at RCSTA : 2 var volatile bit RCSTA_OERR at RCSTA : 1 var volatile bit RCSTA_RX9D at RCSTA : 0 -- ------------------------------------------------ var volatile byte TXREG at { 0x19 } -- ------------------------------------------------ var volatile byte RCREG at { 0x1A } -- ------------------------------------------------ var volatile word CCPR2 at { 0x1B } -- ------------------------------------------------ var volatile byte CCPR2L at { 0x1B } -- ------------------------------------------------ var volatile byte CCPR2H at { 0x1C } -- ------------------------------------------------ var volatile byte CCP2CON at { 0x1D } var volatile bit*2 CCP2CON_DC2B at CCP2CON : 4 var volatile bit*4 CCP2CON_CCP2M at CCP2CON : 0 -- ------------------------------------------------ var volatile byte ADRES at { 0x1E } -- ------------------------------------------------ var volatile byte ADCON0 at { 0x1F } var volatile bit*4 ADCON0_CHS at ADCON0 : 2 var volatile bit ADCON0_GO at ADCON0 : 1 var volatile bit ADCON0_NDONE at ADCON0 : 1 var volatile bit ADCON0_ADON at ADCON0 : 0 -- ------------------------------------------------ var volatile byte OPTION_REG at { 0x81,0x181 } var volatile bit OPTION_REG_NRBPU at OPTION_REG : 7 var volatile bit OPTION_REG_INTEDG at OPTION_REG : 6 var volatile bit OPTION_REG_T0CS at OPTION_REG : 5 alias T0CON_T0CS is OPTION_REG_T0CS var volatile bit OPTION_REG_T0SE at OPTION_REG : 4 alias T0CON_T0SE is OPTION_REG_T0SE var volatile bit OPTION_REG_PSA at OPTION_REG : 3 alias T0CON_PSA is OPTION_REG_PSA var volatile bit*3 OPTION_REG_PS at OPTION_REG : 0 alias T0CON_T0PS is OPTION_REG_PS -- ------------------------------------------------ var volatile byte TRISA at { 0x85 } var volatile byte PORTA_direction at TRISA -- procedure PORTA_low_direction'put(byte in x) is pragma inline TRISA = (TRISA & 0xF0) | (x & 0x0F) end procedure function PORTA_low_direction'get() return byte is pragma inline return (TRISA & 0x0F) end function -- procedure PORTA_high_direction'put(byte in x) is pragma inline TRISA = (TRISA & 0x0F) | (x << 4) end procedure function PORTA_high_direction'get() return byte is pragma inline return (TRISA >> 4) end function -- var volatile bit TRISA_TRISA7 at TRISA : 7 var volatile bit pin_A7_direction at TRISA : 7 alias pin_OSC1_direction is pin_A7_direction alias pin_CLKIN_direction is pin_A7_direction -- var volatile bit TRISA_TRISA6 at TRISA : 6 var volatile bit pin_A6_direction at TRISA : 6 alias pin_OSC2_direction is pin_A6_direction alias pin_CLKOUT_direction is pin_A6_direction alias pin_VCAP_RA6_direction is pin_A6_direction -- var volatile bit TRISA_TRISA5 at TRISA : 5 var volatile bit pin_A5_direction at TRISA : 5 alias pin_AN4_direction is pin_A5_direction alias pin_CPS7_direction is pin_A5_direction alias pin_SS_RA5_direction is pin_A5_direction alias pin_VCAP_RA5_direction is pin_A5_direction -- var volatile bit TRISA_TRISA4 at TRISA : 4 var volatile bit pin_A4_direction at TRISA : 4 alias pin_CPS6_direction is pin_A4_direction alias pin_T0CKI_direction is pin_A4_direction -- var volatile bit TRISA_TRISA3 at TRISA : 3 var volatile bit pin_A3_direction at TRISA : 3 alias pin_AN3_direction is pin_A3_direction alias pin_VREF_direction is pin_A3_direction -- var volatile bit TRISA_TRISA2 at TRISA : 2 var volatile bit pin_A2_direction at TRISA : 2 alias pin_AN2_direction is pin_A2_direction -- var volatile bit TRISA_TRISA1 at TRISA : 1 var volatile bit pin_A1_direction at TRISA : 1 alias pin_AN1_direction is pin_A1_direction -- var volatile bit TRISA_TRISA0 at TRISA : 0 var volatile bit pin_A0_direction at TRISA : 0 alias pin_AN0_direction is pin_A0_direction alias pin_SS_RA0_direction is pin_A0_direction alias pin_VCAP_RA0_direction is pin_A0_direction -- -- ------------------------------------------------ var volatile byte TRISB at { 0x86 } var volatile byte PORTB_direction at TRISB -- procedure PORTB_low_direction'put(byte in x) is pragma inline TRISB = (TRISB & 0xF0) | (x & 0x0F) end procedure function PORTB_low_direction'get() return byte is pragma inline return (TRISB & 0x0F) end function -- procedure PORTB_high_direction'put(byte in x) is pragma inline TRISB = (TRISB & 0x0F) | (x << 4) end procedure function PORTB_high_direction'get() return byte is pragma inline return (TRISB >> 4) end function -- var volatile bit TRISB_TRISB7 at TRISB : 7 var volatile bit pin_B7_direction at TRISB : 7 alias pin_ICSPDAT_direction is pin_B7_direction alias pin_ICCDAT_direction is pin_B7_direction -- var volatile bit TRISB_TRISB6 at TRISB : 6 var volatile bit pin_B6_direction at TRISB : 6 alias pin_ICSPCLK_direction is pin_B6_direction alias pin_ICDCLK_direction is pin_B6_direction -- var volatile bit TRISB_TRISB5 at TRISB : 5 var volatile bit pin_B5_direction at TRISB : 5 alias pin_AN13_direction is pin_B5_direction alias pin_CPS5_direction is pin_B5_direction alias pin_T1G_direction is pin_B5_direction -- var volatile bit TRISB_TRISB4 at TRISB : 4 var volatile bit pin_B4_direction at TRISB : 4 alias pin_AN11_direction is pin_B4_direction alias pin_CPS4_direction is pin_B4_direction -- var volatile bit TRISB_TRISB3 at TRISB : 3 var volatile bit pin_B3_direction at TRISB : 3 alias pin_AN9_direction is pin_B3_direction alias pin_CPS3_direction is pin_B3_direction alias pin_CCP2_RB3_direction is pin_B3_direction -- var volatile bit TRISB_TRISB2 at TRISB : 2 var volatile bit pin_B2_direction at TRISB : 2 alias pin_AN8_direction is pin_B2_direction alias pin_CPS2_direction is pin_B2_direction -- var volatile bit TRISB_TRISB1 at TRISB : 1 var volatile bit pin_B1_direction at TRISB : 1 alias pin_AN10_direction is pin_B1_direction alias pin_CPS1_direction is pin_B1_direction -- var volatile bit TRISB_TRISB0 at TRISB : 0 var volatile bit pin_B0_direction at TRISB : 0 alias pin_AN12_direction is pin_B0_direction alias pin_CPS0_direction is pin_B0_direction alias pin_INT_direction is pin_B0_direction -- -- ------------------------------------------------ var volatile byte TRISC at { 0x87 } var volatile byte PORTC_direction at TRISC -- procedure PORTC_low_direction'put(byte in x) is pragma inline TRISC = (TRISC & 0xF0) | (x & 0x0F) end procedure function PORTC_low_direction'get() return byte is pragma inline return (TRISC & 0x0F) end function -- procedure PORTC_high_direction'put(byte in x) is pragma inline TRISC = (TRISC & 0x0F) | (x << 4) end procedure function PORTC_high_direction'get() return byte is pragma inline return (TRISC >> 4) end function -- var volatile bit TRISC_TRISC7 at TRISC : 7 var volatile bit pin_C7_direction at TRISC : 7 alias pin_RX_direction is pin_C7_direction alias pin_RX1_direction is pin_C7_direction alias pin_DT_direction is pin_C7_direction -- var volatile bit TRISC_TRISC6 at TRISC : 6 var volatile bit pin_C6_direction at TRISC : 6 alias pin_TX_direction is pin_C6_direction alias pin_TX1_direction is pin_C6_direction alias pin_CK_direction is pin_C6_direction -- var volatile bit TRISC_TRISC5 at TRISC : 5 var volatile bit pin_C5_direction at TRISC : 5 alias pin_SDO_direction is pin_C5_direction -- var volatile bit TRISC_TRISC4 at TRISC : 4 var volatile bit pin_C4_direction at TRISC : 4 alias pin_SDI_direction is pin_C4_direction alias pin_SDA_direction is pin_C4_direction -- var volatile bit TRISC_TRISC3 at TRISC : 3 var volatile bit pin_C3_direction at TRISC : 3 alias pin_SCK_direction is pin_C3_direction alias pin_SCL_direction is pin_C3_direction -- var volatile bit TRISC_TRISC2 at TRISC : 2 var volatile bit pin_C2_direction at TRISC : 2 alias pin_CCP1_direction is pin_C2_direction -- var volatile bit TRISC_TRISC1 at TRISC : 1 var volatile bit pin_C1_direction at TRISC : 1 alias pin_T1OSI_direction is pin_C1_direction alias pin_CCP2_RC1_direction is pin_C1_direction -- var volatile bit TRISC_TRISC0 at TRISC : 0 var volatile bit pin_C0_direction at TRISC : 0 alias pin_T1OSO_direction is pin_C0_direction alias pin_T1CKI_direction is pin_C0_direction -- -- ------------------------------------------------ var volatile byte TRISE at { 0x89 } var volatile byte PORTE_direction at TRISE -- procedure PORTE_low_direction'put(byte in x) is pragma inline TRISE = (TRISE & 0xF0) | (x & 0x0F) end procedure function PORTE_low_direction'get() return byte is pragma inline return (TRISE & 0x0F) end function -- procedure PORTE_high_direction'put(byte in x) is pragma inline TRISE = (TRISE & 0x0F) | (x << 4) end procedure function PORTE_high_direction'get() return byte is pragma inline return (TRISE >> 4) end function -- var volatile bit TRISE_TRISE3 at TRISE : 3 var volatile bit pin_E3_direction at TRISE : 3 alias pin_MCLR_direction is pin_E3_direction alias pin_VPP_direction is pin_E3_direction -- -- ------------------------------------------------ var volatile byte PIE1 at { 0x8C } var volatile bit PIE1_TMR1GIE at PIE1 : 7 var volatile bit PIE1_ADIE at PIE1 : 6 var volatile bit PIE1_RCIE at PIE1 : 5 var volatile bit PIE1_TXIE at PIE1 : 4 var volatile bit PIE1_SSPIE at PIE1 : 3 var volatile bit PIE1_CCP1IE at PIE1 : 2 var volatile bit PIE1_TMR2IE at PIE1 : 1 var volatile bit PIE1_TMR1IE at PIE1 : 0 -- ------------------------------------------------ var volatile byte PIE2 at { 0x8D } var volatile bit PIE2_CCP2IE at PIE2 : 0 -- ------------------------------------------------ var volatile byte PCON at { 0x8E } var volatile bit PCON_NPOR at PCON : 1 var volatile bit PCON_NBOR at PCON : 0 -- ------------------------------------------------ var volatile byte T1GCON at { 0x8F } var volatile bit T1GCON_TMR1GE at T1GCON : 7 var volatile bit T1GCON_T1GPOL at T1GCON : 6 var volatile bit T1GCON_T1GTM at T1GCON : 5 var volatile bit T1GCON_T1GSPM at T1GCON : 4 var volatile bit T1GCON_T1GGO at T1GCON : 3 var volatile bit T1GCON_NDONE at T1GCON : 3 var volatile bit T1GCON_T1GVAL at T1GCON : 2 var volatile bit*2 T1GCON_T1GSS at T1GCON : 0 -- ------------------------------------------------ var volatile byte OSCCON at { 0x90 } var volatile bit*2 OSCCON_IRCF at OSCCON : 4 var volatile bit OSCCON_ICSL at OSCCON : 3 var volatile bit OSCCON_ICSS at OSCCON : 2 -- ------------------------------------------------ var volatile byte OSCTUNE at { 0x91 } var volatile bit*6 OSCTUNE_TUN at OSCTUNE : 0 -- ------------------------------------------------ var volatile byte PR2 at { 0x92 } -- ------------------------------------------------ var volatile byte SSPADD at { 0x93 } -- ------------------------------------------------ var volatile byte SSPMSK at { 0x93 } -- ------------------------------------------------ var volatile byte SSPSTAT at { 0x94 } var volatile bit SSPSTAT_SMP at SSPSTAT : 7 var volatile bit SSPSTAT_CKE at SSPSTAT : 6 var volatile bit SSPSTAT_D at SSPSTAT : 5 var volatile bit SSPSTAT_NA at SSPSTAT : 5 var volatile bit SSPSTAT_P at SSPSTAT : 4 var volatile bit SSPSTAT_S at SSPSTAT : 3 var volatile bit SSPSTAT_R at SSPSTAT : 2 var volatile bit SSPSTAT_NW at SSPSTAT : 2 var volatile bit SSPSTAT_UA at SSPSTAT : 1 var volatile bit SSPSTAT_BF at SSPSTAT : 0 -- ------------------------------------------------ var volatile byte WPUB at { 0x95 } -- ------------------------------------------------ var volatile byte IOCB at { 0x96 } -- ------------------------------------------------ var volatile byte TXSTA at { 0x98 } var volatile bit TXSTA_CSRC at TXSTA : 7 var volatile bit TXSTA_TX9 at TXSTA : 6 var volatile bit TXSTA_TXEN at TXSTA : 5 var volatile bit TXSTA_SYNC at TXSTA : 4 var volatile bit TXSTA_BRGH at TXSTA : 2 var volatile bit TXSTA_TRMT at TXSTA : 1 var volatile bit TXSTA_TX9D at TXSTA : 0 -- ------------------------------------------------ var volatile byte SPBRG at { 0x99 } var volatile bit SPBRG_BRG7 at SPBRG : 7 var volatile bit SPBRG_BRG6 at SPBRG : 6 var volatile bit SPBRG_BRG5 at SPBRG : 5 var volatile bit SPBRG_BRG4 at SPBRG : 4 var volatile bit SPBRG_BRG3 at SPBRG : 3 var volatile bit SPBRG_BRG2 at SPBRG : 2 var volatile bit SPBRG_BRG1 at SPBRG : 1 var volatile bit SPBRG_BRG0 at SPBRG : 0 -- ------------------------------------------------ var volatile byte APFCON at { 0x9C } var volatile bit APFCON_SSSEL at APFCON : 1 var volatile bit APFCON_CCP2SEL at APFCON : 0 -- ------------------------------------------------ var volatile byte FVRCON at { 0x9D } var volatile bit FVRCON_FVRRDY at FVRCON : 7 var volatile bit FVRCON_FVREN at FVRCON : 6 var volatile bit FVRCON_ADFVR1 at FVRCON : 1 var volatile bit FVRCON_ADFVR0 at FVRCON : 0 -- ------------------------------------------------ var volatile byte ADCON1 at { 0x9F } var volatile bit*3 ADCON1_ADCS at ADCON1 : 4 var volatile bit*2 ADCON1_ADREF at ADCON1 : 0 -- ------------------------------------------------ var volatile byte CPSCON0 at { 0x108 } var volatile bit CPSCON0_CPSON at CPSCON0 : 7 var volatile bit*2 CPSCON0_CPSRNG at CPSCON0 : 2 var volatile bit CPSCON0_CPSOUT at CPSCON0 : 1 var volatile bit CPSCON0_T0XCS at CPSCON0 : 0 -- ------------------------------------------------ var volatile byte CPSCON1 at { 0x109 } var volatile bit*4 CPSCON1_CPSCH at CPSCON1 : 0 -- ------------------------------------------------ var volatile byte PMDATL at { 0x10C } -- ------------------------------------------------ var volatile byte PMADRL at { 0x10D } -- ------------------------------------------------ var volatile byte PMDATH at { 0x10E } var volatile bit*6 PMDATH_PMDATH at PMDATH : 0 -- ------------------------------------------------ var volatile byte PMADRH at { 0x10F } var volatile bit*5 PMADRH_PMADRH at PMADRH : 0 -- ------------------------------------------------ var volatile byte ANSELA at { 0x185 } var volatile bit JANSEL_ANS4 at ANSELA : 5 var volatile bit JANSEL_ANS3 at ANSELA : 3 var volatile bit JANSEL_ANS2 at ANSELA : 2 var volatile bit JANSEL_ANS1 at ANSELA : 1 var volatile bit JANSEL_ANS0 at ANSELA : 0 -- ------------------------------------------------ var volatile byte ANSELB at { 0x186 } var volatile bit JANSEL_ANS13 at ANSELB : 5 var volatile bit JANSEL_ANS11 at ANSELB : 4 var volatile bit JANSEL_ANS9 at ANSELB : 3 var volatile bit JANSEL_ANS8 at ANSELB : 2 var volatile bit JANSEL_ANS10 at ANSELB : 1 var volatile bit JANSEL_ANS12 at ANSELB : 0 -- ------------------------------------------------ var volatile byte PMCON1 at { 0x18C } var volatile bit PMCON1_RD at PMCON1 : 0 -- -- =================================================== -- -- Special (device specific) constants and procedures -- const ADC_GROUP = ADC_V0 const byte ADC_NTOTAL_CHANNEL = 11 const byte ADC_ADCS_BITCOUNT = 3 -- const PPS_GROUP = PPS_0 -- no Peripheral Pin Selection -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - -- Change analog I/O pins into digital I/O pins. procedure analog_off() is pragma inline ANSELA = 0b0000_0000 -- all digital ANSELB = 0b0000_0000 -- all digital end procedure -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - -- Disable ADC module procedure adc_off() is pragma inline ADCON0 = 0b0000_0000 -- disable ADC ADCON1 = 0b0000_0000 end procedure -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - -- Switch analog ports to digital mode (if analog module present). procedure enable_digital_io() is pragma inline analog_off() adc_off() end procedure -- -- ================================================== -- -- Symbolic Fuse definitions -- ------------------------- -- -- CONFIG1 (0x2007) -- pragma fuse_def OSC:0 0x7 { -- oscillator selection bits RC_CLKOUT = 0x7 -- rc oscillator: clkout function on ra6/osc2/clkout pin, rc on ra7/osc1/clkin RC_NOCLKOUT = 0x6 -- rcio oscillator: i/o function on ra6/osc2/clkout pin, rc on ra7/osc1/clkin INTOSC_CLKOUT = 0x5 -- intosc oscillator: clkout function on ra6/osc2/clkout pin, i/o function on ra7/osc1/clkin INTOSC_NOCLKOUT = 0x4 -- intoscio oscillator: i/o function on ra6/osc2/clkout pin, i/o function on ra7/osc1/clkin EC_NOCLKOUT = 0x3 -- ec: i/o function on ra6/osc2/clkout pin, clkin on ra7/osc1/clkin HS = 0x2 -- hs oscillator: high-speed crystal/resonator on ra6/osc2/clkout and ra7/osc1/clkin XT = 0x1 -- xt oscillator: crystal/resonator on ra6/osc2/clkout and ra7/osc1/clkin LP = 0x0 -- lp oscillator: low-power crystal on ra6/osc2/clkout and ra7/osc1/clkin } pragma fuse_def WDT:0 0x8 { -- watchdog timer enable bit ENABLED = 0x8 -- enabled DISABLED = 0x0 -- disabled } pragma fuse_def PWRTE:0 0x10 { -- power-up timer enable bit DISABLED = 0x10 -- disabled ENABLED = 0x0 -- enabled } pragma fuse_def MCLR:0 0x20 { -- re3/mclr pin function select bit INTERNAL = 0x0 -- disabled EXTERNAL = 0x20 -- enabled } pragma fuse_def CP:0 0x40 { -- code protection bit DISABLED = 0x40 -- disabled ENABLED = 0x0 -- enabled } pragma fuse_def BROWNOUT:0 0x300 { -- brown-out reset selection bits ENABLED = 0x300 -- enabled RUNONLY = 0x200 -- bor enabled during operation and disabled in sleep DISABLED = 0x100 -- disabled } pragma fuse_def VOLTAGE:0 0x400 { -- brown-out reset voltage selection bit V19 = 0x400 -- brown-out reset voltage (vbor) set to 1.9 v nominal V25 = 0x0 -- brown-out reset voltage (vbor) set to 2.5 v nominal } pragma fuse_def WDTCS:0 0x800 { -- watchdog timer clock select STANDARD = 0x800 -- standard watchdog timer is selected LOW_POWER = 0x0 -- low power watchdog timer is selected } pragma fuse_def PLLEN:0 0x1000 { -- intosc pll enable bit F16MHZ = 0x1000 -- enabled F500KHZ = 0x0 -- disabled } pragma fuse_def DEBUG:0 0x2000 { -- in-circuit debugger mode bit DISABLED = 0x2000 -- disabled ENABLED = 0x0 -- enabled } -- -- CONFIG2 (0x2008) -- pragma fuse_def VCAPEN:1 0x30 { -- voltage regulator capacitor enable bits DISABLED = 0x30 -- all vcap pin functions are disabled pin_A6 = 0x20 -- vcap functionality is enabled on ra6 pin_A5 = 0x10 -- vcap functionality is enabled on ra5 pin_A0 = 0x0 -- vcap functionality is enabled on ra0 } --