|
请帮帮小弟。
程序目的为单片机循环发送读取指令给传感器,然后接收传感器的应答数据中的第四位。遇到的问题是,本来在持续发送的读取指令在接收过一次应答数据后就不再发送。程序如下。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar table[]={0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A};
uchar rec[7];
uchar date; //定义数据
uchar rec_flag; //接收数据标识,0 未接收数据 1 接收数据
uint num=0,acount=0,i;
void delay(uint);
void init_uart(void)
{
TMOD = 0x20; //定时器T1使用工作方式2
TH1 = 0xFD; //设置初值
TL1 = 0xFD;
TR1 = 1; //开始计时
PCON = 0x00; //SMOD=0;PCON第7位
SCON = 0x50; //工作方式1,波特率9600bit/s,允许接收
ES=1;
EA = 1; //开启总中断
}
void send(void)
{
for(num=0;num<=7;num++)
{
SBUF = table[num]; //发送数据
while(!TI); //等待发送完成
//delay(20);
TI = 0;
}
}
void receive(void)
{
if(RI==1) //检测是否有数据接收
{
rec[acount] = SBUF; //接收数据
acount++;
RI = 0; //清除标志位
if(num==7) num=0;
}
}
void delay (uint i)
{
while(i--);
}
void main(void)
{
init_uart(); //初始化串行口
do
{
send();
delay(20000);
}
while(1);
}
void jieshou(void) interrupt 4
{
receive();
P1=rec[4];
RI=0;
}
|
|