The SX instruction set is PIC 16x54 compatible with a few additions....
Use Al Williams Microchip-style mnemonics (cached 20000731) for PIC coding in the SXKey.
Use sxdefs.inc from Richard Ottosen for Scenix coding in MPLAB then program the Hex file to the SX using just about any SX Programmer
Also: see the Code Library
Note: change CLR WDT to CLR !WDT, but accept old version, too.
I N S T R U C T I O N S E T
-------------------------------------------------------------------------------------------------------------------------------
Instruction Words Cycles Flags Affects Description Microchip Equivalent
-------------------------------------------------------------------------------------------------------------------------------
========================
byte-oriented operations
========================
MOV W,#lit 1 1 - W Move literal into W MOVLW lit
MOV W,fr 1 Z W Move fr into W MOVF fr,0
MOV fr,W 1 - fr Move W into fr MOVWF fr
MOV fr,#lit 2 - W,fr Move literal into fr MOVLW lit; MOVWF fr
MOV fr1,fr2 2 Z W,fr1 Move fr2 into fr1 MOVF fr2,0; MOVWF fr1
ADD W,fr 1 C,DC,Z - Add fr into W ADDWF fr,0
ADD fr,W 1 C,DC,Z -,fr Add W into fr ADDWF fr,1
ADD fr,#lit 2 C,DC,Z W,fr Add literal into fr MOVLW lit; ADDWF fr,1
ADD fr1,fr2 2 C,DC,Z W,fr1 Add fr2 into fr1 MOVF fr2,0; ADDWF fr1,1
MOV W,fr-W 1 C,DC,Z - Move fr-W into W SUBWF fr,0
SUB fr,W 1 C,DC,Z -,fr Subtract W from fr SUBWF fr,1
SUB fr,#lit 2 C,DC,Z W,fr Subtract lit from fr MOVLW lit; SUBWF fr,1
SUB fr1,fr2 2 C,DC,Z W,fr1 Subtract fr2 from fr1 MOVF fr2,0; SUBWF fr1,1
AND W,#lit 1 Z - AND literal into W ANDLW lit
AND W,fr 1 Z - AND fr into W ANDWF fr,0
AND fr,W 1 Z -,fr AND W into fr ANDWF fr,1
AND fr,#lit 2 Z W,fr AND literal into fr MOVLW lit; ANDWF fr,1
AND fr1,fr2 2 Z W,fr1 AND fr2 into fr1 MOVF fr2,0; ANDWF fr,1
OR W,#lit 1 Z - OR literal into W IORLW lit
OR W,fr 1 Z - OR fr into W IORWF fr,0
OR fr,W 1 Z -,fr OR W into fr IORWF fr,1
OR fr,#lit 2 Z W,fr OR literal into fr MOVLW lit; IORWF fr,1
OR fr1,fr2 2 Z W,fr1 OR fr2 into fr1 MOVF fr2,0; IORWF fr1,1
XOR W,#lit 1 Z - XOR literal into W XORLW lit
XOR W,fr 1 Z - XOR fr into W XORWF fr,0
XOR fr,W 1 Z - XOR W into fr XORWF fr,1
XOR fr,#lit 2 Z W XOR literal into fr MOVLW lit; XORWF fr,1
XOR fr1,fr2 2 Z W XOR fr2 into fr1 MOVF fr2,0; XORWF fr1,1
CLR W 1 Z - Clear W CLRW
CLR fr 1 Z - Clear fr CLRF fr
MOV W,++fr 1 Z - Move fr+1 into W INCF fr,0
INC fr 1 Z - Increment fr INCF fr,1
MOV W,--fr 1 Z - Move fr-1 into W DECF fr,0
DEC fr 1 Z - Decrement fr DECF fr,1
MOV W,<<fr 1 C - Move left-rotated fr into W RLF fr,0
RL fr 1 C - Rotate left fr RLF fr,1
MOV W,>>fr 1 C - Move right-rotated fr into W RRF fr,0
RR fr 1 C - Rotate right fr RRF fr,1
MOV W,<>fr 1 - - Move nibble-swapped fr into W SWAPF fr,0
SWAP fr 1 - - Swap nibbles in fr SWAPF fr,1
NOT W 1 Z - Perform not on W XORLW 0FFh
MOV W,/fr 1 Z - Move not'd fr into W COMF fr,0
NOT fr 1 Z - Perform not on fr COMF fr,1
TEST W 1 Z - Test W for zero IORLW 0
TEST fr 1 Z - Test fr for zero MOVF fr,1
TSTN w 1 Z w Test W for $FF (NOT w) XORLW 0FFh
TSTN fr 1 Z fr Test fr for $FF (NOT fr) COMF fr,1
=======================
bit-oriented operations
=======================
CLRB bit 1 - - Clear bit BCF bit
CLC 1 C - Clear carry BCF 3,0
CLZ 1 Z - Clear zero BCF 3,2
SETB bit 1 - - Set bit BSF bit
STC 1 C - Set carry BSF 3,0
STZ 1 Z - Set zero BSF 3,2
ADDB fr,bit 2 Z - Add bit into fr BTFSC bit; INCF fr,1
ADDB fr,/bit 2 Z - Add not bit into fr BTFSS bit; INCF fr,1
SUBB fr,bit 2 Z - Subtract bit from fr BTFSC bit; DECF fr,1
SUBB fr,/bit 2 Z - Subtract not bit from fr BTFSS bit; DECF fr,1
MOVB bit1,bit2 4 - - Move bit2 into bit1 BTFSS bit2; BCF bit1; BTFSC bit2; BSF bit1 (doesn't work)
MOVB bit1,/bit2 4 - - Move not bit2 into bit1 BTFSC bit2; BCF bit1; BTFSS bit2; BSF bit1 (doesn't work)
============================
inc/dec-conditional branches
============================
MOVSZ W,++fr 1 - - Move fr+1 into W, skip if zero INCFSZ fr,0
INCSZ fr 1 - - Increment fr, skip if zero INCFSZ fr,1
IJNZ fr,addr 2 * - - Increment fr, jump if not zero INCFSZ fr,1; GOTO addr
MOVSZ W,--fr 1 - - Move fr-1 into W, skip if zero DECFSZ fr,0
DECSZ fr 1 - - Decrement fr, skip if zero DECFSZ fr,1
DJNZ fr,addr 2 * - - Decrement fr, jump if not zero DECFSZ fr,1; GOTO addr
============================
compare-conditional branches
============================
CSE fr,#lit 3 C,DC,Z W Compare, skip if equal MOVLW lit; SUBWF fr,0; BTFSS 3,2
CSE fr1,fr2 3 C,DC,Z W Compare, skip if equal MOVF fr2,0; SUBWF fr1,0; BTFSS 3,2
CSNE fr,#lit 3 C,DC,Z W Compare, skip if not equal MOVLW lit; SUBWF fr,0; BTFSC 3,2
CSNE fr1,fr2 3 C,DC,Z W Compare, skip if not equal MOVF fr2,0; SUBWF fr1,0; BTFSC 3,2
CSA fr,#lit 3 C,DC,Z W Compare, skip if above MOVLW /lit; ADDWF fr,0; BTFSS 3,0
CSA fr1,fr2 3 C,DC,Z W Compare, skip if above MOVF fr1,0; SUBWF fr2,0; BTFSC 3,0
CSAE fr,#lit 3 C,DC,Z W Compare, skip if above or equal MOVLW lit; SUBWF fr,0; BTFSS 3,0
CSAE fr1,fr2 3 C,DC,Z W Compare, skip if above or equal MOVF fr2,0; SUBWF fr1,0; BTFSS 3,0
CSB fr,#lit 3 C,DC,Z W Compare, skip if below MOVLW lit; SUBWF fr,0; BTFSC 3,0
CSB fr1,fr2 3 C,DC,Z W Compare, skip if below MOVF fr2,0; SUBWF fr1,0; BTFSC 3,0
CSBE fr,#lit 3 C,DC,Z W Compare, skip if below or equal MOVLW /lit; ADDWF fr,0; BTFSC 3,0
CSBE fr1,fr2 3 C,DC,Z W Compare, skip if below or equal MOVF fr1,0; SUBWF fr2,0; BTFSS 3,0
CJE fr,#lit,addr 4 * C,DC,Z W Compare, jump if equal MOVLW lit; SUBWF fr,0; BTFSC 3,2; GOTO addr
CJE fr1,fr2,addr 4 * C,DC,Z W Compare, jump if equal MOVF fr2,0; SUBWF fr1,0; BTFSC 3,2; GOTO addr
CJNE fr,#lit,addr 4 * C,DC,Z W Compare, jump if not equal MOVLW lit; SUBWF fr,0; BTFSS 3,2; GOTO addr
CJNE fr1,fr2,addr 4 * C,DC,Z W Compare, jump if not equal MOVF fr2,0; SUBWF fr1,0; BTFSS 3,2; GOTO addr
CJA fr,#lit,addr 4 * C,DC,Z W Compare, jump if above MOVLW /lit; ADDWF fr,0; BTFSC 3,0; GOTO addr
CJA fr1,fr2,addr 4 * C,DC,Z W Compare, jump if above MOVF fr1,0; SUBWF fr2,0; BTFSS 3,0; GOTO addr
CJAE fr,#lit,addr 4 * C,DC,Z W Compare, jump if above or equal MOVLW lit; SUBWF fr,0; BTFSC 3,0; GOTO addr
CJAE fr1,fr2,addr 4 * C,DC,Z W Compare, jump if above or equal MOVF fr2,0; SUBWF fr1,0; BTFSC 3,0; GOTO addr
CJB fr,#lit,addr 4 * C,DC,Z W Compare, jump if below MOVLW lit; SUBWF fr,0; BTFSS 3,0; GOTO addr
CJB fr1,fr2,addr 4 * C,DC,Z W Compare, jump if below MOVF fr2,0; SUBWF fr1,0; BTFSS 3,0; GOTO addr
CJBE fr,#lit,addr 4 * C,DC,Z W Compare, jump if below or equal MOVLW /lit; ADDWF fr,0; BTFSS 3,0; GOTO addr
CJBE fr1,fr2,addr 4 * C,DC,Z W Compare, jump if below or equal MOVF fr1,0; SUBWF fr2,0; BTFSC 3,0; GOTO addr
========================
bit-conditional branches
========================
SB bit 1 - - Skip if bit BTFSS bit
SC 1 - - Skip if carry BTFSS 3,0
SZ 1 - - Skip if zero BTFSS 3,2
SNB bit 1 - - Skip if not bit BTFSC bit
SNC 1 - - Skip if not carry BTFSC 3,0
SNZ 1 - - Skip if not zero BTFSC 3,2
JB bit,addr 2 * - - Jump to address if bit BTFSC bit; GOTO addr
JC addr 2 * - - Jump to address if carry BTFSC 3,0; GOTO addr
JZ addr 2 * - - Jump to address if zero BTFSC 3,2; GOTO addr
JNB bit,addr 2 * - - Jump to address if not bit BTFSS bit; GOTO addr
JNC addr 2 * - - Jump to address if not carry BTFSS 3,0; GOTO addr
JNZ addr 2 * - - Jump to address if not zero BTFSS 3,2; GOTO addr
======================
unconditional branches
======================
SKIP 1 - - Skip next instruction word BTFSC/BTFSS 2,0
JMP addr 1 * - - Jump to address GOTO addr
JMP PC+W 1 C,DC,Z - Add W into PC(L) ADDWF 2,1
JMP W 1 - - Move W into PC(L) MOVWF 2
CALL addr 1 * - - Call to address
RETW lit,lit... 1 - - Return from call, literal in W
RET 1 - - Return from call
RETP 1 - - Return from call, affect PA2:PA0
RETI 1 - - Return from interrupt
RETIW 1 - - Return from interrupt, compensate RTCC
Note: Skips should be followed only by single-word instructions.
* Increase by 1 word if @addr used to insert page instruction.
==========================
i/o and control operations
==========================
PAGE addr 1 - - Transfer addr.11:addr.9 into PA2:PA0, will delay skipping
BANK fr 1 - - Transfer fr.7:fr.5 into FSR.7:FSR.5
MOV M,#lit 1 - - Move literal into M
MOV M,W 1 - - Move W into M
MOV M,fr 2 Z W Move fr into M
MOV W,M 1 - - Move M into W
MOV fr,M 2 - W Move M into fr
MOV !port,W 1 - - Move W into port's TRIS TRIS port (port=5 to 7)
MOV !port,#lit 2 - W Move literal into port's TRIS MOVLW lit; TRIS port (port=5 to 7)
MOV !port,fr 2 Z W Move fr into port's TRIS MOVF fr,0; TRIS port (port=5 to 7)
MOV !OPTION,W 1 - - Move W into OPTION OPTION
MOV !OPTION,#lit 2 - W Move literal into OPTION MOVLW lit; OPTION
MOV !OPTION,fr 2 Z W Move fr into OPTION MOVF fr,0; OPTION
CLR !WDT 1 TO,PD - Clear WDT and prescaler CLRWDT
SLEEP 1 TO,PD - Clear WDT and enter sleep mode SLEEP
IREAD 1 - - Read instruction at M:W into M:W
NOP 1 - - No operation NOP
L A B E L S
-------------------------------------------------------------------------------------------------------------------------------
Label Description
-------------------------------------------------------------------------------------------------------------------------------
labelname global label
:labelname local label
O P E R A T O R S
-------------------------------------------------------------------------------------------------------------------------------
Expression Operator Description
-------------------------------------------------------------------------------------------------------------------------------
|| Absolute Unaries
+ (no effect)
- Negate
~ Not
& And Binaries
| Or
^ Xor
+ Add
- Subtract
* Multiply
/ Divide
// Mod
<< Shift left
>> Shift right (arithmetic)
>< Reverse bits . Bit Address
=< Below or equal Conditionals
=> Above or equal
= Equal
<> Not equal
< Below
> Above
( Begin sub expression
) End sub expression
# Literal (default radix is decimal)
$ Hexadecimal (#$ prefixes a hexidecimal literal)
% Binary (#% prefixes a binary literal)
D I R E C T I V E S
-------------------------------------------------------------------------------------------------------------------------------
Directive Description
-------------------------------------------------------------------------------------------------------------------------------
DEVICE setting,setting... Establish device settings (should precede other directives/instructions)
ID wordvalue Establish device ID
RESET address Assemble 'jmp address' at last location for reset
label EQU value Equate label to value
ORG address Set origin to address
DS locations Define space: origin=origin+locations
DW data,data,... Define word(s)
MACRO
-------------------------------------------------------------------------------------------------------------------------------
Pre-Defined Symbols
-------------------------------------------------------------------------------------------------------------------------------
******** DEVICE Directive Symbols Set bits in the FUSE register
- used to establish device parameters
- multiple DEVICE statements allowed to accomodate parameters
Example: DEVICE PINS18, PAGES4, BANKS8, OSCHS
DEVICE BOR40, TURBO, STACKX, OPTIONX, CARRYX, PROTECT
PINS18 Pins (default: PINS18)
PINS28
PINS40
PINS64
PAGES1 E2Flash pages (default: PAGES1)
PAGES2
PAGES4
PAGES8
BANKS1 RAM banks (default: BANKS1)
BANKS2
BANKS4
BANKS8
OSCHS External crystal/resonator (default: OSCHS)
OSCXT External crystal/resonator
OSCLP External crystal/resonator
OSCRC External RC
OSC4MHZ Internal 4MHz
OSC2MHZ Internal 2MHz
OSC1MHZ Internal 1MHz
OSC500KHZ Internal 500KHz
OSC250KHZ Internal 250KHz
OSC125KHZ Internal 125KHz
OSC62KHZ Internal 62KHz
OSC31KHZ Internal 31KHz
BOR40 4.0V Brownout Reset (default: Brownout Reset is disabled)
BOR25 2.5V Brownout Reset
BOR13 1.3V Brownout Reset
TURBO Turbo mode enabled (1:1 execution) (default: 1:4 execution)
STACKX Stack is extended to 8 levels (default: Stack is 2 levels)
OPTIONX OPTION is extended to 8 bits (default: OPTION is 6 bits)
CARRYX ADD/SUB uses carry flag (default: ADD/SUB ignores carry flag)
SYNC Input Syncing enabled (default: Input Syncing disabled)
WATCHDOG Watchdog Timer enabled (default: Watchdog Timer disabled)
PROTECT Code Protect enabled (default: Code Protect disabled)
******** Dynamic Equates (always reflect current values)
$ = Current origin
******** Register/Bit Equates
IND = $00 Indirect addressing register
RTCC = $01 RTCC register
WREG = $01 W register
PC = $02 Program counter low-byte register
STATUS = $03 Status register
C = STATUS.0 carry bit
DC = STATUS.1 Digit carry bit
Z = STATUS.2 Zero bit
PD = STATUS.3 Power-down bit
TO = STATUS.4 Time-out bit
PA0 = STATUS.5 Page preselect bit 0
PA1 = STATUS.6 Page preselect bit 1
PA2 = STATUS.7 Page preselect bit 2
FSR = $04 File select register
RA = $05 RA i/o register
RB = $06 RB i/o register
RC = $07 RC i/o register
RD = $08 RD i/o register
RE = $09 RE i/o register
RF = $0A RF i/o register
RG = $0B RG i/o register
******** Backward-Compatibility Symbols for Parallax PIC16Cxx Assembler (SPASM.EXE)
DEVICE Directive Symbols
PIC16C54 PINS18+PAGES1+BANKS1 (default: PIC16C54)
PIC16C54A PINS18+PAGES1+BANKS1
PIC16C55 PINS28+PAGES1+BANKS1
PIC16C56 PINS18+PAGES2+BANKS1
PIC16C57 PINS28+PAGES4+BANKS4
PIC16C58 PINS18+PAGES4+BANKS4
PIC16C58A PINS18+PAGES4+BANKS4
HS_OSC OSCHS (default: HS_OSC)
XT_OSC OSCXT
LP_OSC OSCLP
RC_OSC OSCRC
WDT_OFF (no equivalent) (default: WDT_OFF)
WDT_ON WATCHDOG
PROTECT_OFF (no equivalent) (default: PROTECT_OFF)
PROTECT_ON PROTECT
Register Equates
INDIRECT = $00 Indirect addressing register
INDF = $00
TMR0 = $01 RTCC register
PCL = $02 Program counter low-byte register
PORT_A = $05 RA i/o register
PORT_B = $06 RB i/o register
PORT_C = $07 RC i/o register
WKED_B (Mode=0Ah)
There are *12* undocumented instructions!
Four new push instructions that push W onto the W, FSR, STATUS, and PC shadow registers, which are actually 2-level stacks;
There appears to be a secret FIFO for saving and restoring values and a breakpoint register or two.
| file: /Techref/scenix/inst/inst.htm, 20KB, , updated: 2001/9/18 12:00, local time: 2025/10/25 02:50,
216.73.216.188,10-3-157-36:LOG IN
|
| ©2025 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://massmind.ecomorder.com/techref/scenix/inst/inst.htm"> sx Instruction set</A> |
| Did you find what you needed? |
Welcome to ecomorder.com! |
|
Ashley Roll has put together a really nice little unit here. Leave off the MAX232 and keep these handy for the few times you need true RS232! |
.