ASM Instruction(s) ... ENDASM
Function
ASM allows the insertion a block of assembly language statements into the SX/B program.
The assembly language block is terminated with ENDASM. Code in the ASM..ENDASM
block is inserted into the program verbatim.
Explanation
Certain time-critical routines are best coded in straight assembly language, and while the
\ symbol allows the programmer to insert a single line of assembly code, it is not
convenient for large blocks.
' Use: inByte = SHIFTIO outByte
' -- sends (via ShOut) and receives (via ShIn) bytes LSBFIRST
SHIFTIO:
\ CLR tmpB1 ' clear input byte
\ MOV idx, #8 ' do 8 bits
ShIO_Loop:
ASM
MOVB ShOut, __PARAM1.0 ' move LSB out to pin
MOV __PARAM3, #50 ' 50 us pause @ 4 MHz
DJNZ __PARAM3, $
XOR RA, #%00000001 ' toggle clock
MOV __PARAM3, #50
DJNZ __PARAM3, $
CLC
RR tmpB1 ' prep for input bit
MOVB tmpB1.7, ShIn ' capture input bit (LSB)
XOR RA, #%00000001 ' toggle clock
CLC
RR __PARAM1 ' prep for next output bit
DJNZ idx, ShIO_Loop ' repeat for 8 bits
ENDASM
RETURN tmpB1
Related example: INTERRUPT Examples