打印

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

[复制链接]
2071|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjchen|  楼主 | 2007-4-9 13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是单步执行时的结果:
ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<:987654321
这是全速执行时的结果:
ZYYXWVVUTSSRQPPONMMLKJJIHGGFEDDCBAA@?>>=<;:988765543221ZZZYXWWVUTTSRQQPONNMLKKJIHHGFEEDCBBA@??>=<<:998766543321ZZZYXWWVUTTSRQQPONNMLKKJIHHGFEEDCBBA@??>=<<:998766543321ZZZYYXWVVUTSSRQPPONMMLKJJIHGGFEDDCBAA@?>>=<;:988765543221ZZYYXWVVUTSSRQPPONMMLKJJIHGGFEDDCBAA@?
一'比较两种结果发现全速执行时结果有重复的部分,而单步执行则一一对应.为什么会出现这种情况呢?
二'我发送的是for(a=0x5A;a>0x30;a--),出来为什么是这些字符呢?
三'如果我要发送汉字应该怎么发送啊?

以下是我的程序部分:
#define _TEST_C_
#include "reg52.h"
#include "stdlib.h"
#include "absacc.h"
#include "intrins.h"
#include "test.h"
#include "math.h"
#define uchar unsigned char
#define uint unsigned int
#define COM8251 XBYTE[0x8701]
#define DAT8251 XBYTE[0x8700]
uchar data data_temp[6]={0x52,0x53,0x54,0x55,0x00,0x58};
uchar temp[6]={52,0x53,0x54,0x55,0x00,0x58};
uchar m=0,n=0,k; 
uchar data a;
void initmcu(void);
void wait(uchar p,q);

void main(void) 


EA = 0;
initmcu();
EA = 1;
//wait(11,82);//8251工作速度慢,每送一个控制字,等待一会儿延时2ms
COM8251 = 0x00;
DAT8251 = 0x00;
DAT8251 = 0x00;
COM8251 = 0x40;//以上为8251复位部分
wait(11,82);
COM8251 = 0x4e;//9600baud,1停止位,无校验,8位数据,X16
wait(11,82);
COM8251 = 0x35; 
wait(11,82); 
for(a=0x5A;a>0x30;a--)
{
do 
{
DAT8251=a;
}while((COM8251&0x01)==0);

}

void wait(uchar p,q)
{
uchar i,j; //(2*j+3)*i+4
for (i=p;i>0;i--)
for (j=q;j>0;j--);
}

相关帖子

沙发
sjnh| | 2007-4-10 08:33 | 只看该作者

...

1.单步时
do 
{
DAT8251=a;
}while((COM8251&0x01)==0);
单步慢,发送a后,((COM8251&0x01)==0);已经不成立,所以退出while循环,
全速执行时,送a后,8251速度慢,TxRDY还没有置位,while条件满足,
就会接着送一遍,也可能时钟正好,只有一遍,
DAT8251=a;不应该再while循环里。

2.0x5A到0x30的ASCII码就是ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<:987654321

3.发送汉字uchar data data_temp[6]={"汉字"},直接定义,然后发送数组内容就可以了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

粉丝