单片机学习笔记 —— 串口通信原理
一、串口通信電路
電路圖:
說明:當RXD TXD為低電平時,對應的led燈會亮起
二、串口通信控制寄存器
下圖為80C51串行口的結構:
SCON(serial Control Register):串行口控制寄存器
| 字節地址:98H | SM0 | SM1 | SM2 | REN | TB8 | RB8 | T1 | R1 |
SM0 SM1:工作方式選擇位
SM2:多機通信控制位,主要用于方式2和方式3。當接收機的SM2=1時可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數據進入SBUF,并激活RI,進而在中斷服務中將數據從SBUF讀走)。當SM2=0時,不論收到的RB8為0和1,均可以使收到的數據進入SBUF,并激活RI。
REN:允許串行接收位。由軟件置REN=1,則啟動串行口接收數據;若軟件置REN=0,則禁止接收。
TB8:在方式2或方式3中,是發送數據的第九位,可以用軟件規定其作用。可以用作數據的奇偶校驗位,或在多機通信中,作為地址幀/數據幀的標志位。
RB8:在方式2或方式3中,是接收到數據的第九位,作為奇偶校驗位或地址幀/數據幀的標志位。在方式1時,若SM2=0,則RB8是接收到的停止位。
T1:發送中斷標志位。在方式0時,當串行發送第8位數據結束時,或在其它方式,串行發送停止位的開始時,由內部硬件使TI置1,向CPU發中斷申請。在中斷服務程序中,必須用軟件將其清0,取消此中斷申請。
R1:接收中斷標志位。在方式0時,當串行接收第8位數據結束時,或在其它方式,串行接收停止位的中間時,由內部硬件使RI置1,向CPU發中斷申請。也必須在中斷服務程序中,用軟件將其清0,取消此中斷申請。
PCON(Power Control Register):其中的SMOD(PCON[7])與串行工作有關——對方式1,2,3,當SMOD為1時,波特率提高一倍。
三、工作方式
方式1:方式1是10位數據的異步通信口。TXD為數據發送引腳,RXD為數據接收引腳,傳送一幀數據的格式如圖所示。其中1位起始位,8位數據位,1位停止位。
過程:用軟件置REN為1時,接收器以所選擇波特率的16倍速率采樣RXD引腳電平,檢測到RXD引腳輸入電平發生負跳變時,則說明起始位有效,將其移入輸入移位寄存器,并開始接收這一幀信息的其余位。接收過程中,數據從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時,控制電路進行最后一次移位。當RI=0,且SM2=0(或接收到的停止位為1)時,將接收到的9位數據的前8位數據裝入接收SBUF,第9位(停止位)進入RB8,并置RI=1,向CPU請求中斷。
四、串口的使用
串行口工作之前,應對其進行初始化,主要是設置產生波特率的定時器1、串行口控制和中斷控制。具體步驟如下:
- 確定T1的工作方式(編程TMOD寄存器)
- 計算T1的初值,裝載TH1、TL1
- 啟動T1(編程TCON中的TR1位)
- 確定串行口控制(編程SCON寄存器)
注:串行口在中斷方式工作時,要進行中斷設置(編程IE、IP寄存器)
完結 cheers! ??
總結
以上是生活随笔為你收集整理的单片机学习笔记 —— 串口通信原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础——get()方法
- 下一篇: 【C++之文件与文件流】f1.dat 和