標題: 51單片機串口通訊,中斷完成特定動作,單片機發(fā)送特定數(shù)據(jù) [打印本頁]

作者: 愛學習愛交流    時間: 2018-12-26 11:40
標題: 51單片機串口通訊,中斷完成特定動作,單片機發(fā)送特定數(shù)據(jù)
問題:中斷完成特定動作,單片機發(fā)送特定數(shù)據(jù),問題在于它一直發(fā)數(shù)據(jù),不停,動作標志位也清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;//緩存數(shù)組清零[ i]
                           }
                        }
                   cnt=0;
                }
         }
         
//    SBUF=Temp;//把接受的值再返還給電腦端         
  }
//  if(TI)  //如果是發(fā)送標志位,清零
//  {
//    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;         //為了測試程序先定義一個sw的狀態(tài)
  sw1=0; //為了測試程序先定義一個sw的狀態(tài)
  sw2=0; //為了測試程序先定義一個sw的狀態(tài)
  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, 下載次數(shù): 32)

串口通訊助手發(fā)送接收

串口通訊助手發(fā)送接收

作者: zhan8665    時間: 2018-12-26 12:28
你這中斷只響應了一次
作者: 愛學習愛交流    時間: 2018-12-26 16:11
已搞定,咋感覺每次發(fā)完貼都會了,自己結(jié)題。謝謝各位!錯的原因是因為move_ok中的一個函數(shù)又將其置1,默認又進入中斷執(zhí)行命令。
作者: tsylovely    時間: 2018-12-26 16:32
愛學習愛交流 發(fā)表于 2018-12-26 16:11
已搞定,咋感覺每次發(fā)完貼都會了,自己結(jié)題。謝謝各位!錯的原因是因為move_ok中的一個函數(shù)又將其置1 ...

恭喜恭喜




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1