我做一个液晶温度显示的系统,其中传感器用的是232通信,只要发送个固定命令,就返回温度值.我的思路是把接收到的10个固定数存入数组,然后直接对数组的数操作。问题是我用串口助手调试成功了,全部接收了,可是放到大程序里读出的数组第一个数总是应该接收的最后一个数!前面的数去哪里了呢?调试程序如下:用得串口2,STC12C5A60S2单片机。 急
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay(unsigned int i);
unsigned char code datr[]="in pv 01\r\n";
unsigned char data table[10];
uint i;
#define S2RI 0X01
#define S2TI 0X02
// bit sendflag;
sfr AUXR =0X8E;
sfr S2CON=0X9A;
sfr S2BUF=0X9B;
sfr BRT =0X9C;
sfr IE2 =0XAF;
sbit key=P0^0;
bit flag;
uint redata,sendata;
uchar L,f;
/****************
延时程序
***************/
void delay(unsigned int k)
{
unsigned char j;
for(k; k > 0; k--)
for(j = 200; j > 0; j--) ;
}
/*************
串口2初始化
************/
void chuankou2chushihua()
{
AUXR &=0XF7;
S2CON =0X50; //11.0592M,2400,1T模式
BRT =0X70;
AUXR |= 0x04;
AUXR |= 0x10;
IE2= 0X01;
EA = 1;
}
/***************
发送程序
************/
void uart_send(uchar dat)
{
IE2=0;
S2BUF=dat;
while(!(S2CON &S2TI));
S2CON &=~S2TI;
IE2=0x01;
}
void chuankou1chushihua()
{
SCON = 0x50;
TMOD|= 0x20;
PCON|= 0x80;
TH1 = 0xFD; //19200波特率 11.0592,波特率加倍
TL1 = 0xFD;
TR1 = 1;
// ES = 1;
EA = 1;
} /*******
主程序
*****/
void main()
{ uchar a;
uchar i=0;
chuankou1chushihua();
chuankou2chushihua();
while(1)
{ delay(1000);
for(a=0;a<10;a++)
uart_send(datr[a]);
while(i<10)
{ if(flag)
{ IE2=0;
table[i]=sendata;
i++;
IE2=1;
flag=0 ;
}
}
SBUF=table[0];
while(!TI);
TI=0;
}
}
/********
串口2中断
********/
void timer(void) interrupt 8
{
while(S2CON &S2RI)
{
redata=S2BUF;
sendata=redata;
S2CON &=~S2RI;
flag=1;
}
} |