51单片机串口配置方法

描述

串口,作为单片机程序开发中最常用、最方便,也是应用最广泛的程序调试方法;无论是作为调试工具,打印出调试信息,还是对功能模块进行通信,串口是每个单片机开发人员最常用的单片机外设。

由于大部分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++);
  }  
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分