在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 串行通信口SCI__HCS12學習筆記(2)

            串行通信口SCI__HCS12學習筆記(2)

            作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
            基本概念:

            SCI采用NRZ數(shù)據(jù)格式,用負電平表示一種二進制值,正電平表示另一種二進制值,不使用零電平??臻e狀態(tài)為1,發(fā)送器通過發(fā)送一個0表示一字節(jié)傳輸開始隨后是數(shù)據(jù)位,最后發(fā)送1~2位的停止位,表示一字節(jié)的傳送結(jié)束。一個開始位到一個停止位,為1幀F(xiàn)rame。

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

            波特率有300、600、900、1200、1800、2400、4800、9600、19200、38400。隨著波特率的提高,信號受干擾的程度也越大,因此,串行口的傳輸速率有限。

            寄存器:

            對于編程者來說,直接面對的就是寄存器,因此對于寄存器的介紹是非常重要的。

            這里只列舉,詳細各個位的介紹參照數(shù)據(jù)手冊:

            波特率寄存器 SCIBDH SCIBDL H的高3位無效,因此一種13位1~8191

            控制寄存器 SCICR1 SCICR2 傳輸格式,中斷使能

            狀態(tài)寄存器 SCISR1 SCISR2 中斷標志,發(fā)送與接收狀態(tài)

            數(shù)據(jù)寄存器 收發(fā)的數(shù)據(jù)

            初始化、收、發(fā)子函數(shù):

            //串行通信需要用到的頭文件
            #include "mc9s12dg128.h" //MCU映像寄存器名
            #include "Type.h" //類型別名定義

            //串行通信寄存器及標志位定義
            #define ReSendStatusR SCI0SR1 //SCI狀態(tài)寄存器
            #define ReTestBit 5 //接收緩沖區(qū)滿標志位
            #define SendTestBit 7 //發(fā)送緩沖區(qū)空標志位
            #define ReSendDataR SCI0DRL //數(shù)據(jù)寄存器

            //串行通信相關(guān)函數(shù)聲明
            void SCIInit(void); //串行口初始化函數(shù)聲明
            void SCISend1(INT8U o); //串行發(fā)送1個字節(jié)
            void SCISendN(INT8U n,INT8U ch[]); //串行發(fā)送n個字節(jié)
            INT8U SCIRe1(INT8U *p); //串行接收1個字節(jié)
            INT8U SCIReN(INT8U n,INT8U ch[]); //串行接收n個字節(jié)

            //特別聲明,這里的INT8U表示8位無符號數(shù)

            //[SCI.c]串行通信----------------------------------------------------------*
            //本文件包含: *
            // (1)SCIInit:串行口初始化 *
            // (2)SCISend1:串行發(fā)送1個字節(jié) *
            // (3)SCISendN:串行發(fā)送n字節(jié) *
            // (4)SCIRe1:串行接收1字節(jié) *
            // (5)SCIReN:串行接收n字節(jié) *
            //硬件連接: *
            // MCU的SCI0模塊接口與PC方的串行口相連 *
            //-------------------------------------------------------------------------*

            //頭文件
            #include "SCI.h" //串行通信頭文件

            //SCIInit:DG128串行口0初始化函數(shù)-------------------------------------------*
            //功 能: *
            // 開SCI0關(guān)SCI1,關(guān)串口中斷,對串行口進行初始化,默認為允許SCI,正常碼輸出 *
            // ,8位數(shù)據(jù),無校驗等,允許發(fā)送器允許接收器.查詢方式收發(fā),波特率為9600 *
            // (設(shè)fBUS=19.6608Mhz) *
            //參 數(shù):無 *
            //返 回:無 *
            //說 明: *
            // (1)若初始化SCI1,只需SCI0->SCI1 *
            // (2)該初始化函數(shù)與芯片有關(guān) *
            //-------------------------------------------------------------------------*
            void SCIInit(void)
            {
            INT8U t;
            //定義波特率Bt=9600,SCI0BD=fBUS/(16*Bt)
            SCI0BDL = 0x80; //須先給低8位賦值
            SCI0BDH = 0x00; //再給高8位賦值
            SCI0CR1 = 0x00; //設(shè)置允許SCI,正常碼輸出,8位數(shù)據(jù),無校驗
            t = SCI0DRL; //讀數(shù)據(jù)寄存器(清0)
            t = SCI0SR1; //讀狀態(tài)寄存器(清0)
            SCI0CR2 = 0x0C; //允許SCI0接收和發(fā)送 查詢方式
            }

            //SCISend1:串行發(fā)送1個字節(jié)-------------------------------------------------*
            //功 能:串行發(fā)送1個字節(jié) *
            //參 數(shù):o=要發(fā)送的數(shù)據(jù) *
            //返 回:無 *
            //-------------------------------------------------------------------------*
            void SCISend1(INT8U o)
            {
            //判斷ReStatusR的第SendTestBit位是否為1,是1可以發(fā)送
            while (1)
            if ((ReSendStatusR & (1< {
            ReSendDataR = o;
            break;
            }
            }

            //SCISendN:串行發(fā)送N個字節(jié)-------------------------------------------------*
            //功 能:發(fā)送數(shù)組中的N個字節(jié)數(shù)據(jù) *
            //參 數(shù):n=待發(fā)送的數(shù)據(jù)字節(jié)數(shù),ch=存放待發(fā)送數(shù)據(jù)的數(shù)組首地址 *
            //返 回:無 *
            //內(nèi)部調(diào)用函數(shù):SCISend1 *
            //-------------------------------------------------------------------------*
            void SCISendN(INT8U n,INT8U ch[])
            {
            INT8U i;
            for (i=0; i SCISend1(ch[i]);
            }

            //SCIRe1:串行收一個字節(jié)數(shù)據(jù)------------------------------------------------*
            //功 能:從串行口接收1個字節(jié)的數(shù)據(jù) *
            //參 數(shù):p=標志指針 *
            //返 回:接收到的數(shù)據(jù)(若接收失敗,返回0xff) *
            //說 明:參數(shù)*p帶回接收標志=0收到數(shù)據(jù),=1未收到數(shù)據(jù) *
            //-------------------------------------------------------------------------*
            INT8U SCIRe1(INT8U *p)
            {
            INT16U k;
            INT8U i;
            //ReStatusR第ReTestBit位為1表示可接收數(shù)據(jù)
            for (k=0; k<0xfbbb; k++)
            if ((ReSendStatusR & (1< {
            i = ReSendDataR;
            *p = 0x00;
            break;
            }
            //接收失敗
            if (k >= 0xfbbb)
            {
            i=0xff;
            *p=0x01;
            }
            return i; //返回接收到的數(shù)據(jù)
            }

            //SCIReN:HC08串行接收N個字節(jié)-----------------------------------------------*
            //功 能:接收N個字節(jié)數(shù)據(jù),并存放在ch數(shù)組中 *
            //參 數(shù):n=待接收的數(shù)據(jù)字節(jié)數(shù),ch=存放待接收數(shù)據(jù)的數(shù)組首地址 *
            //返 回:接收標志=0收到數(shù)據(jù),=1未收到數(shù)據(jù) *
            //內(nèi)部調(diào)用函數(shù):SCIRe1 *
            //-------------------------------------------------------------------------*
            INT8U SCIReN(INT8U n,INT8U ch[])
            {
            INT8U m;
            INT8U fp;
            m = 0;
            //接收n個數(shù)據(jù)
            while (m {
            ch[m] = SCIRe1(&fp);
            if (fp == 1) return 1; //只要有1個字節(jié)數(shù)據(jù)沒接收到就返回報錯
            m++;
            }
            return 0;
            }

            這段程序是嵌入式系統(tǒng)--使用HCS12微控制器的設(shè)計與應(yīng)用中附帶的。格式很規(guī)范。

            在計算機上使用軟件收發(fā)給單片機時也容易出錯,一般是波特率不匹配,這樣出現(xiàn)的就是亂碼,一定要注意。

            Bt=fBUS/(16*BR)



            關(guān)鍵詞: 串行通信口SCIHCS1

            評論


            技術(shù)專區(qū)

            關(guān)閉