📄 4.htm
字号:
0xFF;<BR>CNToOut();<BR>break;<BR>case 5:
//根据CN[2]返回所要读取的端口值<BR>switch(CN[2])<BR>{<BR>case
0:<BR>ComOutChar(CN[0]);<BR>ComOutChar(CN[1]);<BR>ComOutChar(P0);<BR>ComOutChar(CN[3]);<BR>break;<BR>case
1:<BR>ComOutChar(CN[0]);<BR>ComOutChar(CN[1]);<BR>ComOutChar(P1);<BR>ComOutChar(CN[3]);<BR>break;<BR>case
2:<BR>ComOutChar(CN[0]);<BR>ComOutChar(CN[1]);<BR>ComOutChar(P2);<BR>ComOutChar(CN[3]);<BR>break;<BR>case
3:<BR>ComOutChar(CN[0]);<BR>ComOutChar(CN[1]);<BR>ComOutChar(P3);<BR>ComOutChar(CN[3]);<BR>break;<BR>}<BR>break;<BR>}<BR>}</P>
<P>void
CNToOut(void)<BR>{<BR>ComOutChar(CN[0]);<BR>ComOutChar(CN[1]);<BR>ComOutChar(CN[2]);<BR>ComOutChar(CN[3]);
<BR>}<BR><BR>
代码中有多处使用开关语句的,使用它对不同的条件做不同的处理,如在CSToOut函数中根据CN[1]来选择输出到那个IO口,如CN[1]=0则把CN[2]的值送到P0,CN[1]=1则送到P1,这样的写法比起用if
(CN[1]==0)这样的判断语句来的清晰明了。当然它们的效果没有太大的差别(在不考虑编译后的代码执行效率的情况下)。<BR>在这段代码其主要的作用就是通过串口和上位机软件进行通讯,跟据上位机的命令字串,对指定的IO端口进行读写。InitCom函数,原型为void
InitCom(unsigned char
BaudRate),其作用为初始化串口。它的输入参数为一个字节,程序就是用这个参数做为开关语句的选择参数。如调用InitCom(6),函数就会把波特率设置为9600。当然这段代码只使用了一种波特率,可以用更高效率的语句去编写,这里就不多讨论了。<BR>
看到这里,你也许会问函数中的SCON,TCON,TMOD,SCOM等是代表什么?它们是特殊功能寄存器,在以前也略提到过,51芯片的特殊功能寄存器说明可以参看附录二的'AT89C51特殊功能寄存器列表',在这里简单的说说串口相关的硬件设置。<BR></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><B
style="mso-bidi-font-weight: normal">SBUF 数据缓冲寄存器</B> 这是一个可以直接寻址的串行口专用寄存器。有朋友这样问起过“为何在串行口收发中,都只是使用到同一个寄存器SBUF?而不是收发各用一个寄存器。”实际上SBUF包含了两个独立的寄存器,一个是发送寄存,另一个是接收寄存器,但它们都共同使用同一个寻址地址-99H。CPU在读SBUF时会指到接收寄存器,在写时会指到发送寄存器,而且接收寄存器是双缓冲寄存器,这样可以避免接收中断没有及时的被响应,数据没有被取走,下一帧数据已到来,而造成的数据重叠问题。发送器则不需要用到双缓冲,一般情况下我们在写发送程序时也不必用到发送中断去外理发送数据。操作SBUF寄存器的方法则很简单,只要把这个99H地址用关键字sfr定义为一个变量就可以对其进行读写操作了,</SPAN><SPAN
style="FONT-FAMILY: 宋体">如<SPAN lang=EN-US>sfr SBUF =
0x99;当然你也可以用其它的名称。通常在标准的reg51.h或at89x51.h等头文件中已对其做了定义,只要用#include引用就可以了。<O:P></O:P></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN
style="mso-tab-count: 1"> </SPAN><B
style="mso-bidi-font-weight: normal">SCON 串行口控制寄存器 </B>通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器。SCON就是51芯片的串行口控制寄存器。它的寻址地址是98H,是一个可以位寻址的寄存器,作用就是监视和控制51芯片串行口的工作状态。51芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。它的各个位的具体定义如下:<O:P></O:P></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: 宋体"><O:P></O:P></SPAN></P>
<TABLE class=MsoNormalTable
style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 41.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext"
cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">(<SPAN
lang=EN-US>MSB)<O:P></O:P></SPAN></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">(<SPAN
lang=EN-US>LSB)<O:P></O:P></SPAN></SPAN></P></TD></TR>
<TR style="mso-yfti-lastrow: yes">
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">SM0<O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">SM1<O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">SM2<O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">REN<O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">TB8<O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">RB8<O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">TI<O:P></O:P></SPAN></P></TD>
<TD
style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-bottom-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt"
vAlign=top width=60>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">RI<O:P></O:P></SPAN></P></TD></TR></TBODY></TABLE>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">表<SPAN
lang=EN-US>8-1 串行口控制寄存器SCON<O:P></O:P></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><O:P></O:P></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN
style="mso-tab-count: 1">
</SPAN>SM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。看表8-2串行口工作模式设置。<O:P></O:P></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><O:P></O:P></SPAN></P>
<TABLE class=MsoNormalTable
style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 41.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext"
cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD
style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 36pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"
vAlign=top width=48>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -