chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

串口的基本結(jié)構(gòu)與通信方式

GReq_mcu168 ? 來源:未知 ? 作者:李倩 ? 2018-07-27 10:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

通信方式

并行

適合短距離通信,并行通信控制簡單、相對傳輸速度快(8位一起傳輸)。

串行

只能一位一位的傳送。

同步(了解)

建立發(fā)送方時鐘對接收方時鐘的直接控制,使雙方達(dá)到完全同步。此時,傳輸數(shù)據(jù)的位之間的距離均為“位間隔”的整數(shù)倍,同時傳送的字符間不留間隙。

發(fā)送方對接收方的同步可以通過外同步和自同步

異步(常)

以字符(構(gòu)成的幀)為單位進(jìn)行傳輸。數(shù)據(jù)位從低到高傳送。

格式:

這里的空閑時間是任意的。

串行通信的制式(傳輸方向)

單工(僅能沿一個方向)

半雙工(可進(jìn)行雙向,但需分時)

全雙工

串行通信的錯誤校驗

奇偶校驗

在發(fā)送數(shù)據(jù)時,數(shù)據(jù)位尾隨的1位為奇偶校驗位(1/0)。奇校驗時,數(shù)據(jù)中1的個數(shù)與檢驗位1的個數(shù)之和應(yīng)為奇數(shù);偶校驗時,數(shù)據(jù)中1的個數(shù)與校驗位1的個數(shù)之和應(yīng)為偶數(shù)。接收字符時,對1的個數(shù)進(jìn)行校驗,若字符不一致,則說明傳輸數(shù)據(jù)過程中出現(xiàn)錯誤。

代碼和校驗

發(fā)送方將所發(fā)數(shù)據(jù)塊求和(或各字節(jié)異或),產(chǎn)生一個字節(jié)的校驗字符(校驗和)附加到數(shù)據(jù)塊末尾。接收方接收數(shù)據(jù)時,同時對數(shù)據(jù)塊(除校驗字節(jié)外)求和(或各字節(jié)異或),將所得的結(jié)果與發(fā)送方的“校驗和”進(jìn)行比較,一致則無差。

循環(huán)冗余校驗

通過某種數(shù)學(xué)預(yù)算實現(xiàn)有效信息與校驗位之間的循環(huán)校驗,常用語對磁盤信息的傳輸、存儲區(qū)的完整性校驗。

串口的基本結(jié)構(gòu)

SBUF:51單片機(jī)中的特殊寄存器,串行數(shù)據(jù)緩沖器(一個接收一個發(fā)送),兩個其實是共用的一個地址99H,但是兩個在物理上面是分開的。

當(dāng)發(fā)送使用時,就采用SBUF=XXX; (XXX為需要傳送的數(shù)據(jù))

當(dāng)接收使用時,采用XXX=SBUF;

記得因為是串行的所以傳輸都是一位一位進(jìn)行的。

T1溢出率:T1計時器的溢出頻率(就是計時器每次低位計滿向高位進(jìn)位時間的倒數(shù))

用處:用于計算波特率(每秒傳輸二進(jìn)制代碼的位數(shù))

實現(xiàn)單片機(jī)電腦之間的互相傳送字符串通信

工具:STC-ISP

代碼:

#include

#include //printf頭文件

#define uc unsigned char

#define uint unsigned int

uc flag,i,flag_t,s[50]="",j=0,flag_n=0;

uc code table[]="I get ";

void init()

{

TMOD=0x20; //定時器工作方式,選擇了定時器1,工作方式2 八位初值自動重裝的8位定時器。

TH1=0xfd; //定時器1初值 ,設(shè)置波特率為9600 晶振11.0529MHZ?

TL1=0xfd;

TR1=1; //開啟定時器1

SM0=0;

SM1=1; //10位異步接收,(8位數(shù)據(jù))波特率可變

REN=1; //允許串行口接收位

EA=1; //允許中斷(總閘)

ES=1; //允許串口中斷

}

void main()

{

init();

while(1)

{

if(flag==1)

{ if(flag_n!=0) //使第二個及以后I get xx 換行,不與You transfer在一行(單純?yōu)榱烁袷胶每矗?/p>

{TI=1;

printf(" ");

while(!TI);

TI=0;

}

for(i=0;i<6;i++)

{

SBUF=table[i];

while(!TI);

TI=0;

}

for(i=0;s[i]!='#'&&i<50;i++)

{

SBUF=s[i];

while(!TI);

TI=0;

}

flag=0;

}

if(flag_t==1) //發(fā)送完畢之后,在電腦端輸出。

{

TI=1; //printf之前必須將T1置為1才行。

printf (" You transfer %s",s);

while(!TI);

TI=0;

flag_t=0;

}

}

}

void ser() interrupt 4

{

if(RI) //接收數(shù)據(jù),手動將RI清0

{

RI=0;

if(flag==0&&j!=0)//1.循環(huán)賦值為'