|
問(wèn)題:中斷完成特定動(dòng)作,單片機(jī)發(fā)送特定數(shù)據(jù),問(wèn)題在于它一直發(fā)數(shù)據(jù),不停,動(dòng)作標(biāo)志位也清0了,代碼太多,部分代碼如下:
//**串口中斷程序**//
void UART_SER(void) interrupt 4
{
unsigned char Temp;
uchar i;
if(RI)
{
RI=0; // 標(biāo)志位清零
Temp=SBUF;
judge[cnt]=Temp;
if(judge[0]==0x2A)
{
cnt++;
if(cnt>=8)
{
check();
if(judge[7]==sum)
{
re_flag=1;
}
else
{
for(i=0;i<8;i++)
{
judge[ i]=0x00;//緩存數(shù)組清零[ i]
}
}
cnt=0;
}
}
// SBUF=Temp;//把接受的值再返還給電腦端
}
// if(TI) //如果是發(fā)送標(biāo)志位,清零
// {
// TI=0;
// }
}
//**發(fā)送數(shù)據(jù)**//
void TX1_sendmsg(uchar *pdat)
{
uchar i;
ES=0;
for(i=0;i<8;i++)
{
SBUF=*pdat;
pdat++;
while(!TI);
TI=0;
}
TX_flag=1;
ES=1;
}
中斷部分:
void Timer0_(void) interrupt 1
{
sw=0; //為了測(cè)試程序先定義一個(gè)sw的狀態(tài)
sw1=0; //為了測(cè)試程序先定義一個(gè)sw的狀態(tài)
sw2=0; //為了測(cè)試程序先定義一個(gè)sw的狀態(tài)
TH0=(65536-2000)/256; //定時(shí)2ms
TL0=(65536-2000)%256;
if(pulse==0)
{
Mot_Dir=1;
Mot_En=1;
Mot_Pulse=0;
}
else
{
Mot_Dir=1;
Mot_Pulse=~Mot_Pulse;
Mot_En=1;
pulse--;
}
if(pulse==0)
{
Mot_Dir=1;
Mot_Pulse=0;
Mot_En=1;
move_ok=1;
}
break;
default:
Mot_Dir=1;
Mot_Pulse=0;
Mot_En=1;
break;
}
在while語(yǔ)句對(duì)move_ok進(jìn)行判定
void main ()
.......
while(1)
{
.......
if(move_ok==1)
{
move_ok=0;
send_msg[0] = 0x2A;
send_msg[1] = 0x2A;
send_msg[2] = judge[2];
send_msg[3] = 0x00;
send_msg[4] = 0x00;
send_msg[5] = 0x4f;
send_msg[6] = 0x4b;
send_msg[7] = 0x88; //check_number累計(jì)校驗(yàn)和
TX1_sendmsg(send_msg);
}
if(TX_flag==1)
{
TX_flag==0;
}
}
|
-
回家.png
(39.59 KB, 下載次數(shù): 32)
下載附件
2018-12-26 12:34 上傳
串口通訊助手發(fā)送接收
|