久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

中斷法串口通信

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年02月11日   【字體:

第一個例子:

  避免死循環,一直發數據(用自設接收數據標志位法,不用關串口中斷ES方法)flag必須放if語句中的最后位置,否則死循環


#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar flag=0,temp; 
void init()
{
 TMOD=0X20;//定時器1方式2作為波特率發生器
 TH1=0XF3;//裝初值 波特率為4800bps的初值
 TL1=0XF3;
 TR1=1;//啟動定時器1
 SCON=0X50;//設置串口工作方式為方式1
 PCON=0X80;//加倍波特率后為4800
 EA=1;//開總中斷
 ES=1;//允許串口中斷
 TI=0;//清發送中斷標志位
 RI=0;//清接收中斷標志位
}
void main()
{
 init();
 while(1)
 {
  if(flag==1)
  {
   //ES=0;//flag為1說明接收完引起中斷
   //flag=0;//清中斷標志
   RI=0;//對接收中斷標志清零,為下一幀數據接收作準備
   temp=SBUF;//讀入接收數據,在不關中斷ES前提下,CPU讀入接收數據也不會引起中斷,接收數據由接收SBUF接收緩存器自動執行
   P0=temp;  //讀入數據送P0口
   SBUF=temp; //向發送方返回接收數據
   //TI=0;    //要等待發送完,否則數據沒發送完TI=0,flag=0已經執行
   //flag=0;  //發送完后引起中斷,flag又置1,進入死循環,一直發數據
   while(!TI);//等待發送完,!!要等待!!
      TI=0;//數據發送完對發送中斷標志清零,為下一幀數據發送作準備
   flag=0; //必須有否則進入死循環,放最后
   //ES=1;//允許串口中斷繼續接收數據
  }
 }
}
void serial() interrupt 4
{
 flag=1;
}

----------------------第2個例子:-----------------------------------------------

/***********************************************
      中斷法串口通信(用關串口中斷ES方法)推薦不丟幀
***********************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar flag=0,temp; 
void init()
{
 TMOD=0X20;//定時器1方式2作為波特率發生器
 TH1=0XF3;//裝初值 波特率為4800bps的初值
 TL1=0XF3;
 TR1=1;//啟動定時器1
 SCON=0X50;//設置串口工作方式為方式1
 PCON=0X80;//加倍波特率后為4800
 EA=1;//開總中斷
 ES=1;//允許串口中斷
 TI=0;//清發送中斷標志位
 RI=0;//清接收中斷標志位
}
void main()
{
 init();
 while(1)
 {
  if(flag==1)
  {
   ES=0;//flag為1說明接收完引起中斷,關串口中斷,處理當前幀
   flag=0;//清中斷標志
   RI=0;//對接收中斷標志清零,為下一幀數據接收作準備,此處清零不丟幀
   temp=SBUF;//讀入接收數據,在不關中斷ES前擔下,CPU讀入接收數據也不會引起中斷,接收數據由接收SBUF接收緩存器自動執行
   P0=temp;  //讀入數據送P0口
   SBUF=temp; //向發送方返回接收數據
   //TI=0;    //要等待發送完,否則數據沒發送完TI=0,flag=0已經執行
   //flag=0;  //發送完后引起中斷,flag又置1,進入死循環,一直發數據
   while(!TI);//等待發送完,!!要等待!!
      TI=0;//數據發送完對發送中斷標志清零,為下一幀數據發送作準備
   //flag=0; //必須有否則進入死循環,放最后
   ES=1;//允許串口中斷繼續接收數據
  }
 }
}
void serial() interrupt 4//執行此句,即產生中斷表示數據已接收完
{
    //RI=0;//不在此清零接收中斷標志,否則接收SUBF處于一直接收狀態,中斷一直進行影響其它指令進行,造成返回丟幀現象實驗得出
 flag=1;
}
關閉窗口

相關文章

主站蜘蛛池模板: 国产精品五月天 | 欧洲妇女成人淫片aaa视频 | 日韩成人影院在线观看 | 欧美xxxⅹ性欧美大片 | 久久久久久国产 | 中文字幕亚洲精品在线观看 | 在线黄 | 欧美一区二区三区,视频 | 中文字幕男人的天堂 | 天天草视频 | 天天躁人人躁人人躁狂躁 | 国产精品视频一二三区 | 久久综合久色欧美综合狠狠 | 97在线观视频免费观看 | 免费黄色的视频 | 免费一区二区三区 | 免费激情 | 日韩一区二区福利 | 一区二区三区视频在线 | 成人亚洲网站 | 午夜成人免费视频 | 天堂一区二区三区四区 | 91免费观看 | 日本精品一区 | 亚洲欧美在线免费观看 | 精品国产一区二区三区久久狼黑人 | www日韩欧美 | 在线视频亚洲 | 在线观看h视频 | 国产91一区二区三区 | 午夜小视频免费观看 | 欧美一区二区三区视频在线观看 | 色桃网| 精品免费国产视频 | 欧美精品一 | 亚洲视频中文字幕 | 福利社午夜影院 | 毛片免费观看视频 | 91在线精品一区二区 | 欧美二区三区 | 日韩网|