• PicŪ Basic

  • Proton Compiler Updates

    Full install of version of Proton and version of Proton24

    The link below will install Proton compiler version, and full Proton24 compiler version

    Important Note.
    If the devices PIC18F25K20 or PIC18F25K22 are used, the compiler will not ask for the USB key. This means that the full compiler is now the recommended compiler for use with the Amicus18 board.
    The same applies for devices PIC24EP128MC202, PIC24FJ64GA002, PIC24FJ64GA004, and PIC24HJ128GP502. However, Proton still requires a USB key for other 8-bit and 24-bit devices.

    The compiler installer can be downloaded from here:

    Proton Compiler Setup

    The installer is for Windows 7 32-bit and 64-bit, as well as Windows XP 32-bit.
    There should be no need to uninstall the previous compiler versions.

    If required, USB key drivers for Win7 and WinXP can be found here:

    Proton USB key driver for Windows 7 (32-bit)

    Proton USB key driver for Windows 7 (64-bit)

    Proton USB key driver for Windows XP (32-bit)

    Additions and Fixes made in version of the Proton Compiler and version of the Proton24 Compiler.

    Proton Fix
    Corrected the obscure use of b' ', d' ', and h' ' in Mpasm assembler code. Avoid their use wherever possible because the correction may not be robust for all occurances.

    Proton Additions
    Added devices; 12F752, 12HV752, 12LF1840T39A, 16F1614, 16F1615, 16F1618, 16F1619, 16F1703,
    16F1705, 16F1707, 16F1709, 16F1717, 16F1718, 16F1719, 16F1829LIN, 16F707,
    16F720, 16F721, 16F722A, 16F723A, 16F753, 16HV753,
    18F24J50, 18F25J50, 18F26J50, 18F26J53, 18F27J53, 18F44J50, 18F45J50,
    18F46J53, 18F47J53, 18F65J94, 18F65K90, 18F66J90, 18F66J93, 18F66J94,
    18F66J99, 18F66K90, 18F67J90, 18F67J93, 18F67J94, 18F67K90, 18F85J94,
    18F85K90, 18F86J72, 18F86J90, 18F86J93, 18F86J94, 18F86J99, 18F86K90,
    18F87J72, 18F87J90, 18F87J93, 18F87J94, 18F87K90, 18F95J94, 18F96J94,
    18F96J99, 18F97J94

    Proton24 Addition
    Right shifts will now preserve the sign of a variable. i.e. Signed right shifts.

    Fixes and Additions made in version of the Proton Compiler and version of the Proton24 Compiler.

    Proton24 Additions
    Added a PSV code table entry to add code memory addressable in PSV space.
    Added YRAM and DMA extensions to variable declarations.
    Updated the PDF manual for the RAM changes required for dsPIC devices.
    Added some DSP libraries for FFT and Q1:15 fixed point.
    Added some FFT example programs for dsPIC33F.
    Added the whole of the PIC24E, F, and H devices to the standard Proton USB key. Along with the dsPIC33F and E devices.
    A complete 24-bit device list is shown below:

    dsPIC33EP128GP502, dsPIC33EP128GP504, dsPIC33EP128GP506, dsPIC33EP128MC202, dsPIC33EP128MC204, dsPIC33EP128MC206,
    dsPIC33EP128MC502,dsPIC33EP128MC504, dsPIC33EP128MC506, dsPIC33EP256GP502, dsPIC33EP256GP504, dsPIC33EP256GP506,
    dsPIC33EP256MC202, dsPIC33EP256MC204,dsPIC33EP256MC206, dsPIC33EP256MC502, dsPIC33EP256MC504, dsPIC33EP256MC506,
    dsPIC33EP256MU806, dsPIC33EP256MU810, dsPIC33EP256MU814,dsPIC33EP32GP502, dsPIC33EP32GP503, dsPIC33EP32GP504,
    dsPIC33EP32MC202, dsPIC33EP32MC203, dsPIC33EP32MC204, dsPIC33EP32MC502, dsPIC33EP32MC503,dsPIC33EP32MC504,
    dsPIC33EP512GP806, dsPIC33EP512MC806, dsPIC33EP512MU810, dsPIC33EP512MU814, dsPIC33EP64GP502, dsPIC33EP64GP503,
    dsPIC33EP64GP504,dsPIC33EP64GP506, dsPIC33EP64MC202, dsPIC33EP64MC203, dsPIC33EP64MC204, dsPIC33EP64MC206,
    dsPIC33EP64MC502, dsPIC33EP64MC503, dsPIC33EP64MC504,dsPIC33EP64MC506

    dsPIC33FJ06GS001, dsPIC33FJ06GS101, dsPIC33FJ06GS101A, dsPIC33FJ06GS102, dsPIC33FJ06GS102A, dsPIC33FJ06GS202,
    dsPIC33FJ06GS202A,dsPIC33FJ09GS302, dsPIC33FJ128GP202, dsPIC33FJ128GP204, dsPIC33FJ128GP206, dsPIC33FJ128GP206A,
    dsPIC33FJ128GP306, dsPIC33FJ128GP306A, dsPIC33FJ128GP310,dsPIC33FJ128GP310A, dsPIC33FJ128GP706, dsPIC33FJ128GP706A,
    dsPIC33FJ128GP708, dsPIC33FJ128GP708A, dsPIC33FJ128GP710, dsPIC33FJ128GP710A, dsPIC33FJ128GP802,dsPIC33FJ128GP804,
    dsPIC33FJ128MC202, dsPIC33FJ128MC204, dsPIC33FJ128MC506, dsPIC33FJ128MC506A, dsPIC33FJ128MC510, dsPIC33FJ128MC510A,
    dsPIC33FJ128MC706,dsPIC33FJ128MC706A, dsPIC33FJ128MC708, dsPIC33FJ128MC708A, dsPIC33FJ128MC710, dsPIC33FJ128MC710A,
    dsPIC33FJ128MC802, dsPIC33FJ128MC804, dsPIC33FJ12GP201,dsPIC33FJ12GP202, dsPIC33FJ12MC201, dsPIC33FJ12MC202,
    dsPIC33FJ16GP101, dsPIC33FJ16GP102, dsPIC33FJ16GP304, dsPIC33FJ16GS402, dsPIC33FJ16GS404, dsPIC33FJ16GS502,
    dsPIC33FJ16GS504, dsPIC33FJ16MC101, dsPIC33FJ16MC102, dsPIC33FJ16MC304, dsPIC33FJ256GP506, dsPIC33FJ256GP506A,
    dsPIC33FJ256GP510, dsPIC33FJ256GP510A,dsPIC33FJ256GP710, dsPIC33FJ256GP710A, dsPIC33FJ256MC510, dsPIC33FJ256MC510A,
    dsPIC33FJ256MC710, dsPIC33FJ256MC710A, dsPIC33FJ32GP202, dsPIC33FJ32GP204,dsPIC33FJ32GP302, dsPIC33FJ32GP304,
    dsPIC33FJ32GS406, dsPIC33FJ32GS606, dsPIC33FJ32GS608, dsPIC33FJ32GS610, dsPIC33FJ32MC202, dsPIC33FJ32MC204, dsPIC33FJ32MC302,
    dsPIC33FJ32MC304, dsPIC33FJ64GP202, dsPIC33FJ64GP204, dsPIC33FJ64GP206, dsPIC33FJ64GP206A, dsPIC33FJ64GP306, dsPIC33FJ64GP306A, dsPIC33FJ64GP310, dsPIC33FJ64GP310A,dsPIC33FJ64GP706, dsPIC33FJ64GP706A, dsPIC33FJ64GP708, dsPIC33FJ64GP708A, dsPIC33FJ64GP710, dsPIC33FJ64GP710A, dsPIC33FJ64GP802, dsPIC33FJ64GP804, dsPIC33FJ64GS406,dsPIC33FJ64GS606, dsPIC33FJ64GS608, dsPIC33FJ64GS610,
    dsPIC33FJ64MC202, dsPIC33FJ64MC204, dsPIC33FJ64MC506, dsPIC33FJ64MC506A, dsPIC33FJ64MC508, dsPIC33FJ64MC508A,
    dsPIC33FJ64MC510, dsPIC33FJ64MC510A, dsPIC33FJ64MC706, dsPIC33FJ64MC706A, dsPIC33FJ64MC710, dsPIC33FJ64MC710A, dsPIC33FJ64MC802, dsPIC33FJ64MC804

    FYI. The highlighted dsPIC33F devices above are highly recommended because they are available in a 28-pin DIP package, have a 12-bit ADC and stereo 16-bit DACs, and also operate at 40MIPS (Million Instructions Per Second) from an internal oscillator.

    PIC24EP128GP202, PIC24EP128GP204, PIC24EP128GP206, PIC24EP128MC202, PIC24EP128MC204, PIC24EP128MC206, PIC24EP256GP202,
    PIC24EP256GP204, PIC24EP256GP206, PIC24EP256GU810,PIC24EP256GU814, PIC24EP256MC202, PIC24EP256MC204, PIC24EP256MC206,
    PIC24EP32GP202, PIC24EP32GP203, PIC24EP32GP204, PIC24EP32MC202, PIC24EP32MC203, PIC24EP32MC204,PIC24EP512GP806,
    PIC24EP512GU810, PIC24EP512GU814, PIC24EP64GP202, PIC24EP64GP203, PIC24EP64GP204, PIC24EP64GP206, PIC24EP64MC202, PIC24EP64MC203, PIC24EP64MC204,PIC24EP64MC206

    PIC24F04KA200, PIC24F04KA201, PIC24F04KL100, PIC24F04KL101, PIC24F08KA101, PIC24F08KA102, PIC24F08KL200, PIC24F08KL201,
    PIC24F08KL301, PIC24F08KL302,PIC24F08KL401, PIC24F08KL402, PIC24F16KA101, PIC24F16KA102, PIC24F16KA301, PIC24F16KA302,
    PIC24F16KA304, PIC24F16KL401, PIC24F16KL402, PIC24F32KA301,PIC24F32KA302, PIC24F32KA304, PIC24FJ128DA106, PIC24FJ128DA110,
    PIC24FJ128DA206, PIC24FJ128DA210, PIC24FJ128GA006, PIC24FJ128GA008, PIC24FJ128GA010,PIC24FJ128GA106, PIC24FJ128GA108,
    PIC24FJ128GA110, PIC24FJ128GA306, PIC24FJ128GA308, PIC24FJ128GA310, PIC24FJ128GB106, PIC24FJ128GB108, PIC24FJ128GB110,
    PIC24FJ128GB206, PIC24FJ128GB210, PIC24FJ16GA002, PIC24FJ16GA004, PIC24FJ16MC101, PIC24FJ16MC102, PIC24FJ192GA108, PIC24FJ192GA110,
    PIC24FJ192GB106, PIC24FJ192GB108, PIC24FJ192GB110, PIC24FJ256DA106, PIC24FJ256DA110, PIC24FJ256DA206, PIC24FJ256DA210, PIC24FJ256GA106, PIC24FJ256GA108,PIC24FJ256GA110, PIC24FJ256GB106, PIC24FJ256GB108, PIC24FJ256GB110, PIC24FJ256GB206, PIC24FJ256GB210, PIC24FJ32GA002, PIC24FJ32GA004, PIC24FJ32GA102,PIC24FJ32GA104, PIC24FJ32GB002, PIC24FJ32GB004, PIC24FJ48GA002, PIC24FJ48GA004, PIC24FJ64GA002,
    PIC24FJ64GA004, PIC24FJ64GA006, PIC24FJ64GA008,PIC24FJ64GA010, PIC24FJ64GA102, PIC24FJ64GA104, PIC24FJ64GA106, PIC24FJ64GA108,
    PIC24FJ64GA110, PIC24FJ64GA306, PIC24FJ64GA308, PIC24FJ64GA310,PIC24FJ64GB002, PIC24FJ64GB004, PIC24FJ64GB106, PIC24FJ64GB108,
    PIC24FJ64GB110, PIC24FJ96GA006, PIC24FJ96GA008, PIC24FJ96GA010, PIC24FV16KA301,PIC24FV16KA302, PIC24FV16KA304, PIC24FV32KA301,
    PIC24FV32KA302, PIC24FV32KA304

    PIC24HJ128GP202, PIC24HJ128GP204, PIC24HJ128GP206A, PIC24HJ128GP210A, PIC24HJ128GP306A, PIC24HJ128GP310A, PIC24HJ128GP502,
    PIC24HJ128GP504,PIC24HJ128GP506A, PIC24HJ128GP510A, PIC24HJ12GP201, PIC24HJ12GP202, PIC24HJ16GP304, PIC24HJ256GP206A,
    PIC24HJ256GP210A, PIC24HJ256GP610A,PIC24HJ32GP202, PIC24HJ32GP204, PIC24HJ32GP302, PIC24HJ32GP304, PIC24HJ64GP202,
    PIC24HJ64GP204, PIC24HJ64GP206A, PIC24HJ64GP210A, PIC24HJ64GP502,PIC24HJ64GP504, PIC24HJ64GP506A, PIC24HJ64GP510A

    Proton Fixes
    Corrected Serin with timeout on enhanced 14-bit core devices.
    Corrected Serout on enhanced 14-bit core devices.
    Corrected some signed Dword Constant Dword subtraction expressions.

    Fixes, additions and amendments made in version of the Proton Compiler and version of the free Proton24 Compiler.

    Proton24 Fixes
    Corrected Str$ with 32-bit and 64-bit floating point variables.
    Corrected Byte variable comparisons with negative constants.

    Proton24 Addition
    Added device PIC24FJ64GA004 to the free Proton24 compiler.

    Proton Additions
    Added Ptr8, Ptr16 and Ptr32 for indirect RAM access on enhanced 14-bit core devices and 18F devices.
    Added cPtr8, cPtr16 and cPtr32 for indirect code memory access on enhanced 14-bit core devices and 18F devices.
    Added devices 12F1571, 12LF1571, 12F1572, 12LF1572, 16F1713, 16LF1713, 16F1716, and 16LF1716.
    If the devices PIC18F25K20 or PIC18F25K22 are used, the compiler will not ask for the USB key. This means that the full compiler is now the recommended compiler for use with the Amicus18 board.

    Proton Amendments
    Altered the manual to take into account the Ptr8, Ptr16, Ptr32, cPtr8, cPtr16 and cPtr32 commands.
    A new algorithm is used for Declare All_Digital that should cover most supported 8-bit microcontrollers. Giving this declare a new lease of life.
    A warning is issued if a Gosub or Call command is used within an interrupt handler, because the compiler cannot track system variable or SFR usage in an external subroutine.

    Fixes and Amendments made in version of the Proton Compiler and version of the free Proton24 Compiler

    Proton24 Fixes
    Corrected floating point constants created using Symbol.
    Corrected a mixture of integer and floating point constants within a, constants only, expression.
    Corrected the dRound function.
    Corrected the concatenation of a Byte variable to a string variable.
    Corrected Str$ producing an assembler error.
    Corrected inconsistency with a constant expression and a floating point assignment.

    Proton24 Amendments
    64-bit floating point constants are more accurately passed to the compiler.
    Tightened syntax checking for expressions containing functions.
    Altered the mechanism for calling the Assembler and Linker.

    Proton Fixes
    Corrected system variable PP5H not being created if Cls is used in a program without Print when interfacing to a KS0108 graphic LCD.
    Corrected inconsistency with a constant expression and a floating point assignment.

    Proton Amendments
    Tightened syntax checking for expressions containing functions.

    Fixes made in version of the Proton Compiler and version of the free Proton24 Compiler

    Proton24 Fixes
    Corrected Expressions containing inline commands. Remember to wrap inline functions in parenthasis for proper recognition within an expression.
    Corrected DelayUs when using the Repeat mnemonic.
    Corrected the ADin command.
    Corrected recognition of the Slow_Bus declare.

    Proton24 Additions
    Added 4 new inc files in the user Includes directory. These are:
    Replacement I2Cin and I2Cout routines written in Proton24 BASIC, and replacement Busin and Busout routines written in Proton24 BASIC.
    A library for accessing a DS1307 Real Time Clock. Named DS1307.inc
    A library for scaling one value range to another value range. Named Map.inc
    Added 5 new example programs to demonstrate the above routines.

    Proton24 Amendments
    Increased the amount of commands that accept procedures as a parameter.

    Proton Fixes
    Corrected Expressions containing inline commands. Remember to wrap inline functions in parenthasis for proper recognition within an expression.

    Fixes and Amendments made in version of Proton and version (and of Proton24

    Proton24 Fixes
    Corrected Procedure calling at the very beginning of a line.
    Corrected String comparison with a single character quoted string.
    Corrected 32-bit floating Atan and Atan2 routines (version

    Proton24 Additions
    Added 64-bit floating point Double variables.
    In addition, trigonometry routines have been added for 64-bit doubles. i.e.
    dSin, dCos, dTan, dASin, dACos, dAtan, dAtan2, dPow, dLog, dLog2, dExp, dRound, Modd etc...

    Proton24 Amendments
    Altered the compiler's manual to take into account the new Double variable type.
    The COFF generator now removes the preceding [main] text from variable names.
    The IDE now recognises Double variable types in Code Explorer.

    Proton Fixes
    Corrected Array loading with an array larger than 255 elements and a word index.
    Corrected compiler stack variable creation with a mix of float and integer variables with an integer assignment.
    Corrected a select few mixed signed integer and floating point expressions that did not observe the sign correctly.
    Corrected serial capture of a String variable with an enhanced 14-bit core device.

    Fixes and Amendments made in version of Proton and version of Proton24

    Proton24 Fixes
    Corrected Local and Global variable access when the same name is used for both.
    Removed the need for the C30_device.info file in the root of the C: drive.
    Hopefully, corrected the permissions issues that some people have reported when the assembler or linker is called.
    Corrected the use of != as a comparator with no spaces between operands. However, it should be considered as standard practice to separate assignments, operators and operands with a space.
    Corrected some unsigned comparisons against 0.

    Corrected interrupt names for the linker (version
    The compiler now traps attempting to use assembler mnemonics as variables or constants (version

    Corrected String into String library routine(version
    Corrected Dword <= Dword comparison(version
    Corrected a compiler lock up when a procedure was created without a name following it(version
    Corrected (as much as 32-bit floating point will allow) converting a floating point value to ASCII(version

    Proton24 Amendments
    Altered the Ptr8, Ptr16, Ptr32, cPtr8, cPtr16, and cPtr32 commands so that they can now use a variable as well as a WREG SFR as the address pointer(version
    The compiler now gives a syntax error when End If and End Select are used. The correct syntax is EndIf and EndSelect(version
    Removed the use of the _setup24.inc file. The defines are now individually placed into each device's .def file(version

    Proton24 Additions

    Added Modf to split a floating point variable or value into its fractional part and its whole part(version
    Updated the compiler's manual to incorporate the above amendments and addition. Also added to the Proc-EndProc section(version
    Added Ceil and Floor function descriptions to the compiler's manual(version

    Proton for 8-bit devices Fixes
    Corrected the SonyIn command for an oscillator frequency of 64MHz.
    Corrected RAM bank switching when using a low-priority interrupt on 18F devices.
    Corrected the use of != as a comparator with no spaces between operands.

    General Fixes
    The installer now adds the USB key driver files into the appropriate Windows directories(version and version
    The installer now adds the mcPluginMgr.dll application into the appropriate Windows directory(version and version
    Removed the use of the $include directive from the preprocessor when loading the .def files, because it was found to be a little erratic in its operation(version and version

    Fixes and Amendments made in version

    Removed Movlp mnemonics from enhanced core devices that have less than 1 code page (2048 words).
    Updated the enhanced 14-bit core optimiser to version
    Added a trap for missing TRISE when using commands: High. Low, Input or Output.
    Altered the While-Wend mechanism. If no text follows the While statement, it will implement an infinite loop.
    Note that this mechanism is only valid for While and Wend on seperate lines.
    The prp file mechanism has now been removed from the compiler.


    Corrected an early return of the compiler if an unknown variable is use as the first parameter within a comparison.
    Corrected fRound within a signed expression.
    Corrected missing escape characters within quoted strings of text.
    Corrected asm duplicate label name error with certain For-Next combinations.
    Corrected some signed Dword subtraction expressions on enhanced 14-bit core devices.
    Corrected Eread when used with code reading routines in the same program on standard 14-bit core devices.

    Fixes and Amendments made in version

    The Declare text is now mandatory for all except; Xtal and Device.
    A syntax error will be produced if the Declare is not issued.
    The prp mechanism is still in place, but will be removed in the next update.
    Added simple range checks for assignments loaded with constants. i.e. MyByte = -129 or MyByte = 129


    Corrected Comparison Float > Constant, where Constant is a negative value.
    Corrected Timeout delay for Hrsin and Hrsin2 for enhanced 14-bit core devices.
    Corrected USB device name string and enumeration.
    Corrected the creation of the system variable PP3 with the SDec modifier on 14-bit core devices.
    Corrected RAM bank switching with enhanced 14-bit core devices causes by the internal redundant Movlb removal pass.
    Corrected COFF creation for strings held in code memory. Data was being missed.
    Corrected StrN being loaded with a single constant or variable. i.e. StrN MyArray = "0".

    Fixes and Additions made in version

    Added devices 12F1501, 12LF1501, 16F1454, 16LF1454, 16F1455, 16LF1455, 16F1459, 16LF1459, 16F1512, 16LF1512, 16F1513, 16LF1513,
    18F24K50, 18LF24K50, 18F25K50, 18LF25K50, 18F45K50, 18LF45K50.
    Note that USB is not implemented as commands with enhanced 14-bit core devices.
    Added three new sample programs.


    Corrected expression SWord = SWord / Constant, where constant is above the value 255 and not a power of 2. For all devices.
    Corrected RAM bank switching for 12-bit core devices and standard 14-bit core devices.
    Corrected and amended Adin for enhanced 14-bit core devices (partially broken in version It now also uses the value from the Declare Adin_Tad to load the ADCON1 SFR (if available on the device).

    Fix, Additions and Amendments made in version

    Added enhanced 14-bit core devices 16F1782, 16FLF1782, 16F1783, 16LF1783, 16F1784, 16LF1784, 16F1786, 16LF1786, 16F1787, 16LF1787

    Trapped symbol and variable names starting with a digit. i.e. Dim 10Mice as Byte. It now produces a compiler syntax error instead of an assembler error.
    Updated the assembler version.


    Corrected RAM bank switching with some signed variable comparisons on 18F devices.

    Fix and Amendments made in version

    Reinstated the prp file created for project use with some third party plugins. This was removed in earlier versions because of issues with cof creation
    Updated PDF manual to take into account the changes to Dig and Rev.
    Updated Timer, SPI and ADC macros to use the compiler's Include directive instead of the pre-processor's.

    Corrected floating point Less Than comparison with positive constants.

    Fixes and Amendment made in version

    A signed variable either side of an assignment will now cause a sign extend to occur. Meaning the assignment variable will hold a signed value.

    Corrected fRound when assignment variable is a float. The routine now converts to an integer then to a float.
    Corrected obscure RAM bank and page boundary switching anomaly with enhanced 14-bit core devices.
    Corrected obscure RAM bank switching anomaly with 18F devices.
    Corrected installer file corruption in version and possibly

    Fixes and Amendments made in version

    Updated relevant PPI files for the CTMUCON SFR.
    Removed Max and Min routines because of expression parser issues with these, now obsolete, commands.
    Replaced the Rev function with the character @. Therefore, instead of Var = Var Rev Var, use Var = Var @ Var.
    Replaced the BASIC stamp version of the Dig function with the character ?. Therefore, instead of Var = Var Dig Var, use Var = Var ? Var.

    Corrected Floating point conversion into an integer array that has an expression as an index.
    Corrected recognition issues of some symbol names by the expression parser.
    Corrected the use of the incf mnemonic with enhanced 14-bit core devices when using the carry flag as a follow on for a high byte calculation.
    Corrected the expression dword = word - constant with enhanced 14-bit core devices.
    Corrected the Clear command with some 18F devices. It was also clearing SFRs that are outside upper Access RAM.
    Corrected the Break command when used within a loop that is within a Select-EndSelect construct.
    Corrected recognition of the Lsrf mnemonic within the enhanced 14-bit core internal optimiser pass.

    For a history of Fixes, Additions and Amendments see the What's new document that always accompanies a new update.

  • Recent Activity


    18F8722 Code Stops when PEIE enabled

    Thread Starter: fgcity

    Hi everyone, I am not sure why but for some reason when i enable the Peripheral interrupt (PEIE) then my code stops working. In my Interrupt...

    fgcity Today, 17:06 Go to last post

    Start with WS2812

    Thread Starter: basparky

    Hi, I was wondering if someone has done something with the ws2812 digital leds. I would like to start playing with it and hoping someone can share...

    basparky Today, 09:21 Go to last post