Return to AttoBasic Version 2 page

Instruction set of the AttoBASIC interpreter Version 2

Control
CONTROL-C    The control-c keyboard combination halts program operation.  Press twice.
CONTROL-S    The control-s keyboard combination stops the program until another key is pressed
NEW    New Program EX: NEW
LIST    List program Ex: LIST
PRINT    Print value to screen Ex: PRINT A
PRX    Print hex Ex: PRX 100 results in the output: 64
PRB    Print binary Ex: PIB INB prints PINB in binary
$ (Dollar Sign)    Convert two following characters from ASCII EX: A:=$31
KEY    Get key from terminal Ex: A := KEY ; or KEY (return) to pause.
EMIT    Emit value as ASCII character to terminal Ex: EMIT $20 (sends a space).
RND    Creates an 8-bit random number.  Ex: PRI RND [or] A:= RND.
RUN    Run Program Ex: RUN
IF-THEN    Control structure Ex: IF A=31 THEN GOTO 100
FOR-TO-NEXT    Looping structure Ex: see below
GOSUB-RETURN    Program flow control Ex: see below
GOTO LINENUM    Flow Ex: GOTO 100
DELAY [x]    Delay “X” & 10mS. Ex: DELAY 20 delays 200mS
SIZE    Print the Remaining Bytes Of Program Space To Screen Ex: SIZE
; (Semicolon)    Separate commands on a program line.  Ex: TWI ; TWS ; TWA $5C ; TWW $55 ; TWP initializes the TWI interface, asserts a START condition, addresses the slave at address $5C, writes “$55” to it and asserts a STOP condition. [Note: the semicolon is only valid when embedded in a program line]
DUMP    Dump program memory in hex format EX: DUMP
VDUMP    Dump the contents of the variables [A..Z] Ex: DUMP
EDUMP    Dump EEPROM memory in hex format EX: EDUMP
END    Stop execution of program EX: END (this command is not required at end of program)
<backspace>    Destructive backspace during line editing
SAVE    Save program to EEPROM Ex: SAVE [Note: the SAVE command will complain if the program is too big for storage in EEPROM]
LOAD    Load program from EEPROM Ex: LOAD
 
Operator/Relational
:=    Set equal to (LET instruction not needed)
=    Used for evaluation as in IF a = b THEN...)
<>    Not equal to
>    Is greater than
<    Is less than
-    Subtraction, 8 bit unsigned
+    Addition, 8 bit
*    Multiplication, 8-bit
/    Division, 8-bit
AND    Logical AND between two 8 bit values
OR    Logical OR between two 8 bit values
XOR    Logical Exclusive OR between two 8 bit values
LSL    Logical shift left
LSR    Logical shift right
COM    Compliment (1’s compliment or bitwise inversion)
NEG    Negate (2’s compliment)
AOV [x]    Enable arithmetic overflow and underflow detection where x = 1 enables error detection and x = 0 disables error detection.  Without [x] is same as x = 0.  Defaults to x = 1.  Note that when detection is disabled, the result from an arithmetic operation will return the 8-bit result.  Expect errors if not careful!

Input Capture
ICG [x]    Initializes ICP mode and sets Input Capture gate time to x[0..7] where x is optional (default 0). Ex: ICG 7 enables ICP registers and sets gate capture time to 1 second.0 = disables the ICP function.
1 = 10mS gate time
2 = 25mS gate time
3 = 50mS gate time
4 = 100mS gate time
5 = 250mS gate time
6 = 500mS gate time
7 = 1000mS gate time
ICE [x]    Optionally sets the capture edge.  Where x = 0 for falling and 1 for rising (default is 1).  Ex: ICE 1 set capture on rising edge.
ICP    Returns the low byte value and stores the high byte in variable 'Z'.  'Z' is clobbered when executing this command so be aware. Returns an error if there is a 16-bit overflow (and clears 'Z').  Ex: PRX ICP
Bit I/O
PEEK    read value of memory ex: PRX PEEK A,B
POKE    write value of memory ex: POKE A,$31; POKE VALUE,destination
 
Note: For the following Port I/O commands, substitute [p] for the port value (A..D) if relevant for the MCU AttoBASIC has been compiled for.  Examples are show for each command.
OD[p]    Output data direction register DDR[p] EX: ODB $FF
ID[p]    Input from data direction register DDR[p] EX: J:= IDC
SD[p]    Set bit in data direction register DDR[p] EX: SDD 3
CD[p]    Clear bit in data direction register DDR[p] EX: CDA 3
OP[p]    Output PORT[p]             EX: OPA $1A
SB[p]    Set bit on PORT[p]         EX: SBB 3
CB[p]    Clear bit on PORT[p]         EX: CBC 3
IN[p]    Input from PIN[p]          EX: J:= INAC
IB[p]    Input bit from PORT[p]     EX: IF IBD 2 THEN GOTO 100

Pulse Width Modulator
PWM8[x]    Pulse width modulation 8 bit on OC0A [or] OC1A PIN EX: PWM 17 [Note: the default is OC1A]
PWE [x]    PWM extended 10 bit pwm on OC1A pin EX: PWE 2,00 [Note: the PWE command may not be enabled if the compiled MCU timer does not support it, i.e. if OC0A is selected as the PWM channel at compile time, this command is disabled]
PWO    PWM on OC1A [or OC0A] PIN OFF (does not affect any data direction register).

Analog Comparator
ACO    Analog comparator output EX: IF ACO THEN PRINT A. Prints a if analog comparator output is high

Analog to Digital Converter
ADR [x]    ADR [x] initializes the ADC and sets the ADC reference to Internal or External. x = 0 for INT and x = 1 for EXT.  Without [x] is same as x = 0, int. ref.  Ex: ADR 1 selects external Vref for ADC. [Note: this command must be executed before obtaining readings from the ADC]
ADC [x]    8-bit ADC conversion EX: PRX ADC [or] PRX ADC 9 [or] PRX ADC 15. Without [x] is same as x = 0 [Refer to the appropriate AVR data sheet for valid ADC channel numbers as some AVR’s support reading the on-chip temperature and Vref.  This command does not error check ‘x’.]

DS Interface
DSDATA    Send a byte over the DS Interface as data EX: DSDATA A
DSCOMMAND    Send a byte over the DS Interface as a command EX: DSCOMMAND C
DSREAD    Read a byte from the DS Interface EX: PRX DSREAD

DDS (Direct Digital Synthesis) Interface
DDS [x]    Outputs a frequency on the defined port pin at the 6-BCD-digit frequency held in the X/Y/Z variables. X = 0 to disable DDS and x = 1 to enable [X/Y/Z set first]. Without X same as 0 [disable]. The DDS sample frequency is set to twice the Interrupt service routine's duration, which is 5uS.  Therefore, the output frequency range will be 0 to 25KHz in 1Hz steps.  Ex (as separate commands): X:= 01, Y:= 23, Z:= 45, DDS 1 will emit a 12.345KHz frequency on the DDSOut pin.

SPI Interface
SPM [x]    MUST be called first to initializes the SPI hardware to operate in Mode [0..3]. Without [x] is same as x = 2; Master, Mode 2, F_CLK/16, MSB first. (Refer to the AVR data sheet for explanation of mode #’s)
SPO [x]    Optionally set MSB/LSB data order where x = 0 for MSB and x = 1 for LSB.
SPC [x]    Optionally set SPI clock to [0.15].  (Refer to the AVR data sheet for explanation of mode #’s)
SPW [x]    Write a byte to SPI.  Note that SPI_SS pin is set low when this command is executed and not restored so user must toggle the pin high with the SPS command.
SPR    Read a byte from SPI. Note that SPI_SS pin is set low when this command is executed and not restored so user must toggle the pin high with the SPS command.
SPS [x]    Set the SPI_SS pin to logic level of [x]. Defaults to '1'

TWI Interface
TWI [x]    TWI must be called first to initialize the TWI interface. X = 0 for 400Kbps and x = 1 for 100Kbps clock.  Without [x] is same as x = 0. Defaults to Master @ 400Kbps with PORT pull-ups enabled.  [Note: A 6.4MHz clock is required to operate the TWI at 400K.  If it is desired to use alternate pull-ups, disable the PORT pull-ups by clearing the SCL/SDA pins in the PORT register. Ex (as separate commands): CBC 4, CBC 5].
TWS    Assert a START condition on the bus.  When the TWI interface is initialized, a START condition is asserted.  Returns with the bus status on the stack.  However, the user must re-assert a START condition after a STOP condition to ready the bus for the next message sequence.
TWP    Assert a STOP condition on the bus.  The user must assert a STOP condition after the last message byte has been sent to or received from the slave or to abort a transfer in progress.
TWA [x]    TWA sends the slave address to the bus.  Returns with the bus status on the stack. Ex 1: TWA $A0 selects slave address $A0 for writing.  Ex 2: A:= TWA $A0 selects slave address $A0 for writing and returns the bus status in variable A.  [Note: This command should be used after issuing a START condition to send the desired slave address.  The user must insure bit 0 of the slave address contains the R(ead) or W(rite) indicator bit AND’ed or OR’ed with the 7-bit slave address before sending.  The address may need to be left-shifted one bit position]
TWW [x]    TWW sends a byte to the bus.  Returns with the bus status on the stack.  Ex 1: TWW B eend the data held in variable B to the previously selected slave for a write operation.  Ex 2: A:= TWW $A0 sends $A0 to the slave for writing and returns the bus status in variable A.  .  [Note issue this command after a “TWA [x]” (SLA+W) has been issued and acknowledged by the slave].
TWR [x]    Receives a byte from the TWI bus and places it onto the stack..  x = 0 to signal to the slave that this is the last byte to receive, x = 1 to signal to the slave there is more data to receive. Without [x] is same as x = 1.  Ex: A:= TWR 0 receives a byte, signal to the slave that no further data is requested and returns the data in variable A. [Note issue this command after a “TWA [x]” (SLA+R) has been issued and acknowledged by the slave].
TWB    Queries the TWI status register for the last detected condition of the bus.  [Note: the byte returned is right-shifted 3 bit positions. If a STOP condition has been detected, $80 is returned to indicate so. Ex: A:= TWB (if A = 3 then SLA+W has been transmitted and an ACK received).
 


Return to AttoBasic Version 2 page