久久久久久久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;
}
關閉窗口

相關文章

主站蜘蛛池模板: www.三级| 五月婷色 | 亚洲一级片在线观看 | 日韩中文字幕免费 | 91美女视频| 日本黄色三级视频 | 精品久久免费视频 | 国产成人97精品免费看片 | 中文字幕综合网 | 国产女人高潮视频 | 日韩精品一区二区三区四区 | 一二三区视频 | 久久小视频 | 久久久久91 | 日韩精品中文字幕在线观看 | 亚洲综合激情网 | 日本少妇视频 | 国产高清91 | 中文字幕在线一区二区三区 | 三上悠亚激情av一区二区三区 | 一级黄色免费 | 80日本xxxxxxxxx96 国产成人在线免费视频 | 青草国产| 四虎影院在线免费观看 | www.三级 | 黄色a级网站| 亚洲天堂男人天堂 | 中文字幕在线观看免费 | 日韩视频在线观看免费 | 中文字幕免费视频 | 日韩成人在线播放 | av高清在线 | 黄视频免费在线观看 | 日韩国产一区二区三区 | 亚洲激情视频在线观看 | 亚洲精品午夜精品 | 久久久国产精品人人片 | 青草在线视频 | 亚洲黄色小视频 | 天天舔天天干 | 日韩一区二区免费视频 |