|
請幫幫小弟。
程序目的為單片機循環發送讀取指令給傳感器,然后接收傳感器的應答數據中的第四位。遇到的問題是,本來在持續發送的讀取指令在接收過一次應答數據后就不再發送。程序如下。
#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;
}
|
|