❶ 單片機奇偶校驗
通常,串列通信的一幀的格式是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單片機進行串口通信的時候,如何設置奇校驗還是偶校驗
首先你需要設置串口工作模式為2或3
其次,你將SCON中的TB8設置為1或0來確定是奇校驗或偶校驗。
❸ 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
❹ 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
就這些。
❻ C語言怎麼實現奇偶校驗啊(單片機串列通信)
http://blog.21ic.com/user1/2663/archives/2007/34881.html
這個可以參考一下
❼ 關於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
就這些。
❽ 51單片機串口通訊,奇偶校驗的問題
用匯編語言編程,好像是你自己講外文(如英文),必須按照單詞表來講,不可造詞。
用C語言編程,你就有了一個翻譯了,你就可以比較隨意的講。
為什麼不直接從P送到TB8?
匯編語言,一條一條的,都必須使用指令系統中的指令。不可瞎編。
❾ 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
就這些。