在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)串口通信軟件程序集

            51單片機(jī)串口通信軟件程序集

            作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
            串口通信單片機(jī)程序

            beepbit p3.7;蜂鳴器定義

            本文引用地址:http://www.biyoush.com/article/201611/315928.htm

            org 00h

            jmp main

            org 23h ;串行中斷入口地址

            jmp com_int ;串行中斷服務(wù)程序

            ;***********主程序開(kāi)始*******************

            org 30h

            main:mov sp,#30h;設(shè)置堆棧

            lcall rest ;初始化

            lcall comm ;串口初始化

            jmp $;原地等待

            ;************* 初始化 *********************

            rest:mov p0,#00h ;禁止數(shù)碼管顯示

            mov p2,#255

            clrbeep;禁止蜂鳴器

            mov p1,#255;禁止LED顯示

            RET;返回

            ; **************串口初始化 *****************

            ;設(shè)置串行口工作方式1,定時(shí)器1作為波特率發(fā)生器

            ;波特率設(shè)置為 2400;

            comm: mov tmod,#20h;設(shè)置定時(shí)器T1工作方式2

            mov tl1,#0f3h ;定時(shí)器計(jì)數(shù)初值,波特率 2400

            mov th1,#0f3h;定時(shí)器重裝值

            setb ea ;允許總的中斷

            setb es ;允許串行中斷

            mov pcon,#00h;波特率不倍增

            mov scon,#50h;設(shè)置串口工作方式1,REN = 1 允許接收

            setb tr1 ;定時(shí)器開(kāi)始工作

            ret ;返回

            ;***************串口中斷服務(wù)程序 ***********

            ;如果接收0FF表示上位機(jī)需要聯(lián)機(jī)信號(hào),單片機(jī)發(fā)送 0FFH作為

            ;應(yīng)答信號(hào),如果接收到 數(shù)字 1~ n,表示相應(yīng)的功能;

            ;這里,如果收到 1 ,則單片機(jī)向計(jì)算機(jī)發(fā)送字符H;

            ;如果收到 2 ,則單片機(jī)向計(jì)算機(jī)發(fā)送字符e;

            ;如果收到其他的數(shù)據(jù),則發(fā)送J;

            com_int:clr es;禁止串行中斷

            clr ri;清除接收標(biāo)志位

            mov a,sbuf ;從緩沖區(qū)取出數(shù)據(jù)

            mov p1,a

            mov dptr,#tab

            cjne a,#0ffh,in_1;檢查數(shù)據(jù)

            mov sbuf,#255;收到聯(lián)機(jī)信號(hào),發(fā)送聯(lián)機(jī)信號(hào)

            jnb ti,$;等待發(fā)送完畢

            clr ti;清除發(fā)送標(biāo)志

            setb es ;允許串行中斷

            reti;中斷返回

            in_1: cjne a,#1H, in_2 ;如果收到1

            movc a,@a+dptr

            mov sbuf,a ;發(fā)送 h

            jnb ti,$;等待發(fā)送完畢

            clrti ;清除發(fā)送中斷標(biāo)志

            setb es ;允許串行中斷

            reti;中斷返回

            in_2: cjne a,#2,in_3 ;接收到2

            movc a,@a+dptr

            mov sbuf,a ;發(fā)送 e

            jnb ti,$;等待發(fā)送完畢

            clrti ;清除發(fā)送中斷

            setb es ;允許串行中斷

            reti;中斷返回

            in_3: mov a,#03h

            movc a,@a+dptr

            mov sbuf,a ;發(fā)送 j

            jnb ti,$;等待發(fā)送完畢

            clr ti;清除發(fā)送中斷標(biāo)志

            setb es ;允許串行中斷

            reti;返回

            tab:db 2,h,e,j

            end

            51單片機(jī)串口調(diào)試程序一例

            /*定義為中斷方式串口處理*/

            #define INTERSENDSTR

            /*不為8032系列芯片 */

            //#define CHIP_8032

            #include

            #include

            #include

            #include "err.h"

            #ifdef INTERSENDSTR

            unsigned char xdata sSendComBuf[256],sRecComBuf[256];

            unsigned char data bOut,bIn,bSout,bSin;

            #else

            #define DEFSENDCHAR TI=0;SBUF=ACC;while(!TI);TI=0;

            #endif

            //bps設(shè)置 9600就是 PSetBps(96)(11.0592Mhz)

            unsigned charPSetBps(unsigned int bps) SMALL

            {

            unsigned int t1;

            unsigned char t2;

            #ifdef INTERSENDSTR

            /*如果使用中斷方式發(fā)送數(shù)據(jù),必須等待發(fā)送數(shù)據(jù)完畢才能更換波特率 */

            while(bSin!=bSout)

            {

            ;

            }

            ES=0;

            #endif

            #ifdef CHIP_8032

            if(3456%bps)

            {

            return ERR_SET_BPS;

            }

            t1=3456/bps;

            t1--;t1=~t1;

            RCAP2H=t1/256;RCAP2L=t1;

            T2MOD=0x00;

            /*使用定時(shí)器2做波特率發(fā)生器 */

            T2CON=0x34;/*TF2=0;EXF2=0;RCLK=1;TCLK=1;EXEN2=0;TR2=1;C/T2=0;CP/RL2=0

            */

            #else

            t1=576/bps;

            if((576%bps)||((t1==0))||(t1>=2*256))

            {

            return ERR_SET_BPS;

            }

            if(t1>256)

            {

            PCON=00;

            t2=256-(288/bps);

            }

            else

            {

            PCON=0x80;

            t2=256-t1;

            }

            TH1=t2;TL1=t2;

            TR1=1;

            #endif

            /*模式3*/

            SM0=0;

            RI=0;TI=0;

            REN=1;

            SM1=1;

            SM2=1;

            #ifdef INTERSENDSTR

            bOut=bIn;

            bSout=bSin;

            ES=1;

            #endif

            return OK;

            }

            void PSendChar(unsigned char ch) SMALL

            {

            #ifdef INTERSENDSTR

            unsigned char tch;

            tch=bSin+1;

            while(tch==bSout)

            {

            ;

            }

            sSendComBuf[bSin]=ch;

            ES=0;

            if((bSout==bSin))

            {

            SBUF=sSendComBuf[bSin];

            bSin++;

            }

            else

            {

            bSin++;

            }

            ES=1;

            #else

            ACC=ch;

            DEFSENDCHAR;

            #endif

            }

            unsigned char PGetChar() SMALL

            {

            unsigned char ch;

            #ifdefINTERSENDSTR

            ch=sRecComBuf[bOut];

            bOut++;

            return ch;

            #else

            ch=SBUF;

            RI=0;

            #endif

            }

            bit PCharInCom() SMALL

            {

            #ifdefINTERSENDSTR

            if(bIn!=bOut)

            {

            return 1;

            }

            return 0;

            #else

            return RI;

            #endif

            }

            void PSendString(unsigned char *st) SMALL

            {

            while(*st)

            {

            PSendChar(*st);

            st++;

            }

            }

            void PSendArray(unsigned char*st,unsigned intlen) SMALL

            {

            unsigned int ii;

            for(ii=0;ii

            {

            PSendChar(st[ii]);

            }

            }

            #ifdefINTERSENDSTR

            void PSerialInt() interrupt 4

            {

            if(RI)

            {

            sRecComBuf[bIn]=SBUF;

            bIn++;

            RI=0;

            }

            if(TI)

            {

            TI=0;

            if(bSout!=bSin)

            {

            bSout++;

            }

            if(bSout!=bSin)

            {

            SBUF=sSendComBuf[bSout];

            }

            }

            }

            #endif



            關(guān)鍵詞: 51單片機(jī)串口通

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉