新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 中斷法串口通信

        中斷法串口通信

        作者: 時間:2012-08-06 來源:網絡 收藏

        第一個例子:

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

        #includereg52.h>#define uchar unsigned char#define uint  unsigned intuchar flag=0,temp; void init(){TMOD=0X20;//定時器1方式2作為波特率發生器TH1=0XF3;//裝初值 波特率為4800bps的初值TL1=0XF3;TR1=1;//啟動定時器1SCON=0X50;//設置串口工作方式為方式1PCON=0X80;//加倍波特率后為4800EA=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);//等待發送完,??!要等待?。I=0;//數據發送完對發送中斷標志清零,為下一幀數據發送作準備flag=0; //必須有否則進入死循環,放最后//ES=1;//允許串口中斷繼續接收數據}}}void serial() interrupt 4{flag=1;}

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

        /***********************************************(用關串口中斷ES方法)推薦不丟幀***********************************************/#includereg52.h>#define uchar unsigned char#define uint  unsigned intuchar flag=0,temp; void init(){TMOD=0X20;//定時器1方式2作為波特率發生器TH1=0XF3;//裝初值 波特率為4800bps的初值TL1=0XF3;TR1=1;//啟動定時器1SCON=0X50;//設置串口工作方式為方式1PCON=0X80;//加倍波特率后為4800EA=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;}


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 江北区| 金溪县| 应城市| 大同县| 元氏县| 扶沟县| 奈曼旗| 公安县| 类乌齐县| 万载县| 竹溪县| 合水县| 怀仁县| 巴林左旗| 通许县| 宣恩县| 长葛市| 扶绥县| 基隆市| 南部县| 汉源县| 饶平县| 永兴县| 界首市| 收藏| 广汉市| 民县| 阿克| 桂阳县| 新绛县| 宜州市| 嵊州市| 万山特区| 武义县| 蓬溪县| 疏勒县| 方正县| 恩施市| 阳信县| 濮阳市| 来宾市|