這塊串口通信板是當時實驗室老師給我布置的作業,給大家分享一下
\\\插播一條:
自己在今年整理一套單片機單片機相關論文800余篇
論文製作思維導圖
原理圖+源代碼+開題報告+正文+外文資料
想要的同學私信找我。
專欄的第一篇文章,不是串口通信有什麼特別的地方,只是突然想學著別人寫寫博客,記錄自己天天在做的事,順便幫助後人更快的學習。雖然現在感覺寫博客很有趣,但可能以後會堅持不下去,畢竟應該沒多少人會看這個專欄。不過就算沒人看,以後還可以給面試官看看,也算是一種履歷。嗯……應該還有一年半的時間可以記錄,說不定以後會補補之前學的內容呢,就當是複習了。
那,這塊串口通信板是當時實驗室老師給我布置的任務:
要求實現三個功能:
.利用單片機自帶串口實現51單片機到51單片機的雙向串行通信。
.利用單片機IO口實現51單片機到51單片機的雙向高速串行通信(目前達到12萬波特率)。
.通過串口,232接口,485接口實現51單片機與PC機的雙向多機通信。
除這些需要實現的功能外,還需要掌握和理解SPI總線,I2C總線,CAN總線的相關內容,及掌握目前主流的通信協議和應用方法,這些以後再說。
這篇博客主要講要求的第三點,及串口多機通信方面的內容,程式語言為51單片機的彙編語言,使用的單片機型號為:STC89C52。
實現多機通信的基本思路:
51單片機有一個自帶的串口,在進行多機通信時通常將串口工作模式設置為方式3(主從模式+可調波特率)。
串口在工作方式3下,每個數據幀包含11位信號。其中包括1位起始位(低電平)、8位數據位、1位可編程位(TB8)、1位停止位(高電平)。
數據幀格式:
SCON串口功能寄存器:
串口的多機通信是依靠SCON寄存器里的SM2和RB8兩個功能位實現的,因為其在工作模式三下有如下性質:
當SM2為0時:無論收到數據的第9位是0還是1,都使RI(接收中斷標誌位)置高,接收數據。
當SM2為1時:
當接收到的第9位是1(地址)時,使RI置高,接收數據。
當接收到的第9位是0(數據)時,不置高RI,丟棄數據。
利用上述性質,可以通過軟體編程實現:
SM2=0,第9位數據=0:代表這是發送給本機的數據
SM2=1,第9位數據=1:代表這是廣播的地址
SM2=1,第9位數據=0:代表這不是發送給本機的數據
以上就是利用串口進行多機通信的基本思路。
PC_MCU:
MOV DPTR,#PM_TAB
MOV A,#0
LCALL PRINTF_LCD
SETB SERIAL_FLAG ;置高標誌位,告訴中斷正在和PC通信
MOV A,#03H
LCALL SERIAL_READY ;進行方式3的初始化
PM_1: LCALL SAO_KEY
JNB KEY_UP,PM_K1
LJMP PM_K5
PM_K1: JNB KEY_DN,PM_K2
LJMP PM_K5
PM_K2: JNB KEY_OK,PM_K3
LJMP PM_K5
PM_K3: JNB KEY_RE,PM_K4
RET
PM_K4: JNB KEY_SD,PM_K5
CLR ES
CLR EA
SETB TB8 ;即將發送地址
MOV SBUF,ID ;發送地址
JNB TI,$
CLR TI
MOV SBUF,SW_8 ;發送數據
JNB TI,$
CLR TI
SETB ES
SETB EA
PM_K5:
【文章福利】:小編整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件裡面,有需要的可以自行添加哦!~點擊綠色通訊軟體搜索airuimcu加入。