導航:首頁 > 操作系統 > 51單片機奇偶校驗

51單片機奇偶校驗

發布時間:2022-10-08 13:10:32

『壹』 51單片機中C語言奇偶校驗位如何設置

MOV
A,
#待發數據
;數據進了A,即刻生成校驗位P
MOV
C,
P
MOV
TB8,
C
;校驗位送到TB8
MOV
SBUF,
A
;發送數據,以及P
上述寫法,是偶校驗。奇校驗,需要增加一條取反指令,如下:
MOV
C,
P
CPL
C
MOV
TB8,
C
;校驗位送到TB8

『貳』 非同步通信中採用奇校驗,如果傳送的數據為:11010010,則奇偶校驗位應為__。

1000110(0)必須添0這樣原來有3個1已經是奇數了所以添上0之後1的個數還是奇數個。

奇/偶校驗(ECC)是數據傳送時採用的一種校正數據錯誤的一種方式,分為奇校驗和偶校驗兩種。

如果採用奇校驗,則在傳輸每個位元組時增加一個額外的位作為校驗位。當實際數據中的「1」個數為偶數時,校驗位為「1」;否則,校驗位為「0」,保證傳輸的數據滿足奇校驗要求。

接收端收到數據後,按奇數校驗的要求檢測數據中「1」的個數。如果是奇數,說明傳輸是正確的;否則,就意味著傳輸錯誤。

(2)51單片機奇偶校驗擴展閱讀:

關於奇/偶校驗和的結論:

1、奇偶校驗通過奇偶校驗位對地進行校驗。奇偶校驗位是二進制數的最後一位,是一個二進制數,它指示給定數的二進制數中1的個數是奇數還是偶數。

2、奇偶校驗位是最簡單的錯誤檢測碼。

奇偶校驗:如果給定數據位中1的個數是奇數,則奇偶校驗位(即最後一位)設置為1;否則,奇偶校驗位設置為0,使1的總數為偶數。

奇數校驗:如果給定的數據位中1的個數是偶數,那麼奇數校驗位(即最後一位)被設為1,反之亦然,因此1的總數是奇數。

『叄』 51單片機如何初始化成8-n-1(8數據位,無奇偶校驗位,1停止位)波特率,是用串口的模式幾

void
uart_init(void)
{
SCON
=
0x50
;//串列方式1,
8-bit數據位,允許接收
TMOD
|=
0x21;//定時器1使用模式2,8-bit自動重裝用於產生波特率
//
PCON
|=
0x80;//SMOD=1;波特率增倍
PCON
&=
0x7f;//SMOD=0;波特率不增倍
TH1
=
0xfd;
//Baud:19200(SMOD=1)或9600(SMOD=0),11.0592MHz
IE
|=
0x90;
//全局中斷開,允許串口中斷
TR1
=
1;
//定時器1運行,開始產生波特率
}
你可以用串口監視工具來查看單片機發出的數據是否正確,祝你成功

『肆』 51單片機進行串口通信的時候,如何設置奇校驗還是偶校驗

首先你需要設置串口工作模式為2或3
其次,你將SCON中的TB8設置為1或0來確定是奇校驗或偶校驗。

『伍』 51單片機中C語言奇偶校驗位如何設置

在51單片機中,只要將一個值傳送給累加器,這個數的奇偶校驗值就會影響P。一般而言,在串列通訊中為確保傳輸數的准確,用到校驗位的情況比較多。以下是程序代碼:

#include<reg51.h>

main()
{
char dat;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0xd0;
while(1)
{
dat++;
ACC=dat;
TB8=P; //校驗位送第九數據位TB8
SBUF=ACC;
while(TI==0);
TI=0;
}
}

『陸』 51單片機奇偶校驗

呵呵,在這兩條指令的前後,你各忽略了一條指令。請看下列程序及說明:
MOVA,#待發數據;數據進了A,即刻生成校驗位P
MOVC,P
MOVTB8,C;校驗位送到TB8
MOVSBUF,A;發送數據,以及P
上述寫法,是偶校驗。奇校驗,需要增加一條取反指令,如下:
MOVC,P
CPLC
MOVTB8,C;校驗位送到TB8
就這些。

『柒』 51單片機串口方式2中的TB8到底是用來奇偶校驗還是定義地址/數據的

看書要仔細,書上的說法沒有錯。

TB8:工作方式2和方式3時,為發送的第9位數據,也可以當做奇偶校驗位。
(跟地址/數據沒有關系)

SM2:多機通信控制位(方式2和方式3)
SM2=1:只有接收到第9位(RB8=1)時,RI才置位。(如果RB8=0,RI就會等於0,就不能進入接收中斷,自然丟失信息了。)
SM2=0:接收到單個位元組,RI就置位。(單機通信方式)

而且這里說的奇偶校驗是TB8,SM2=1時考慮的是RB8,這兩個分別是不同的位,功能又不沖突。

串口通信最基本的控制寄存器SCON,書上的描述都很簡潔,不能跳著看,要對比著一條一條理解。掌握了控制寄存器各個位的作用,串口通信也就基本了解了。

『捌』 51單片機中的串口通信,我想設置一個偶校驗,請問怎麼配置選用工作方式3的話,SCON是多少

void UartInit(void) //[email protected]
{
SCON = 0x50; //8位數據,可變波特率
AUXR &= 0xBF; //定時器1時鍾為Fosc/12,即12T
AUXR &= 0xFE; //串口1選擇定時器1為波特率發生器
TMOD &= 0x0F; //設定定時器1為16位自動重裝方式
TL1 = 0xF4; //設定定時初值
TH1 = 0xFF; //設定定時初值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
}

『玖』 51單片機 奇偶校驗

呵呵,在這兩條指令的前後,你各忽略了一條指令。請看下列程序及說明:

MOV A, #待發數據 ;數據進了A,即刻生成校驗位P
MOV C, P
MOV TB8, C ;校驗位送到TB8
MOV SBUF, A ;發送數據,以及P

上述寫法,是偶校驗。奇校驗,需要增加一條取反指令,如下:

MOV C, P
CPL C
MOV TB8, C ;校驗位送到TB8

就這些。

『拾』 單片機奇偶校驗

通常,串列通信的一幀的格式是8-n-1,即8位數據、無校驗、1個停止位。
有時為了提高准確度,需要增加一個「奇」校驗位或者「偶」校驗位。
對於高級語言的做法是很簡單的,只要把格式命令「8-n-1」,改為「8-P-1」或「8-O-1」即可。
串列口在帶有校驗位的通信方式中,是先發送8位數據,然後再發送校驗位。
51單片機也可以按照帶有校驗位的方式進行串列通信,這在51單片機中稱為9位數據方式。
51單片機中有兩個位,分別稱為TB8和RB8,它們在「無校驗」的時候,並沒有用處。
當51單片機用9位數據方式進行串列通信的時候,TB8和RB8的作用如下:
51單片機在發送的時候,先發送8位數據,然後發送TB8中的內容;
51單片機在接收的時候,先接收8位數據,然後接收校驗位,存到RB8中。
編寫51單片機程序的時候,應該在發送數據之前,在TB8中,寫好待發送的校驗位。
8位數據的校驗位,可以利用單片機中奇偶標志位P來自動生成,程序如下。
MOV A, #待發數據 ;數據進了A,即刻生成奇偶標志位P
MOV C, P
MOV TB8, C ;校驗位送到TB8
MOV SBUF, A ;發送數據,以及P
由於P = 1則說明A中有奇數個1,所以上述程序是「偶」校驗的形式。
如果要求的是「奇」校驗,則需要增加一條取反指令,如下:
MOV C, P
CPL C
MOV TB8, C ;校驗位送到TB8
接收方會把收到的8位數送到SBUF,第9位數,送到RB8,然後自動設立RI = 1。
之後,就可以用RB8中的內容,對剛才收到的8位數進行正確性檢驗。

另一個問題:51單片機如何初始化成8-n-1(8數據位,無奇偶校驗位,1停止位)波特率,是用串口的模式幾?
本來想用串口的模式1,可是仔細一看,模式1是10非同步通信方式,1起始位,8數據位,1停止位?
懸賞分:20 - 解決時間:2009-12-1 13:26
問題補充:首先感謝一樓的回答。我還有些疑問,剛才用示波器看了下,當發送0xFF時,示波器顯示一位低電平,其餘為高電平,這點應該是對的,因為起始位是0.可是為什麼發送0xAA時,示波器的(起始位+數據位+停止位)序列是:0 + 0101 0101 + 1,而0x55的序列為:0 +1010 1010 + 1,這兩個值好像不對,是相反了,要是調一下剛好對?
;-----------------------------------------------------------------
最佳答案用串口的模式1,是10位非同步通信方式。
1起始位,8數據位,1停止位,沒有奇偶校驗位。
這種模式就是:8-n-1(8數據位,無奇偶校驗位,1停止位)的模式。
完全符合你的要求。

閱讀全文

與51單片機奇偶校驗相關的資料

熱點內容
網盤忘記解壓碼怎麼辦 瀏覽:852
文件加密看不到裡面的內容 瀏覽:651
程序員腦子里都想什麼 瀏覽:430
oppp手機信任app在哪裡設置 瀏覽:185
java地址重定向 瀏覽:268
一年級下冊摘蘋果的演算法是怎樣的 瀏覽:448
程序員出軌電視劇 瀏覽:88
伺服器系統地址怎麼查 瀏覽:54
解壓游戲發行官 瀏覽:601
國外小伙解壓實驗 瀏覽:336
頂級大學開設加密貨幣 瀏覽:437
java重載與多態 瀏覽:528
騰訊應屆程序員 瀏覽:942
一鍵編譯程序 瀏覽:129
語音加密包哪個好 瀏覽:341
有什麼學習高中語文的app 瀏覽:283
安卓手機的表格里怎麼打勾 瀏覽:411
阿里雲伺服器有網路安全服務嗎 瀏覽:970
超解壓兔子視頻 瀏覽:25
單片機怎麼測負脈沖 瀏覽:176