<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)串行口--同步移位寄存器

          51單片機(jī)串行口--同步移位寄存器

          作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏

          1.方式0

          當(dāng)設(shè)定SM1、SM0為00時,串行口工作于方式0,它又叫同步移位寄存器輸出方式。在方式0下,數(shù)據(jù)從 RXD(P3.0)端串行輸出或輸入,同步信號從TXD(P3.1)端輸出,發(fā)送或接收的數(shù)據(jù)為8位,低位在前,高位在后,沒有起始位和停止位。數(shù)據(jù)傳輸 率固定為振蕩器的頻率1/12,也就是每一機(jī)器周期傳送一位數(shù)據(jù)。方式0可以外接移位寄存器,將串行口擴(kuò)展為并行口,也可以外接同步輸入/輸出設(shè)備。

          執(zhí)行任何一條以SBUF為目的的寄存器指令,就開始發(fā)送。

          2.方式1

          當(dāng)設(shè)定SM1、SM0為01時,串行口工作于方式1。方式1為數(shù)據(jù)傳輸率可變的8位異步通信方式,由TXD發(fā) 送,RXD接收,一幀數(shù)據(jù)為10位,1位起始位(低電平),8位數(shù)據(jù)位(低位在前)和1位停止位(高電平)。數(shù)據(jù)傳輸率取決于定時器1或2的溢出速率 (1/溢出周期)和數(shù)據(jù)傳輸率是否加倍的選擇位SMOD。

          對于有定時器/計(jì)數(shù)器2的單片機(jī),當(dāng)T2CON寄存器中RCLK和TCLK置位時,用定時器2作為接收和發(fā)送的數(shù)據(jù)傳輸率發(fā)生器,而RCLK=TCLK=0時,用定時器1作為接收和發(fā)送的數(shù)據(jù)傳輸率發(fā)生器。兩者還可以交叉使用,即發(fā)送和接收采用不同的數(shù)據(jù)傳輸率。

          類似于模式0,發(fā)送過程是由執(zhí)行任何一條以SBUF為目的的寄存器指令引起的。

          3.方式2

          當(dāng)設(shè)定SM0、SM1二位為10時,串行口工作于方式2,此時串行口被定義為9位異步通信接口。采用這種方式 可接收或發(fā)送 11 位數(shù)據(jù),以 11 位為一幀,比方式 1 增加了一個數(shù)據(jù)位,其余相同。第 9 個數(shù)據(jù)即 D8 位用作奇偶校驗(yàn)或地址/數(shù)據(jù)選擇,可以通過軟件來控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 單片機(jī)串行口適用于多機(jī)通信。發(fā)送時,第9位數(shù)據(jù)為TB8,接收時,第9位數(shù)據(jù)送入RB8。方式 2 的數(shù)據(jù)傳輸率固定,只有兩種選擇,為振蕩率的 1/64 或 1/32 ,可由 PCON 的最高位選擇。

          4.方式3

          當(dāng)設(shè)定SM0、SM1二位為11時,串行口工作于方式3。方式3與方式2類似,唯一的區(qū)別是方式3的數(shù)據(jù)傳輸率是可變的。而幀格式與方式2一樣為11位一幀。所以方式3也適合于多機(jī)通信。

          數(shù)據(jù)傳輸率的確定

          串行口每秒鐘發(fā)送(或接收)的位數(shù)就是數(shù)據(jù)傳輸率。

          對方式0來說,數(shù)據(jù)傳輸率已固定成fosc/12,隨著外部晶振的頻率不同,數(shù)據(jù)傳輸率亦不相同。常用的fosc有12MHz和6MHz,所以數(shù)據(jù)傳輸率相應(yīng)為1000×103和500×103bit/s。在此方式下,數(shù)據(jù)將自動地按固定的數(shù)據(jù)傳輸率發(fā)送/接收,完全不用設(shè)置。

          對方式2而言,數(shù)據(jù)傳輸率的計(jì)算式為2SMOD·fosc/64。當(dāng)SMOD=0時,數(shù)據(jù)傳輸率為fm/64;當(dāng)SMOD=1時,數(shù)據(jù)傳輸率為fosc/32。在此方式下,程控設(shè)置SMOD位的狀態(tài)后,數(shù)據(jù)傳輸率就確定了,不需要再作其他設(shè)置。

          對方式1和方式3來說,數(shù)據(jù)傳輸率和定時器1的溢出率有關(guān),定時器1的溢出率為:

          定時器1的溢出率=定時器1的溢出次數(shù)/秒

          方式1和方式3的數(shù)據(jù)傳輸率計(jì)算式為:

          2SMOD/32×T1溢出率

          根據(jù)SMOD狀態(tài)位的不同,數(shù)據(jù)傳輸率有Tl/32溢出率和T1/16溢出率兩種。由于T1溢出率的設(shè)置是方便的,因而數(shù)據(jù)傳輸率的選擇將十分靈活。

          前已敘及,定時器Tl有4種工作方式,為了得到其溢出率,而又不必進(jìn)入中斷服務(wù)程序,往往使T1設(shè)置在工作方式2的運(yùn)行狀態(tài),也就是8位自動加入時間常數(shù)的方式。

          表5-3所示常用數(shù)據(jù)傳輸率的設(shè)置方法。

          表5-3 常用數(shù)據(jù)傳輸率設(shè)置方法

          數(shù)據(jù)傳輸率/Hz

          fOSC/MHz

          SMOD

          定時器1

          C/T

          方 式

          重新裝入值

          方式0最大:1M

          方式2最大:375k

          方式1、3:62.5k

          19.2k

          9.6k

          4.8k

          2.4k

          1.2k

          110

          12

          12

          12

          11.0592

          11.0592

          11.0592

          11.0592

          11.0592

          12

          X

          1

          1

          1

          0

          0

          0

          0

          0

          X

          X

          0

          0

          0

          0

          0

          0

          0

          X

          X

          2

          2

          2

          2

          2

          2

          1

          X

          X

          FFH

          FDH

          FDH

          FAH

          F4H

          E8H

          0FEEH

          串行通信實(shí)例

          這是一個單片機(jī)C51串口接收(中斷)和發(fā)送例程,可以用來測試51單片機(jī)的中斷接收和查詢發(fā)送。

          #include  #include  #define length 4 //數(shù)據(jù)長度 unsigned char inbuf[length]; unsigned char checksum,counter; bit flag = 0; //取數(shù)標(biāo)記 main() { init_serial(); //串行口初始化 while (1) { if (flag!=0) //如果取數(shù)標(biāo)志已置位,就將讀到的數(shù)從串口發(fā)出 { flag= 0; //取數(shù)標(biāo)志清0 send_string(inbuf,length); //向串口發(fā)送字符串 } } } void init_serial( void ) { SCON = 0x50; //串行工作方式1, 8位異步通信方式 TMOD |= 0x20; //定時器1, 方式 2, 8位自動重裝 PCON |= 0x80; //SMOD=1,表示數(shù)據(jù)傳輸率加倍 TH1 = 0xF4; //數(shù)據(jù)傳輸率:4800 fosc=11.0592MHz IE |= 0x90; //允許串行中斷 TR1 = 1; //啟動定時器1 } void send_char( unsigned char x) { SBUF=x; while (TI== 0 ); TI= 0; } void send_string( unsigned char *s, unsigned int string_length) { unsigned int i= 0; do { send_char(*(s + i)); //向串口發(fā)送一個字符 i++; } while ( i 127 ) { counter= 0; inbuf[counter]=x; checksum= x- 128; } else { counter++; inbuf[counter]=x; checksum ^= x; if ((counter==(length- 1)) && (!checksum)) { flag= 1; //如果串口接收的數(shù)據(jù)達(dá)到length個,且校驗(yàn)沒錯, //就置位取數(shù)標(biāo)志 } } } }

          資料整理自:http://hi.baidu.com/mikenoodle/blog/item/53920ffa87544d9259ee908a.html


          上一頁 1 2 下一頁

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();