單片機串口中斷髮送的實現與特色

     假設要發送一組數據   Send[10]
通常採用查詢發送(循環發送)方式:
unsigned char Send[10];                  //發送量
unsigned char i;                               //循環量
for(i=0;i<10;i++)
{
       SBUF= Send[i];                      //發送
       while(TI==0);                         //等待發送完成
       TI=0;                                      //清標誌
}
 
採用中斷髮送方式:
unsigned char Send[10];                 //發送量
unsigned char num;                         //發送數據量
unsigned char *p;                           //發送用指針
 
//發送時:
num=10;                                        //定義發送數據量
p=&Send ;                                    //取首地址
SBUF=*p;                                    //發送第一個數據,啓動發送中斷
//中斷代碼:
void ComInt() interrupt 4
{
       if(RI)  RI=0;                          //接收中斷略;
      
       if(TI)                                     //發送中斷處理
       {
              TI=0;                             //清標誌
              num--;                            //計數減1
              p++;                               //指針加1
              if(num >0) SBUF=*p;     //數據繼續發送至所有發完
       }
}
 
中斷髮送優勢:省去循環等待時間,以上面例子爲例,9600bps時查詢發送約佔用單片機10ms多,而中斷髮送只佔單片機幾十微秒(單片機速度越快,佔用時間越少)。
中斷髮送缺點:代碼稍複雜,發送過程不易控制。
相關文章
相關標籤/搜索