串口,作為單片機程序開發中最常用、最方便,也是應用最廣泛的程序調試方法;無論是作為調試工具,打印出調試信息,還是對功能模塊進行通信,串口是每個單片機開發人員最常用的單片機外設。
由于大部分51單片機不支持在線調試功能,所以串口作為一種有效的調試功能,所以在51單片機程序開發時,無法進行在線調試,不妨可以多采用串口來進行調試。
1. 串口配置
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. 串口通用程序
為了有較好的通用性,將串口程序配置為一個H文件和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)
{
/*串口初始化 */
TMOD = 0x20; //定時器T1使用工作方式2
TH1 = 253; // 設置初值
TL1 = 253;
TR1 = 1; // 開始計時
SCON = 0x50; //工作方式1,波特率9600bps,允許接收
ES = 1;
EA = 1; // 打開所以中斷
TI = 0;
RI = 0;
}
void Send_Data(unsigned char DAT)
{
ES = 0;
TI=0;
SBUF = DAT ;
while(TI==0);
TI=0;
ES = 1;
}
void Send_string(unsigned char *c)
{
while(*c != '\\0')
{
Send_Data(*c++);
}
}
-
單片機
+關注
關注
6056文章
44800瀏覽量
643652 -
寄存器
+關注
關注
31文章
5396瀏覽量
122480 -
51單片機
+關注
關注
275文章
5707瀏覽量
125665 -
調試
+關注
關注
7文章
600瀏覽量
34368 -
串口
+關注
關注
14文章
1578瀏覽量
78213
發布評論請先 登錄
相關推薦
51單片機串口通訊詳解

評論