📄 单片机c51串口中断接收和发送测试例程(含通信协议的实现).htm
字号:
<TR>
<TD class=p16 id=fontzoom style="LINE-HEIGHT: 1.5" vAlign=top
width="100%" height=300><BR><!--画中画广告开始-->
<TABLE cellSpacing=0 cellPadding=0 align=left border=0>
<TBODY>
<TR>
<TD><!-- 广告位 -->
<TABLE cellSpacing=0 cellPadding=0 width="99%"
align=center background="" border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle><A
href="http://www.51kaifa.com/upload/do_page/1119369847.html"
target=_blank><IMG height=50
src="单片机C51串口中断接收和发送测试例程(含通信协议的实现)_files/1119368683.gif"
width=100 border=0></A></TD></TD></TR></TBODY></TABLE><!-- $sign哪个页面$digit位置$way等h不循环TR;X循环TR;$num显示个数 --></TD></TR></TBODY></TABLE><!--画中画广告结束-->
通信协议:
第1字节,MSB为1,为第1字节标志,第2字节,MSB为0,为非第一字节标志,其余类推……,最后一个字节为前几个字节后7位的异或校验和。
<P class=style27 align=left> 测试方法:可以将串口调试助手的发送框写上 95 10 20
25,并选上16进制发送,接收框选上16进制显示,如果每发送一次就接收到95 10 20 25,说明测试成功。 </P>
<P class=style27 align=left>
<P class=style27
align=left><STRONG>//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收
</STRONG><BR><STRONG>//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的
</STRONG><BR><BR><BR><STRONG>#include </STRONG><reg51.h>
<BR><STRONG>#include </STRONG><string.h>
<BR><BR><STRONG>#define </STRONG>INBUF_LEN 4 <STRONG>//数据长度
</STRONG><BR><BR><STRONG>unsigned char
</STRONG>inbuf1[INBUF_LEN]; <BR><STRONG>unsigned char
</STRONG>checksum,count3; <BR>bit read_flag= 0 ;
<BR><BR><STRONG>void </STRONG>init_serialcomm( <STRONG>void
</STRONG>) <BR>{ <BR>SCON = 0x50 ; <STRONG>//SCON: serail mode
1, 8-bit UART, enable ucvr </STRONG><BR>TMOD |= 0x20 ;
<STRONG>//TMOD: timer 1, mode 2, 8-bit reload
</STRONG><BR>PCON |= 0x80 ; <STRONG>//SMOD=1; </STRONG><BR>TH1
= 0xF4 ; <STRONG>//Baud:4800 fosc=11.0592MHz </STRONG><BR>IE
|= 0x90 ; <STRONG>//Enable Serial Interrupt </STRONG><BR>TR1 =
1 ; <STRONG>// timer 1 run </STRONG><BR><STRONG>// TI=1;
</STRONG><BR>} <BR><BR><STRONG>//向串口发送一个字符
</STRONG><BR><STRONG>void </STRONG>send_char_com(
<STRONG>unsigned char </STRONG>ch) <BR>{ <BR>SBUF=ch;
<BR><STRONG>while </STRONG>(TI== 0 ); <BR>TI= 0 ; <BR>}
<BR><BR><STRONG>//向串口发送一个字符串,strlen为该字符串长度
</STRONG><BR><STRONG>void </STRONG>send_string_com(
<STRONG>unsigned char </STRONG>*str, <STRONG>unsigned int
</STRONG>strlen) <BR>{ <BR><STRONG>unsigned int </STRONG>k= 0
; <BR><STRONG>do </STRONG><BR>{ <BR>send_char_com(*(str + k));
<BR>k++; <BR>} <STRONG>while </STRONG>(k < strlen); <BR>}
<BR><BR><BR><STRONG>//串口接收中断函数 </STRONG><BR><STRONG>void
</STRONG>serial () interrupt 4 using 3 <BR>{ <BR><STRONG>if
</STRONG>(RI) <BR>{ <BR><STRONG>unsigned char </STRONG>ch;
<BR>RI = 0 ; <BR>ch=SBUF; <BR><STRONG>if </STRONG>(ch> 127
) <BR>{ <BR>count3= 0 ; <BR>inbuf1[count3]=ch; <BR>checksum=
ch- 128 ; <BR>} <BR><STRONG>else </STRONG><BR>{ <BR>count3++;
<BR>inbuf1[count3]=ch; <BR>checksum ^= ch; <BR><STRONG>if
</STRONG>( (count3==(INBUF_LEN- 1 )) && (!checksum) )
<BR>{ <BR>read_flag= 1 ;
<STRONG>//如果串口接收的数据达到INBUF_LEN个,且校验没错,
</STRONG><BR><STRONG>//就置位取数标志 </STRONG><BR>} <BR>} <BR>}
<BR>} <BR><BR><BR>main() <BR>{ <BR>init_serialcomm();
<STRONG>//初始化串口 </STRONG><BR><STRONG>while </STRONG>( 1 )
<BR>{ <BR><STRONG>if </STRONG>(read_flag)
<STRONG>//如果取数标志已置位,就将读到的数从串口发出 </STRONG><BR>{ <BR>read_flag=
0 ; <STRONG>//取数标志清0
</STRONG><BR>send_string_com(inbuf1,INBUF_LEN); <BR>} <BR>}
<BR><BR>} <BR><BR></P></TD></TR>
<TR>
<TD align=right width="100%" height=17><BR><A
href="http://www.51kaifa.com/zxyd/read.php?ID=166">返回</A> <A
href="http://www.51kaifa.com/zxyd/read_z.php?ID=964&BigClass=6">上一页</A>
<A
href="http://www.51kaifa.com/zxyd/read_z.php?ID=966&BigClass=6">下一页</A>
信息发布:工号01 转引自: 【<A
href="javascript:fontzoom(16)">大</A> <A
href="javascript:fontzoom(14)">中</A> <A
href="javascript:fontzoom(12)">小</A>】【<A
onclick=window.print();
href="http://www.51kaifa.com/zxyd/read_z.php?ID=965&BigClass=6#">打印</A>】【<A
href="javascript:window.close()">关闭</A>】
<BR><BR></TD></TR></TBODY></TABLE></TD>
<TD vAlign=top width=1 bgColor=#808080><IMG height=1 alt=""
src="单片机C51串口中断接收和发送测试例程(含通信协议的实现)_files/xu2.gif" width=1
border=0></TD>
<TD vAlign=top width=169 bgColor=#edf0f5 height=500><!-- 广告位 --><!-- $sign哪个页面$digit位置$way等h不循环TR;X循环TR;$num显示个数 --></TD></TR></TBODY></TABLE><!-- 尾部 -->
<SCRIPT language=JavaScript>document.write("<img src='http://www.51kaifa.com/HostAdmin/count/Count.php?Referer=http://www.51kaifa.com/zxyd/read_z.php&Ip=127.0.0.1&Width="+escape(screen.width)+"&Height="+escape(screen.height)+"' border=0 width=0 height=0>");</SCRIPT>
<TABLE cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="100%"
background=单片机C51串口中断接收和发送测试例程(含通信协议的实现)_files/sy_top1.gif><IMG
height=16
src="单片机C51串口中断接收和发送测试例程(含通信协议的实现)_files/sy_top1.gif"
width=4></TD></TR>
<TR>
<TD align=middle><A
href="http://www.51kaifa.com/gywm.php?action=guanyu">关于我们</A> ┋ <A
href="http://www.51kaifa.com/FriendSiteReg/F_read.php"
target=_blank>友情链接</A> </TD></TR></TBODY></TABLE>
<TABLE height=1 cellSpacing=0 cellPadding=0 width="100%"
background=单片机C51串口中断接收和发送测试例程(含通信协议的实现)_files/xu2.gif border=0>
<TBODY>
<TR>
<TD width="100%"></TD></TR></TBODY></TABLE>
<TABLE height=60 cellSpacing=0 cellPadding=0 width="100%"
border=0><TBODY>
<TR>
<TD width="100%">
<P align=center><A
href="mailto:E-mail:webmaster@51kaifa.com"><BR>E-mail:webmaster@51kaifa.com</A>
<BR>Copyright©2005 无忧电子开发网版权所有 <BR><!-- <a href="mailto:E-mail:nan-ji-hu@sohu.com">南极狐工作室制作与维护</a> QQ:348322455 <br> -->
<CENTER><A href="http://www.miibeian.gov.cn/"
target=_blank>粤ICP备05064233号</A></CENTER><BR>
<CENTER>
<SCRIPT
src="单片机C51串口中断接收和发送测试例程(含通信协议的实现)_files/count.htm"></SCRIPT>
<SCRIPT language=JavaScript
src="单片机C51串口中断接收和发送测试例程(含通信协议的实现)_files/click.htm"
type=text/javascript></SCRIPT>
</CENTER><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -