0809调试

0809 调试记录

现在返回的32个字节是乱码的,可能是因为没有标定。现在需要看一下标定是怎么操作的。

分析Rece_Buf0[1] == 0x00 - 0xFF 分别执行什么操作

当 Rece_Buf0[1] == 0x00 执行下列语句, Read_All(); Set_All();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
case 0:         //召唤采集多通道数据,下位机回答        
Read_All();
Set_All();
for(i=2; i<30; i++)
{
Send_Buf0[i]=0;
}
break;
//-------------从MCU中读取出标定的k、b值------------------------
void Read_All(void)
{
uint8 i,j; //value:0-255
uint8 code *FLASH_READ; //code定义的数据在flash中
FLASH_READ=0x0000;
for(i=0;i<112;i++) // Para[112]
{
PSCTL=0x04; //选择数据FLASH扇区 禁止FLASH 写/擦除
j=FLASH_READ[i]; //读取数据flash 0x0000区
PSCTL=0x00; //选择程序Flash 禁止写/擦除
Para[i]=j; //读程序flash
}
}

//-----------------------------------
void Set_All(void)
{
uint8 i;
for(i=0;i<14;i++)
{
cons.data_B.byte1=Para[i*8];
cons.data_B.byte2=Para[i*8+1];
cons.data_B.byte3=Para[i*8+2];
cons.data_B.byte4=Para[i*8+3];
kk[i]=cons.data_F;
cons.data_B.byte1=Para[i*8+4];
cons.data_B.byte2=Para[i*8+5];
cons.data_B.byte3=Para[i*8+6];
cons.data_B.byte4=Para[i*8+7];
bb[i]=cons.data_F;
}
}
当 Rece_Buf0[1] == 0x01 执行下列语句, 在命令表 里面的意思是 标定电位第1点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
unsigned char bdata CHSWITCH=0x00;
sbit CHA=CHSWITCH^5;
sbit CHB=CHSWITCH^4;
sbit CHC=CHSWITCH^3;
sbit CHD=CHSWITCH^2;
sbit CHX=CHSWITCH^1;
sbit CHZ=CHSWITCH^0;

float xdata para_temp[16]; //临时参数
uint16 xdata ad_buf[16];



case 1://标定第一点
CHSWITCH =CHSWITCH&0xc3;
channel = Rece_Buf0[5]; //Rece_Buf[5] 电位通道选择0~7
ad_val(channel); //返回i一个值 result_temp 取16次数据,排序之后去掉最大的6个数据和最小的6个数据取中间4个数据然后取平均,获得一个无符号整形数据
para_temp[0]=Rece_Buf0[3];
para_temp[0]*=256;
para_temp[0]+=Rece_Buf0[4];
para_temp[0]/=10;
if(Rece_Buf0[2]==1)
{
para_temp[0]*=-1;
}
ad_buf[0]=result_temp;
break;

case语句 判断的就是Rece_Buf0[1]的值,就是命令表里的操作。
执行完对应的case语句,会给para_temp列表赋值
uint16 xdata ad_buf[16];
每次执行完case语句,会往 ad_buf[16]添加一个数,和往para_temp[16]添加的操作是一样的。