-- =================================================== -- Title: JalV2 device include file for PIC 16F630 -- -- Author: Rob Hamerling, Copyright (c) 2008..2010, all rights reserved. -- -- Adapted-by: -- -- Compiler: 2.4n -- -- 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 pic16f630, 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:/mplab856/mplab ide/device/pic16f630.dev -- - x:/mplab856/MPASM Suite/LKR/16f630_g.lkr -- -- Notes: -- - Created with Dev2Jal Rexx script version 0.1.05 -- - File creation date/time: 5 Sep 2010 09:06 -- -- =================================================== -- const word DEVICE_ID = 0x10C0 const byte PICTYPE[] = "16F630" const byte DATASHEET[] = "40039" const byte PGMSPEC[] = "41191" -- -- Vdd Range: 2.500-5.500 Nominal: 5.000 -- Vpp Range: 12.750-13.250 Default: 13.000 -- -- --------------------------------------------------- -- include chipdef_jallib -- common constants -- pragma target cpu PIC_14 -- (banks=2) pragma target chip 16f630 pragma target bank 0x0080 pragma target page 0x0800 pragma stack 8 pragma code 1024 -- (words) pragma eeprom 0x2100,128 pragma ID 0x2000,4 pragma data 0x20-0x5D pragma shared 0x5E-0x5F -- var volatile byte _pic_accum shared at 0x5E -- (compiler) var volatile byte _pic_isr_w shared at 0x5F -- (compiler) -- const word _FUSES_CT = 1 const word _FUSE_BASE = 0x2007 const word _FUSES = 0b_0011_0001_1111_1111 -- -- ------------------------------------------------ var volatile byte INDF at { 0x0,0x80 } var volatile byte _ind at { 0x0,0x80 } -- (compiler) -- ------------------------------------------------ var volatile byte TMR0 at { 0x1 } -- ------------------------------------------------ var volatile byte PCL at { 0x2,0x82 } var volatile byte _pcl at { 0x2,0x82 } -- (compiler) -- ------------------------------------------------ var volatile byte STATUS at { 0x3,0x83 } 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 } -- (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 } var volatile byte _fsr at { 0x4,0x84 } -- (compiler) -- ------------------------------------------------ var volatile byte PORTA at { 0x5 } -- var byte _PORTA_shadow = PORTA -- procedure _PORTA_flush() is pragma inline PORTA = _PORTA_shadow end procedure procedure PORTA'put(byte in x) is pragma inline _PORTA_shadow = x _PORTA_flush() end procedure -- procedure PORTA_low'put(byte in x) is pragma inline _PORTA_shadow = (_PORTA_shadow & 0xF0) | (x & 0x0F) _PORTA_flush() 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_flush() end procedure function PORTA_high'get() return byte is pragma inline return (PORTA >> 4) end function -- var volatile bit PORTA_RA5 at PORTA : 5 var volatile bit pin_A5 at PORTA : 5 alias pin_T1CKI is pin_A5 alias pin_OSC1 is pin_A5 alias pin_CLKIN is pin_A5 -- procedure pin_A5'put(bit in x at _PORTA_shadow : 5) is pragma inline _PORTA_flush() end procedure -- var volatile bit PORTA_RA4 at PORTA : 4 var volatile bit pin_A4 at PORTA : 4 alias pin_T1G is pin_A4 alias pin_OSC2 is pin_A4 alias pin_CLKOUT is pin_A4 -- procedure pin_A4'put(bit in x at _PORTA_shadow : 4) is pragma inline _PORTA_flush() end procedure -- var volatile bit PORTA_RA3 at PORTA : 3 var volatile bit pin_A3 at PORTA : 3 alias pin_MCLR is pin_A3 alias pin_VPP is pin_A3 -- procedure pin_A3'put(bit in x at _PORTA_shadow : 3) is pragma inline _PORTA_flush() end procedure -- var volatile bit PORTA_RA2 at PORTA : 2 var volatile bit pin_A2 at PORTA : 2 alias pin_COUT is pin_A2 alias pin_T0CKI is pin_A2 alias pin_INT is pin_A2 -- procedure pin_A2'put(bit in x at _PORTA_shadow : 2) is pragma inline _PORTA_flush() end procedure -- var volatile bit PORTA_RA1 at PORTA : 1 var volatile bit pin_A1 at PORTA : 1 alias pin_CIN_NEG is pin_A1 alias pin_ICSPCLK is pin_A1 -- procedure pin_A1'put(bit in x at _PORTA_shadow : 1) is pragma inline _PORTA_flush() end procedure -- var volatile bit PORTA_RA0 at PORTA : 0 var volatile bit pin_A0 at PORTA : 0 alias pin_CIN_POS is pin_A0 alias pin_ICSPDAT is pin_A0 -- procedure pin_A0'put(bit in x at _PORTA_shadow : 0) is pragma inline _PORTA_flush() end procedure -- -- ------------------------------------------------ var volatile byte PORTC at { 0x7 } -- var byte _PORTC_shadow = PORTC -- procedure _PORTC_flush() is pragma inline PORTC = _PORTC_shadow end procedure procedure PORTC'put(byte in x) is pragma inline _PORTC_shadow = x _PORTC_flush() end procedure -- procedure PORTC_low'put(byte in x) is pragma inline _PORTC_shadow = (_PORTC_shadow & 0xF0) | (x & 0x0F) _PORTC_flush() 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_flush() end procedure function PORTC_high'get() return byte is pragma inline return (PORTC >> 4) end function -- var volatile bit PORTC_RC5 at PORTC : 5 var volatile bit pin_C5 at PORTC : 5 -- procedure pin_C5'put(bit in x at _PORTC_shadow : 5) is pragma inline _PORTC_flush() end procedure -- var volatile bit PORTC_RC4 at PORTC : 4 var volatile bit pin_C4 at PORTC : 4 -- procedure pin_C4'put(bit in x at _PORTC_shadow : 4) is pragma inline _PORTC_flush() end procedure -- var volatile bit PORTC_RC3 at PORTC : 3 var volatile bit pin_C3 at PORTC : 3 -- procedure pin_C3'put(bit in x at _PORTC_shadow : 3) is pragma inline _PORTC_flush() end procedure -- var volatile bit PORTC_RC2 at PORTC : 2 var volatile bit pin_C2 at PORTC : 2 -- procedure pin_C2'put(bit in x at _PORTC_shadow : 2) is pragma inline _PORTC_flush() end procedure -- var volatile bit PORTC_RC1 at PORTC : 1 var volatile bit pin_C1 at PORTC : 1 -- procedure pin_C1'put(bit in x at _PORTC_shadow : 1) is pragma inline _PORTC_flush() end procedure -- var volatile bit PORTC_RC0 at PORTC : 0 var volatile bit pin_C0 at PORTC : 0 -- procedure pin_C0'put(bit in x at _PORTC_shadow : 0) is pragma inline _PORTC_flush() end procedure -- -- ------------------------------------------------ var volatile byte PCLATH at { 0xA,0x8A } var volatile bit*5 PCLATH_PCLATH at PCLATH : 0 var volatile byte _pclath at { 0xA,0x8A } -- (compiler) -- ------------------------------------------------ var volatile byte INTCON at { 0xB,0x8B } var volatile bit INTCON_GIE at INTCON : 7 var volatile bit INTCON_PEIE at INTCON : 6 var volatile bit INTCON_TMR0IE at INTCON : 5 var volatile bit INTCON_INTE at INTCON : 4 var volatile bit INTCON_RAIE at INTCON : 3 var volatile bit INTCON_TMR0IF at INTCON : 2 var volatile bit INTCON_INTF at INTCON : 1 var volatile bit INTCON_RAIF at INTCON : 0 -- ------------------------------------------------ var volatile byte PIR1 at { 0xC } var volatile bit PIR1_EEIF at PIR1 : 7 var volatile bit PIR1_ADIF at PIR1 : 6 var volatile bit PIR1_CMIF at PIR1 : 3 var volatile bit PIR1_TMR1IF at PIR1 : 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 T1CON_TMR1GE 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_TMR1CS at T1CON : 1 var volatile bit T1CON_TMR1ON at T1CON : 0 -- ------------------------------------------------ var volatile byte CMCON at { 0x19 } var volatile bit CMCON_COUT at CMCON : 6 var volatile bit CMCON_CINV at CMCON : 4 var volatile bit CMCON_CIS at CMCON : 3 var volatile bit*3 CMCON_CM at CMCON : 0 -- ------------------------------------------------ var volatile byte OPTION_REG at { 0x81 } var volatile bit OPTION_REG_NRAPU 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_TRISA5 at TRISA : 5 var volatile bit pin_A5_direction at TRISA : 5 alias pin_T1CKI_direction is pin_A5_direction alias pin_OSC1_direction is pin_A5_direction alias pin_CLKIN_direction is pin_A5_direction -- var volatile bit TRISA_TRISA4 at TRISA : 4 var volatile bit pin_A4_direction at TRISA : 4 alias pin_T1G_direction is pin_A4_direction alias pin_OSC2_direction is pin_A4_direction alias pin_CLKOUT_direction is pin_A4_direction -- var volatile bit TRISA_TRISA3 at TRISA : 3 var volatile bit pin_A3_direction at TRISA : 3 alias pin_MCLR_direction is pin_A3_direction alias pin_VPP_direction is pin_A3_direction -- var volatile bit TRISA_TRISA2 at TRISA : 2 var volatile bit pin_A2_direction at TRISA : 2 alias pin_COUT_direction is pin_A2_direction alias pin_T0CKI_direction is pin_A2_direction alias pin_INT_direction is pin_A2_direction -- var volatile bit TRISA_TRISA1 at TRISA : 1 var volatile bit pin_A1_direction at TRISA : 1 alias pin_CIN_NEG_direction is pin_A1_direction alias pin_ICSPCLK_direction is pin_A1_direction -- var volatile bit TRISA_TRISA0 at TRISA : 0 var volatile bit pin_A0_direction at TRISA : 0 alias pin_CIN_POS_direction is pin_A0_direction alias pin_ICSPDAT_direction is pin_A0_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_TRISC5 at TRISC : 5 var volatile bit pin_C5_direction at TRISC : 5 -- var volatile bit TRISC_TRISC4 at TRISC : 4 var volatile bit pin_C4_direction at TRISC : 4 -- var volatile bit TRISC_TRISC3 at TRISC : 3 var volatile bit pin_C3_direction at TRISC : 3 -- var volatile bit TRISC_TRISC2 at TRISC : 2 var volatile bit pin_C2_direction at TRISC : 2 -- var volatile bit TRISC_TRISC1 at TRISC : 1 var volatile bit pin_C1_direction at TRISC : 1 -- var volatile bit TRISC_TRISC0 at TRISC : 0 var volatile bit pin_C0_direction at TRISC : 0 -- -- ------------------------------------------------ var volatile byte PIE1 at { 0x8C } var volatile bit PIE1_EEIE at PIE1 : 7 var volatile bit PIE1_ADIE at PIE1 : 6 var volatile bit PIE1_CMIE at PIE1 : 3 var volatile bit PIE1_TMR1IE at PIE1 : 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 OSCCAL at { 0x90 } var volatile bit*6 OSCCAL_CAL at OSCCAL : 2 -- ------------------------------------------------ var volatile byte WPUA at { 0x95 } var volatile bit WPUA_WPUA5 at WPUA : 5 var volatile bit WPUA_WPUA4 at WPUA : 4 var volatile bit WPUA_WPUA2 at WPUA : 2 var volatile bit WPUA_WPUA1 at WPUA : 1 var volatile bit WPUA_WPUA0 at WPUA : 0 -- ------------------------------------------------ var volatile byte IOCA at { 0x96 } var volatile bit IOCA_IOCA5 at IOCA : 5 var volatile bit IOCA_IOCA4 at IOCA : 4 var volatile bit IOCA_IOCA3 at IOCA : 3 var volatile bit IOCA_IOCA2 at IOCA : 2 var volatile bit IOCA_IOCA1 at IOCA : 1 var volatile bit IOCA_IOCA0 at IOCA : 0 -- ------------------------------------------------ var volatile byte VRCON at { 0x99 } var volatile bit VRCON_VREN at VRCON : 7 var volatile bit VRCON_VRR at VRCON : 5 var volatile bit*4 VRCON_VR at VRCON : 0 -- ------------------------------------------------ var volatile byte EEDAT at { 0x9A } -- ------------------------------------------------ var volatile byte EEADR at { 0x9B } var volatile bit*7 EEADR_EEADR at EEADR : 0 -- ------------------------------------------------ var volatile byte EECON1 at { 0x9C } var volatile bit EECON1_WRERR at EECON1 : 3 var volatile bit EECON1_WREN at EECON1 : 2 var volatile bit EECON1_WR at EECON1 : 1 var volatile bit EECON1_RD at EECON1 : 0 -- ------------------------------------------------ var volatile byte EECON2 at { 0x9D } -- -- =================================================== -- -- Special (device specific) constants and procedures -- const ADC_GROUP = 0 -- no ADC module present const byte ADC_NTOTAL_CHANNEL = 0 -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - -- Disable comparator module procedure comparator_off() is pragma inline CMCON = 0b0000_0111 -- disable comparator end procedure -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - -- Switch analog ports to digital mode (if analog module present). procedure enable_digital_io() is pragma inline comparator_off() end procedure -- -- ================================================== -- -- Symbolic Fuse definitions -- ------------------------- -- -- CONFIG (0x2007) -- pragma fuse_def OSC 0x7 { -- oscillator RC_CLKOUT = 0x7 -- external rc clockout RC_NOCLKOUT = 0x6 -- external rc no clock INTOSC_CLKOUT = 0x5 -- internal rc clockout INTOSC_NOCLKOUT = 0x4 -- internal rc no clock EC_NOCLKOUT = 0x3 -- ec HS = 0x2 -- hs XT = 0x1 -- xt LP = 0x0 -- lp } pragma fuse_def WDT 0x8 { -- watchdog timer ENABLED = 0x8 -- on DISABLED = 0x0 -- off } pragma fuse_def PWRTE 0x10 { -- power up timer DISABLED = 0x10 -- off ENABLED = 0x0 -- on } pragma fuse_def MCLR 0x20 { -- master clear enable EXTERNAL = 0x20 -- external INTERNAL = 0x0 -- internal } pragma fuse_def BROWNOUT 0x40 { -- brown out detect ENABLED = 0x40 -- on DISABLED = 0x0 -- off } pragma fuse_def CP 0x80 { -- code protect DISABLED = 0x80 -- off ENABLED = 0x0 -- on } pragma fuse_def CPD 0x100 { -- data ee read protect DISABLED = 0x100 -- off ENABLED = 0x0 -- on } pragma fuse_def BG 0x3000 { -- bandgap calibration bits ADJUST_NEG = 0x3000 -- adjust bandgap voltage (-100mv) TARGET = 0x1000 -- target bandgap voltage (2.1v) ADJUST_POS = 0x0 -- adjust bandgap voltage (100mv) } --