SFR bit access using the preprocessor’s built-in meta macros
The SFR bit names are extremely useful within the BASIC program because they circumvent any differences in the device's makeup. For example, in order to access a device’s Carry flag, use: SRbits_C
All the bit names follow the same rule, where the SFR name is first, followed by the text "bits_", followed by the bit name. Below are a few examples:
T1CONbits_TCS T1CONbits_TSYNC T1CONbits_TGATE T1CONbits_TSIDL T1CONbits_TON T1CONbits_TCKPS0 T1CONbits_TCKPS1
To see all the SFR bit meta-macros available to a device, open the device’s .def file and there is a compete list of them for all the SFRs and bit names attached to them. The .def files can be found within the compiler’s folder, inside the Defs folder.
$else
This toggles the logical value of the current conditional block. What follows is evaluated if the preceding condition was not met.
$endif
This ends a conditional block started by the $if, $ifdef or $ifndef directives.
$elseif expression This directive can be used to avoid nested $if conditions. $if..$elseif..$endif is equivalent to
$if..$else $if ..$endif $endif.
The $if, $else and $elseif directives serve to specify some condition to be met in order for the portion of code they surround to be compiled. The condition that follows $if or $elseif can only evaluate constant expressions, including macro expressions. For example:-
$if TableSize > 200
$undef TableSize
$define TableSize 200
$elseif TableSize < 50
$undef TableSize
$define TableSize 50
$else
$undef TableSize
$define TableSize 100
$endif
Dim Table[TableSize] as Byte
Notice how the whole structure of $if, $elseif and $else chained directives ends with $endif.
The behaviour of $ifdef and $ifndef can also be achieved by using the special built-in user directive _defined and ! _defined respectively, in any $if or $elseif condition. These allow more flexibility than $ifdef and $ifndef. For example:-
$if _defined (MyDefine) and _defined (AnotherDefine)
{ BASIC Code Here }
$endif
The argument for the _defined user directive must be surrounded by parenthesis. The preceding character “!” means “not”.
$error message This directive causes an error message with the current filename and line number. Subsequent processing of the code is then aborted.
$error Error Message Here