This repository has been archived on 2024-09-22. You can view files and clone it, but cannot push or open issues or pull requests.
pbi-ide/help/BasicStampHelp/Content/LanguageTopics/Commands/SHIFTOUT.htm

187 lines
12 KiB
HTML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" MadCap:lastBlockDepth="6" MadCap:lastHeight="94" MadCap:lastWidth="853" MadCap:disableMasterStylesheet="true" MadCap:tocPath="" MadCap:InPreviewMode="false" MadCap:PreloadImages="false" MadCap:RuntimeFileType="Topic" MadCap:TargetType="WebHelp" lang="en-us" xml:lang="en-us" MadCap:PathToHelpSystem="../../../" MadCap:HelpSystemFileName="Default.xml" MadCap:SearchType="Stem">
<head><title>SHIFTOUT</title>
<link href="../../SkinSupport/MadCap.css" rel="stylesheet" />
<link href="../../Resources/Stylesheets/BSE_Help.css" rel="stylesheet" />
<script src="../../SkinSupport/MadCapAll.js" type="text/javascript">
</script>
</head>
<body>
<h1 class="code">SHIFTOUT</h1>
<div class="ImagePlusCaption">
<div class="Col2">
<p>
<img src="../../graphics/pgm_icon2.gif" border="0" alt="BS2 icon" title="BS2 icon" />
<img src="../../graphics/pgm_icon2e.gif" border="0" alt="BS2e icon" title="BS2e icon" />
<img src="../../graphics/pgm_icon2sx.gif" border="0" alt="BS2sx icon" title="BS2sx icon" />
<img src="../../graphics/pgm_icon2p.gif" border="0" alt="BS2p icon" title="BS2p icon" />
<img src="../../graphics/pgm_icon2pe.gif" border="0" alt="BS2pe icon" title="BS2pe icon" />
<img src="../../graphics/pgm_icon2px.gif" border="0" alt="BS2px icon" title="BS2px icon" />
</p>
</div>
<p style="text-align: right;"><a href="../ExampleTopics/ShiftoutEx.htm" target="" title="" alt="" class="MCXref_0" xrefformat="{paratext}">SHIFTOUT Example</a>
</p>
<p>&#160;</p>
</div>
<p class="clear">&#160;</p>
<p>&#160;</p>
<p class="PlainText">Syntax: <span class="keyword_in_text">SHIFTOUT</span> <![CDATA[ ]]><i>Dpin</i>,<i> Cpin</i>,<i> Mode, </i>[<i>OutputData </i>{\<i>Bits</i>} {,<i>OutputData </i>{\<i>Bits</i>}...}]</p>
<h2>Function</h2>
<p class="PlainText">Shift data out to a synchronous serial device.
</p>
<ul>
<li value="1"><b><i>Dpin</i></b> is a variable/constant/expression (0 - 15) that specifies
the I/O pin that will be connected to the synchronous serial device's data
input. This pin will be set to output mode.</li>
<li value="2"><b><i>Cpin</i></b> is a variable/constant/expression (0 - 15) that specifies
the I/O pin that will be connected to the synchronous serial device's clock
input. This pin will be set to output mode.</li>
<li value="3"><b><i>Mode</i></b> is a variable/constant/expression (0 - 1), or one of two
predefined symbols, that tells <span class="keyword_in_text">SHIFTOUT</span> the order in which data bits
are to be arranged. See the table below for value and symbol definitions.</li>
<li value="4"><b><i>OutputData</i></b> is a variable/constant/expression containing the
data to be sent. </li>
<li value="5"><b><i>Bits</i></b> is an optional variable/constant/expression (1 - 16)
specifying how many bits are to be output by <span class="keyword_in_text">SHIFTOUT</span>. If no <i>Bits</i>entry is given <span class="keyword_in_text">SHIFTOUT</span> defaults to 8 bits. When the <i>Bits</i> entry
is given, the BASIC Stamp transmits the rightmost number of bits specified,
regardless of the <i>Mode</i>.</li>
</ul>
<h2>Quick Facts</h2>
<table width="100%" cellpadding="4" cellspacing="0" border="1">
<tr bgcolor="#CFCFCF">
<td width="250" align="center">&#160;</td>
<td width="25%" align="center">BS2, BS2e, and BS2pe</td>
<td width="25%" align="center">BS2sx and BS2p</td>
<td width="25%" align="center">BS2px</td>
</tr>
<tr>
<td align="center" bgcolor="#CFCFCF">Timing of T<sub>h</sub>, T<sub>l</sub>,
T<sub>a</sub> and T<sub>b</sub></td>
<td align="center">14 µs / 46 µs / 15 µs / 30 µs</td>
<td align="center">5.6 µs / 18 µs / 6.3 µs / 12.5 µs</td>
<td align="center">3.6 µs / 11.8 µs / 4.0 µs / 7.8 µs</td>
</tr>
<tr>
<td align="center" bgcolor="#CFCFCF">Transmission Rate</td>
<td align="center">~ 16 kBits/Sec</td>
<td align="center">~ 42 kBits/Sec</td>
<td align="center">~ 65 kBits/Sec</td>
</tr>
<tr>
<td align="center" bgcolor="#CFCFCF">Related Commands</td>
<td align="center" colspan="2">
<p colspan="2" align="center"><a href="SHIFTIN.htm" target="" title="" alt="" class="MCXref_0" xrefformat="{paratext}">SHIFTIN</a>
</p>
</td>
</tr>
</table>
<h2>Explanation</h2>
<p class="PlainText"><span class="keyword_in_text">SHIFTIN</span> and <span class="keyword_in_text">SHIFTOUT</span> provide an easy method of acquiring data from
synchronous serial devices. Synchronous serial differs from asynchronous serial
(like <span class="keyword_in_text">SERIN</span> and <span class="keyword_in_text">SEROUT</span>) in that the timing of data bits (on a data
line) is specified in relationship to clock pulses (on a clock line). Data bits
may be valid after the rising or falling edge of the clock line. This kind of
serial protocol is commonly used by controller peripherals like ADCs, DACs, clocks,
memory devices, etc. </p>
<p class="PlainText">At their heart, synchronous-serial devices are essentially shift-registers;
trains of flip-flops that pass data bits along in a bucket brigade fashion to a
single data output pin. Another bit is output each time the appropriate edge
(rising or falling, depending on the device) appears on the clock line. </p>
<p class="PlainText">The <span class="keyword_in_text">SHIFTOUT</span> instruction first causes the clock pin to output low and
the data pin to switch to output mode. Then, <span class="keyword_in_text">SHIFTOUT</span> sets the data pin
to the next bit state to be output and generates a clock pulse. <span class="keyword_in_text">SHIFTOUT</span>continues to generate clock pulses and places the next data bit on the data pin
for as many data bits as are required for transmission.</p>
<p class="PlainText">Making <span class="keyword_in_text">SHIFTOUT</span> work with a particular device is a matter of matching
the mode and number of bits to that device's protocol. Most manufacturers use a
timing diagram to illustrate the relationship of clock and data. One of the most
important items to look for is which bit of the data should be transmitted first;
most significant bit (MSB) or least significant bit (LSB). The table below shows
the values and symbols available for the <i>Mode</i> argument</p>
<table width="100%" cellpadding="4" cellspacing="0" border="1">
<tr bgcolor="#CFCFCF">
<td width="75" align="center">Symbol</td>
<td width="65" align="center">Value</td>
<td width="80%" align="center">Meaning</td>
</tr>
<tr>
<td align="center">LSBFIRST</td>
<td align="center">0</td>
<td align="left">Data is shifted out LSB-first</td>
</tr>
<tr>
<td align="center">MSBFIRST</td>
<td align="center">1</td>
<td align="left">Data is shifted out MSB-first</td>
</tr>
</table>
<p>&#160;</p>
<p class="PlainText">(MSB is most-significant bit; the highest or left-most bit of a Nibble, Byte,
or Word. LSB is the least-significant bit; the lowest or right-most bit of a
Nibble, Byte, or Word.)</p>
<h3>SHIFTOUT Timing</h3>
<center>
<img src="../../graphics/shiftout_timing.gif" border="0">
</img>
</center>
<p class="PlainText">Here is a simple example:</p><pre class="BScode" xml:space="preserve">
SHIFTOUT 0, 1, MSBFIRST, [250]
</pre>
<p class="PlainText">Here, the <span class="keyword_in_text">SHIFTOUT</span> command will write to I/O pin 0 (the Dpin) and will
generate a clock signal on I/O 1 (the <i>Cpin</i>). The <span class="keyword_in_text">SHIFTOUT</span> command
will generate eight clock pulses while writing each bit (of the 8-bit value 250)
onto the data pin (<i>Dpin</i>). In this case, it will start with the most
significant bit first as indicated by the <i>Mode</i> value of MSBFIRST.</p>
<p class="PlainText">By default, <span class="keyword_in_text">SHIFTOUT</span> transmits eight bits, but you can set it to shift
any number of bits from 1 to 16 with the <i>Bits</i> argument. For example:</p><pre class="BScode" xml:space="preserve">
SHIFTOUT 0, 1, MSBFIRST, [250\4]
</pre>
<p class="PlainText">Will output only the lowest (rightmost) four bits (%1010 in this case). But
what if you want to output the leftmost bits of a given value? By adding the
right-shift operator (&gt;&gt;) to the code you can adjust the output as required:</p><pre class="BScode" xml:space="preserve">
SHIFTOUT 0, 1, MSBFIRST, [(250 &gt;&gt; 2)\6]
</pre>
<p class="PlainText">...will output the upper six bits (%111110 in this case).</p>
<p class="PlainText">Some devices require more than 16 bits. To solve this, you can use a single
<span class="keyword_in_text">SHIFTOUT</span> command with multiple values. Each value can be assigned a
particular number of bits with the <i>Bits</i> argument. As in: </p><pre class="BScode" xml:space="preserve">
SHIFTOUT 0, 1, MSBFIRST, [250\4, 1045\16]
</pre>
<p class="PlainText">The preceding example will first shift out four bits of the number 250 (%1010)
and then 16 bits of the number 1045 (%0000010000010101). The two values together
make up a 20 bit value.</p>
<p class="PlainText">In the examples above, specific numbers were entered as the data to transmit,
but, of course, the <span class="keyword_in_text">SHIFTOUT</span> command will accept variables and expressions
for the <i>OutputData</i> and even for the <i>Bits</i> argument.</p>
<div class="Col2">
<div class="MasterFoot">
<p MadCap:conditions="BSEconditions.BSEWebHelp (Primary)-INCLUDE"><a href="../../HomeTopics/HomePage.htm">Go to Welcome page</a>
</p>
</div>
</div>
<div class="Col2">
<div class="MasterFoot">
<p style="text-align: right;"><span class="ContactInfoProjectName">BASIC Stamp Help</span> <![CDATA[ ]]><span class="ContactInfoVersion#">Version 2.5.4</span> <![CDATA[ ]]></p>
<p style="text-align: right;">Copyright ©&#160;<span class="ContactInfoCompanyName">Parallax Inc.</span></p>
<p style="text-align: right;"><span class="SystemShortDate">8/8/2012</span>
</p>
</div>
</div>
<script type="text/javascript">/* <![CDATA[ */
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-285614-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
/* ]]> */</script>
<script type="text/javascript" src="../../SkinSupport/MadCapBodyEnd.js">
</script>
</body>
</html>