<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[单片机C51串口中断接收和发送测试例程（含通信协议的实现）]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sat, 13 Mar 2010 14:27:02 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	通信协议：第1字节，MSB为1，为第1字节标志，第2字节，MSB为0，为非第一字节标志，其余类推……，最后一个字节为前几个字节后7位的异或校验和。<br/><br/>测试方法：可以将串口调试助手的发送框写上 95 10 20 25，并选上16进制发送，接收框选上16进制显示，如果每发送一次就接收到95 10 20 25，说明测试成功。<br/><br/>//这是一个单片机C51串口接收（中断）和发送例程，可以用来测试51单片机的中断接收 <br/>//和查询发送，另外我觉得发送没有必要用中断，因为程序的开销是一样的 <br/>//程序编写： 龚建伟&nbsp;&nbsp;webmaster@gjwtech.com <br/>//技术主页：http://www.gjwtech.com <br/>//您有这方面的问题可以和我讨论 <br/><br/><br/><div class="code"><br/>#include &lt;reg51.h&gt;<br/>#include &lt;string.h&gt;<br/><br/>#define INBUF_LEN 4&nbsp;&nbsp; //数据长度<br/><br/>unsigned char inbuf1&#91;INBUF_LEN&#93;;<br/>unsigned char checksum count3;<br/>bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read_flag=0;<br/><br/>void init_serialcomm(void)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SCON&nbsp;&nbsp;= 0x50;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //SCON: serail mode 1 8 UART enable ucvr <br/>&nbsp;&nbsp;&nbsp;&nbsp;TMOD &#124;= 0x20;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //TMOD: timer 1 mode 2 8 reload <br/>&nbsp;&nbsp;&nbsp;&nbsp;PCON &#124;= 0x80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //SMOD=1; <br/>&nbsp;&nbsp;&nbsp;&nbsp;TH1&nbsp;&nbsp; = 0xF4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Baud:4800&nbsp;&nbsp;fosc=11.0592MHz <br/>&nbsp;&nbsp;&nbsp;&nbsp;IE&nbsp;&nbsp; &#124;= 0x90;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Enable Serial Interrupt <br/>&nbsp;&nbsp;&nbsp;&nbsp;TR1&nbsp;&nbsp; = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// timer 1 run <br/>&nbsp;&nbsp; // TI=1; <br/>&#125;<br/><br/>//向串口发送一个字符 <br/>void send_char_com(unsigned char ch)&nbsp;&nbsp;<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SBUF=ch;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(TI==0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;TI=0;<br/>&#125;<br/><br/>//向串口发送一个字符串，strlen为该字符串长度 <br/>void send_string_com(unsigned char *str unsigned int strlen)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int k=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;do <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_char_com(*(str + k));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; while(k &lt; strlen);<br/>&#125;<br/><br/><br/>//串口接收中断函数 <br/>void serial () interrupt 4 using 3 <br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(RI)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned char ch;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RI = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch=SBUF;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ch&gt;127)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count3=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inbuf1&#91;count3&#93;=ch;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; checksum= ch-128;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count3++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inbuf1&#91;count3&#93;=ch;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; checksum ^= ch;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( (count3==(INBUF_LEN-1)) &amp;&amp; (!checksum) )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read_flag=1;&nbsp;&nbsp;//如果串口接收的数据达到INBUF_LEN个，且校验没错， <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //就置位取数标志 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/><br/>main()<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;init_serialcomm();&nbsp;&nbsp;//初始化串口 <br/>&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(read_flag)&nbsp;&nbsp;//如果取数标志已置位，就将读到的数从串口发出 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read_flag=0; //取数标志清0 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_string_com(inbuf1 INBUF_LEN);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&#125;</div><br/><br/> 转帖：http://www.chinaeda.cn/show.aspx?id=8117&amp;cid=7
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 单片机C51串口中断接收和发送测试例程（含通信协议的实现）]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>