SHIFTIN - SHIFTOUT

Top  Previous  Next

Action

Shifts a bit stream in or out a variable.

 

 

Syntax

SHIFTIN pin , pclock , var , option  [PRE]

SHIFTOUT pin , pclock , var , option

 

 

Remarks

pin

The portpin which serves as as input/output.

pclock

The portpin which generates the clock.

var

The variable that is assigned.

option

Option can be :

0 - MSB shifted in/out first when clock goes low

1 - MSB shifted in/out first when clock goes high

2 - LSB shifted in/out first when clock goes low

3 - LSB shifted in/out first when clock goes high

For the SHIFTIN statement you can add 4 to the parameter to use the external clock signal for shifting.

PRE

Add this additional parameter (no comma) to sample the input pin before the clock signal is generated.

 

It depends on the type of the variable, how many shifts will occur.

When you use a byte, 8 shifts will occur and for an integer, 16 shifts will occur.

 

See also

NONE

 

 

Example

Dim a as byte

SHIFTIN P1.0 , P1.1 , a , 0

SHIFTOUT P1.2 , P1.1 , a , 0

 

For the SHIFTIN example the following code is generated:

Setb P1.1

Mov R0,#h'21

Mov r2,#h'01

__UNQLBL1:

Mov r3,#8

__UNQLBL2:

Clr P1.1

Nop

Nop

Mov c,P1.0

Rlc a

Setb P1.1

Nop

Nop

Djnz r3,__UNQLBL2

Mov @r0,a

Dec r0

Djnz r2,__UNQLBL1

 

Of course, it depends on the parameter, which code will be generated.

To shift with an external clock signal:

SHIFTIN P1.0, P1.1 , a , 4  'add 4 for external clock

 

Generated code:

 

Mov R0,#h'21

Mov r2,#h'01

__UNQLBL1:

Mov r3,#8

__UNQLBL2:

Jnb P1.1,*+0

Mov c,P1.0

Rlc a

Jb P1.1,*+0

Djnz r3,__UNQLBL2

Mov @r0,a

Dec r0

Djnz r2,__UNQLBL1