8251单步时发送正确,但是全速运行时却会出错?为什么?

[复制链接]
2663|1
 楼主| ccjchen 发表于 2007-4-9 13:19 | 显示全部楼层 |阅读模式
这是单步执行时的结果:<br />ZYXWVUTSRQPONMLKJIHGFEDCBA@?&gt=&lt;:987654321<br />这是全速执行时的结果:<br />ZYYXWVVUTSSRQPPONMMLKJJIHGGFEDDCBAA@?&gt&gt=&lt;;:988765543221ZZZYXWWVUTTSRQQPONNMLKKJIHHGFEEDCBBA@??&gt=&lt&lt;:998766543321ZZZYXWWVUTTSRQQPONNMLKKJIHHGFEEDCBBA@??&gt=&lt&lt;:998766543321ZZZYYXWVVUTSSRQPPONMMLKJJIHGGFEDDCBAA@?&gt&gt=&lt;;:988765543221ZZYYXWVVUTSSRQPPONMMLKJJIHGGFEDDCBAA@?<br />一'比较两种结果发现全速执行时结果有重复的部分,而单步执行则一一对应.为什么会出现这种情况呢?<br />二'我发送的是for(a=0x5A;a&gt0x30;a--),出来为什么是这些字符呢?<br />三'如果我要发送汉字应该怎么发送啊?<br /><br />以下是我的程序部分:<br />#define&nbsp;_TEST_C_<br />#include&nbsp;&quot;reg52.h&quot;<br />#include&nbsp;&quot;stdlib.h&quot;<br />#include&nbsp;&quot;absacc.h&quot;<br />#include&nbsp;&quot;intrins.h&quot;<br />#include&nbsp;&quot;test.h&quot;<br />#include&nbsp;&quot;math.h&quot;<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />#define&nbsp;uint&nbsp;unsigned&nbsp;int<br />#define&nbsp;COM8251&nbsp;XBYTE[0x8701]<br />#define&nbsp;DAT8251&nbsp;XBYTE[0x8700]<br />uchar&nbsp;data&nbsp;data_temp[6]={0x52,0x53,0x54,0x55,0x00,0x58};<br />uchar&nbsp;temp[6]={52,0x53,0x54,0x55,0x00,0x58};<br />uchar&nbsp;m=0,n=0,k;&nbsp;<br />uchar&nbsp;data&nbsp;a;<br />void&nbsp;initmcu(void);<br />void&nbsp;wait(uchar&nbsp;p,q);<br /><br />void&nbsp;main(void)&nbsp;<br />{&nbsp;<br /><br />EA&nbsp;=&nbsp;0;<br />initmcu();<br />EA&nbsp;=&nbsp;1;<br />//wait(11,82);//8251工作速度慢,每送一个控制字,等待一会儿延时2ms<br />COM8251&nbsp;=&nbsp;0x00;<br />DAT8251&nbsp;=&nbsp;0x00;<br />DAT8251&nbsp;=&nbsp;0x00;<br />COM8251&nbsp;=&nbsp;0x40;//以上为8251复位部分<br />wait(11,82);<br />COM8251&nbsp;=&nbsp;0x4e;//9600baud,1停止位,无校验,8位数据,X16<br />wait(11,82);<br />COM8251&nbsp;=&nbsp;0x35;&nbsp;<br />wait(11,82);&nbsp;<br />for(a=0x5A;a&gt0x30;a--)<br />{<br />do&nbsp;<br />{<br />DAT8251=a;<br />}while((COM8251&0x01)==0);<br />}&nbsp;<br />}<br /><br />void&nbsp;wait(uchar&nbsp;p,q)<br />{<br />uchar&nbsp;i,j;&nbsp;//(2*j+3)*i+4<br />for&nbsp;(i=p;i&gt0;i--)<br />for&nbsp;(j=q;j&gt0;j--);<br />}<br />
sjnh 发表于 2007-4-10 08:33 | 显示全部楼层

...

1.单步时<br />do&nbsp;<br />{<br />DAT8251=a;<br />}while((COM8251&0x01)==0);<br />单步慢,发送a后,((COM8251&0x01)==0);已经不成立,所以退出while循环,<br />全速执行时,送a后,8251速度慢,TxRDY还没有置位,while条件满足,<br />就会接着送一遍,也可能时钟正好,只有一遍,<br />DAT8251=a;不应该再while循环里。<br /><br />2.0x5A到0x30的ASCII码就是ZYXWVUTSRQPONMLKJIHGFEDCBA@?&gt=&lt;:987654321<br /><br />3.发送汉字uchar&nbsp;data&nbsp;data_temp[6]={&quot;汉字&quot;},直接定义,然后发送数组内容就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部