51微控制器串列埠通訊詳解

2021-09-29 08:08:38 字數 1463 閱讀 8417

51微控制器配置除了需要配置2個8位暫存器scon、pcon外,還要配置定時器1的控制暫存器tmod,因為串列埠在進行收發需要使用定時器來取樣。

(1)狀態控制暫存器 scon

scon 是乙個逐位定義的 8 位暫存器,用於控制序列通訊的方式選擇、接收和傳送,指 示串列埠的狀態,scon 即可以位元組定址也可以位定址,位元組位址 98h,位址位為 98h~9fh。 它的各個位定義如下:

sm0 和 sm1 是串列埠的工作方式選擇位,2 個選擇位對應 4 種工作方式,如下表,其中 fosc 是振盪器的頻率。

(2)電源與波特率控制暫存器

控制暫存器 pcon 也是乙個逐位定義的 8 位暫存器,目前僅僅有幾位有定義,如下所示:

僅最高位 smod 與串列埠的控制有關,其他位與掉電方式有關。pcon 的位址為 87h 只能按 位元組定址,smod 是序列通訊波特率係數控制位,當串列埠工作在工作方式 1、2 時,若使用 t1 作為波特率發生器其 smod=1 則波特率加倍。

(3)定時器控制模式暫存器

tmod是定時器、計數器模式控制暫存器,它是乙個逐位定義的8為暫存器,但只能使用位元組定址

當串列埠工作在工作方式0和2是,波特率固定,方式0時fosc/12;方式2時fosc/32或fosc/64(根據smod判斷)。當串列埠工作在方式1時,波特率=(2^smod/32)*(微控制器時鐘頻率/(256-x)),x是初值;c/t#為定時器和計數器選擇位,0為定時器,1為計數器

2.串列埠通用程式

為了有較好的通用性,將串列埠程式配置為乙個**件和c檔案,往後只要開發51微控制器程式,都可以將該兩個檔案複製在工程中直接使用,無須修改。

(1)uart.h

#ifndef _uart_h_

#define _uart_h_

#include "reg52.h"

void uartinit(void);

void send_string(unsigned char *c);

void send_data(unsigned char dat);

#endif

(2)uart.c

#include "uart.h"

//串列埠初始化

void uartinit(void)

void send_data(unsigned char dat)

void send_string(unsigned char *c) }

void rsintr() interrupt 4 using 2

if(ri==1) //接收中斷

ea=1;

}

51微控制器串列埠通訊

1 並行通訊 傳送方和接收方用多根資料線連線,多位資料同時傳送。傳輸線多,長距離傳輸時成本大。2 序列通訊 單根資料線傳送資料,逐位傳送。長距離傳送成本低,但控制相對複雜。序列通訊又可分為 非同步序列通訊和同步序列通訊。非同步序列通訊 所謂 非同步 指的是雙方裝置使用各自的時鐘,以字元為單位傳輸,採...

51微控制器 UART串列埠通訊

使用半雙工通訊 使用硬體uart模組和串列埠中斷 include typedef unsigned int uint void configuart uint baud void main void configuart uint baud 中斷型別碼為4,中斷向量的位址 中斷型別碼 8 3 voi...

51微控制器複習 串列埠通訊

計算機通訊是指計算機與外部裝置或計算機與計算機之間的資訊交換。比如電腦和微控制器 通訊有並行通訊和序列通訊兩種方式。在多微機系統以及現代測控系統中資訊的交換多採用序列通訊方式。並行通訊 通常是將資料位元組的各位用多條資料線同時進行傳送 比如這樣說,乙個位元組有八位,我有八根線,一根傳一位,八位同時傳...