|
问题:中断完成特定动作,单片机发送特定数据,问题在于它一直发数据,不停,动作标志位也清0了,代码太多,部分代码如下:
//**串口中断程序**//
void UART_SER(void) interrupt 4
{
unsigned char Temp;
uchar i;
if(RI)
{
RI=0; // 标志位清零
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;//缓存数组清零[ i]
}
}
cnt=0;
}
}
// SBUF=Temp;//把接受的值再返还给电脑端
}
// if(TI) //如果是发送标志位,清零
// {
// TI=0;
// }
}
//**发送数据**//
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; //为了测试程序先定义一个sw的状态
sw1=0; //为了测试程序先定义一个sw的状态
sw2=0; //为了测试程序先定义一个sw的状态
TH0=(65536-2000)/256; //定时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语句对move_ok进行判定
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累计校验和
TX1_sendmsg(send_msg);
}
if(TX_flag==1)
{
TX_flag==0;
}
}
|
-
回家.png
(39.59 KB, 下载次数: 31)
串口通讯助手发送接收
|