Perform variable manipulation (wordsize-to-wordsize).
Maths is performed strictly from left to right. The ‘let’ keyword is optional.
The microcontroller supports word (16 bit) mathematics. Valid integers are 0 to 65535. All mathematics can also be performed on byte (8 bit) variables (0-255). The microcontroller does not support fractions or negative numbers. However it is sometimes possible to rewrite equations to use integers instead of fractions, e.g. let w1 = w2 / 5.7 is not valid, but let w1 = w2 * 10 / 57 is mathematically equal and valid.
The mathematical functions supported by all parts
| + |
add |
| - |
subtract
|
| * |
multiply (returns low word of result) |
| ** |
multiply (returns high word of result) |
| / |
divide (returns quotient) |
| // (or %) |
modulus divide (returns remainder) |
| MAX |
limit value to a maximum value |
| MIN |
limit value to a minimum value |
| AND (or &) |
bitwise AND |
| OR (or |) |
bitwise OR (typed as SHIFT + \ on UK keyboard) |
| XOR |
bitwise XOR (typed as SHIFT + 6 on UK keyboard) |
| NAND |
bitwise NAND |
| NOR |
bitwise NOR |
| ANDNOT (or &/) |
bitwise AND NOT (NB this is not the same as NAND) |
| ORNOT (or |/) |
bitwise OR NOT (NB this is not the same as NOR) |
| XNOR (or ^/) |
bitwise XOR NOT (same as XNOR) |
The X1 and X2 parts also support
| << |
shift left |
| >> |
shift right |
| */ |
multiply (returns middle word of result) |
The X1 and X2 parts also support these unary commands
| SIN |
sine of angle (0 to 65535) in degrees (value * 100 is returned) |
| COS |
cosine of angle in degrees (value * 100 is returned) |
| SQR |
square root |
| INV |
invert |
| NCD |
encoder (2n power encoder) |
| DCD |
decoder (2n power decoder) |
| BINTOBCD |
convert binary value to BCD |
| BCDTOBIN |
convert BCD value to binary |
| REV |
reverse a number of bits |
| DIG |
return a BCD digit |
| NOB |
count number of set bits (X2 only) |
| ATAN |
calculate the arctan of a value (result 0-45 degrees) (X2 only) |
All mathematics is performed strictly from left to right.
LET dirs / dirsA / dirsB / dirsC / dirsD = value
Some microcontrollers allow inputs to be configured as inputs or outputs. In these cases it is necessary to tell the microcontroller which pins to use as inputs and/or outputs (all are configured as inputs on first power up). There are a number of ways of doing this:
1) Use the input/output/reverse commands.
2) Use an output command (high, pulsout etc) that automatically configures the pin as an output.
3) Use the let dirs = statement. When working with this statement it is conventional to use binary notation. With binary notation pin 7 is on the left and pin 0 is on the right. If the bit is set to 0 the pin will be an input, if the bit is set to 1 the pin will be an output. Note that the 8 pin PICAXE have some pre-configured pins (e.g. pin 0 is always an output and pin 3 is always an input). Adjusting the bits for these pins will have no effect on the microcontroller.
For M2 and X2 parts which have more than one configurable port, you must use port specific commands by adding the letter of the port after dirs, eg LET dirsB = %00000010 to make pin1 of port B an output, and all other pins inputs.
| Configure pins as inputs or outputs |
(let dirs =) |
(08/08M/08M2) |
| Configure pins as inputs or outputs on portc |
(let dirsc =) |
(14M) |
| Configure pins as inputs or outputs on portc |
(let dirsc =) |
(28X/40X) |
| Configure pins as inputs or outputs on portc |
(let dirsc =) |
(28X1/40X1) |
LET pins / pinsA / pinsB / pinsC / pinsD = value
Set/clear all outputs on the main output port (let pins = ), or on a specific port (let pinsA/pinsB/pinsC/pinsD =).
High and low commands can be used to switch individual outputs high and low. However when working with multiple outputs it is often convenient to change all outputs simultaneously. When working with this statement it is conventional to use binary notation. With binary notation output7 is on the left and output0 is on the right. If the bit is set to 0 the output will be off (low), if the bit is set to 1 the output will be on (high).
Do not confuse the input port with the output port. These are separate ports on all except the 8 pin PICAXE. The command let pins = pins means 'make the output port the same as the input port'. Note that on devices that have input/output bi-directional pins (08 / 08M), this command will only function on pins configured as outputs. In this case it is necessary to configure the pins as outputs (using a let dirs/dirsX = command) before use of this command.