这是单步执行时的结果: 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--); }
|