新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC16F877A-UART

        PIC16F877A-UART

        作者: 時間:2016-11-13 來源:網絡 收藏
        #include
        #define unchar unsigned char
        #define uint unsigned intunchar RC_label;//標志位起始位為1結束位為0

        unchar caiji_label;//采集幀格式標志位正確為1錯誤為0
        unchar data RC[100];//存儲接收到的數據
        unchar data TX1[100];//存儲自身參數
        unchar data TX2[100];//存儲出錯指示ERROR
        int RC_buff;//
        int i=0,j=0,k=0;//

        //*****串口初始化**********
        void initRS232()
        {
        //設置TXSTA
        CSRC=0;//
        TX9=0;//8位數據發送
        TXEN=1;//發送使能
        SYNC=0;//選擇異步模式
        BRGH=1;//高速
        TRMT=1;//發送寄存器空
        TX9D=0;//

        //設置RCSTA
        SPEN=1;//允許串口工作
        RX9=0;//接收8位數據
        SREN=1;//
        CREN=1;//使能連續接收
        ADDEN=0;//
        FERR=0;//
        OERR=0;//無超速錯誤
        RX9D=0;//
        TRISC=0X80;//設置C口
        SPBRG=0X19;//設置波特率為9600
        }

        //*******延時*********
        void delay(int i)
        {for(i;--i;) continue;}
        //******中斷初始化******
        void int_interrupt(void)
        {
        GTE=1;//
        PEIE=1;//
        RCIE=1;//
        }

        //********中斷服務子程序*********
        void interrupt receive(void)
        {
        if(OERR==1)//判斷有無超速錯誤
        {
        CREN=0;
        CREN=1;
        }
        if(RCIF==1)
        {
        RC_buff=RCREG;
        if(RC_buff==0x2a)//判斷是否是起始標志*
        {
        RC_label=1;
        }
        if(RC_buff==0x23)//判斷是否是結束標志#
        {
        RC_label=0;
        }
        }

        if(RC_label==1)
        RC[k++]=RC_buff;//將接收到的數據存儲在數組中
        else if(RC_label==0)
        k=0;
        if(RC[1]==0XFE&&RC[2]==0XC0&&RC[3]==0X34&&RC[5]==0X12)//判斷數據采集幀格式是否正確
        caiji_label=1;
        else caiji_label=0;
        }

        //********參數發送子程序開始**********
        void TX_serve(void)
        {
        TX1[ ]={0X2A,0XFD,0X26,0X30,0X31,0X32};//自身參數存儲在TX1中
        TX2[ ]={0X56,0X52,0X52,0X4F,0X52};//出錯指示存儲在TX2中
        if(caiji_label==1)//如果數據采集幀格式正確則發送自身參數幀
        {
        for(j=0;j<6;j++)
        {
        TXREG=TX1[j];
        delay(20);
        }
        }
        if(caiji_label==0) //如果數據采集幀格式錯誤則發送出錯指示
        {
        for(j=0;j<5;j++)
        {
        TXREG=TX2[j];
        delay(20);
        }
        }
        }

        //********主程序開始**************
        void main()
        {
        int_interrupt();
        initRS232();
        TX_serve();
        end
        }


        關鍵詞: PIC16F877AUAR

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 湖北省| 丁青县| 文山县| 临颍县| 敖汉旗| 辉南县| 临西县| 神池县| 灵山县| 庄河市| 博白县| 通州区| 湘阴县| 西和县| 大冶市| 石泉县| 蚌埠市| 齐河县| 韶山市| 富民县| 太保市| 凌海市| 周口市| 光山县| 麻城市| 汨罗市| 建阳市| 南丰县| 松江区| 宝应县| 桦甸市| 满城县| 龙胜| 丰都县| 离岛区| 鄢陵县| 寿宁县| 肥西县| 谢通门县| 公安县| 北京市|