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

相關文章

主站蜘蛛池模板: 99久久精品国产一区二区三区 | 中文字字幕在线中文乱码范文 | 免费同性女女aaa免费网站 | 夜夜骑综合 | 91免费观看视频 | 欧美日韩一区二区三区四区 | 日韩福利片 | 成人h视频 | 一区在线视频 | 国产电影一区二区 | 在线观看黄视频 | 在线播放中文字幕 | 国产精品毛片一区二区在线看 | 久久综合一区二区 | 免费人成激情视频在线观看冫 | 91大神xh98xh系列全部 | 一区二区三区久久久 | 亚洲成人精品影院 | 精品一区二区三区在线视频 | 午夜精品福利视频 | 久久一| 手机在线一区二区三区 | av性色全交蜜桃成熟时 | 亚洲成人一区二区 | 91在线视频在线观看 | 欧美xxxx黑人又粗又长 | 一级黄色片毛片 | 久草色视频 | 最新91在线| 欧美日韩一区二区在线 | 日韩视频区 | 亚洲精品成人在线 | 亚洲精品一区二区三区蜜桃久 | 国产一区二区在线播放视频 | 欧美日韩亚洲一区 | 亚洲有码转帖 | 中文字幕一区二区三区乱码在线 | 日本午夜视频 | 国产午夜av片 | 人人看人人草 | 国产欧美一区二区三区在线看 |