STC15W408AS只有一个串口,串口1,有4种工作方式,其中两种方式的波特率是可变的,另两种是固定的,以供不同应用场合选用。

一、串口1相关寄存器

下面只把接下来我需要的寄存器和寄存器的位说明一下。

1.1 控制寄存器SCON

其中SM0、SM1按下列组合确定串行口1的工作方式:

REN:允许/禁止串行接收控制位。由软件置位REN,即REN=1为允许串行接收状态,可启动串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。

TI: 发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后TI必须用软件清零,即TI=0。在其他方式中,则在停止位开始发送时由内部硬件置位,即TI=1,响应中断后TI必须用软件清零。

RI: 接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,向主机请求中断,响应中断后RI必须用软件清零,即RI=0。在其他方式中,串行接收到停止位的中间时刻由内部硬件置位,即RI=1,向CPU发中断申请,响应中断后RI必须由软件清零。串行通信的中断请求:当一帧发送完成,内部硬件自动置位TI,即TI=1,请求中断处理;当接收完一帧信息时,内部硬件自动置位RI,即RI=1,请求中断处理。由于TI和RI以"或逻辑"关系向主机请求中断,所以主机响应中断时事先并不知道是TI还是RI请求的中断,必须在中断服务程序中查询TI和RI进行判别,然后分别处理。因此,两个中断请求标志位均不能由硬件自动置位,必须通过软件清0,否则将出现一次请求多次响应的错误。电源控制寄存器PCON中的SMOD/PCON.7用于设置方式1、方式2、方式3的波特率是否加倍。

1.2 数据缓冲寄存器SBUF

STC15系列单片机的串行口1缓冲寄存器(SBUF)的地址是99H,实际是2个缓冲器,写SBUF的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。两个操作分别对应两个不同的寄存器,1个是只写寄存器,1个是只读寄存器。串行通道内设有数据寄存器。在所有的串行通信方式中,在写入SBUF信号(MOV SBUF,A)的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为移位寄存器的输出位。根据不同的工作方式会自动将 1" TB8的值装入移位寄存器的第9位,并进行发送。串行通道的接收寄存器是一个输入移位寄存器。在方式0时它的字长为8位,其他方式时为9位。当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器SBUF中,其第9位则装入SCON寄存器中的RB8位。如果由于SM2使得已接收到的数据无效时,RB8和SBUF中内容不变。由于接收通道内设有输入移位寄存器和SBUF缓冲器,从而能使一帧接收完将数据由移位寄存器装入SBUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从SBUF缓冲器中将数据取走,否则前一帧数据将丢失。SBUF以并行方式送往内部数据总线。

1.3 辅助寄存器AUXR

T0x12: 定时器0速度控制位

0, 定时器0是传统8051速度,12分频;

1, 定时器0的速度是传统8051的12倍,不分频

T1x12: 定时器1速度控制位

0, 定时器1是传统8051速度,12分频;

1, 定时器1的速度是传统8051的12倍,不分频

如果UART1/串口1用T1作为波特率发生器,则由T1x12决定UART1/串口是12T还是1T

UART_M0x6: 串口模式0的通信速度设置位

0, 串口1模式0的速度是传统8051单片机串口的速度,12分频;

1, 串口1模式0的速度是传统8051单片机串口速度的6倍,2分频

T2R: 定时器2允许控制位

0, 不允许定时器2运行;

1, 允许定时器2运行

T2_C/T: 控制定时器2用作定时器或计数器

0, 用作定时器(对内部系统时钟进行计数);

1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数)

T2x12: 定时器2速度控制位

0, 定时器2是传统8051速度,12分频;

1, 定时器2的速度是传统8051的12倍,不分频

如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T.

EXTRAM: 内部/外部RAM存取控制位

0, 允许使用逻辑上在片外、物理上在片内的扩展RAM;

1, 禁止使用逻辑上在片外、物理上在片内的扩展RAM

S1ST2: 串口1(UART1)选择定时器2作波特率发生器的控制位

0, 选择定时器1作为串口1(UART1)的波特率发生器;

1, 选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为独立定时器使用串口1可以选择定时器1做波特率发生器,也可以选择定时器2作为 波特率发生器当设置AUXR寄存器中的S1ST2位(串行口波特率选择位)为1时,串行口1选择定时器2作为波特率发生器,此时定时器1可以释放出来作为定时器/计数器/时钟输出使用。

对于STC15系列单片机,串口2只能使用定时器2作为其波特率发生器,不能够选择其他定时器作为波特率发生器。而串口1默认选择定时器2作为其波特率发生器,也可以选择定时器1作为其波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可以选择定时器3作为其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可以选择定时器4作为其波特率发生器。

1.4 定时器2的寄存器T2H, T2L

定时器2寄存器T2H(地址为D6H,复位值为00H)及寄存器T2L(地址为D7H,复位值为00H)用于保存重装时间常数。

注意:对于STC15串口2只能使用定时器2作为其波特率发生器,不能够选择其他定时器作为波特率发生器;而串口1默认选择定时器2作为其波特率发生器,也可以选择定时器1作为其波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可以选择定时器3作为其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可以选择定时器4作为其波特率发生器。

1.5 与串行口1中断相关的寄存器位ES和PS

串行口中断允许位ES位于中断允许寄存器IE中,中断允许寄存器的格式如下:

IE : 中断允许寄存器 (可位寻址)

EA : CPU的总中断允许控制位

EA=1,CPU开放中断,

EA=0,CPU屏蔽所有的中断申请。

EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自己的

中断允许控制位控制。

ES : 串行口中断允许位

ES=1,允许串行口中断,

ES=0,禁止串行口中断。

IP : 中断优先级控制寄存器低 (可位寻址)

PS: 串行口1中断优先级控制位。

当PS=0时,串行口1中断为最低优先级中断(优先级0)

当PS=1时,串行口1中断为最高优先级中断(优先级1)

二、串口1工作模式1:8位UART,波特率可变

当软件设置SCON的SM0、SM1为"01" 时,串口1则以模式1工作。此模式为8位UART格式,一帧信息为10位:1位起始位,8位数据位(低位在先)和1位停止位。波特率可变,即可根据需要进行设置。TxD/P3.1为发送信息,RxD/P3.0为接收端接收信息,串行口为全双工接受/发送串行口模式1的发送过程:串行通信模式发送时,数据由串行发送端TxD输出。当主机执行一条写 SBUF" 的指令就启动串行通信的发送,写"SBUF"信号还把"1"装入发送移位寄存器的第9位,并通知TX控制单元开始发送。发送各位的定时是由16分频计数器同步。移位寄存器将数据不断右移送TxD端口发送,在数据的左边不断移入"0"作补充。当数据的最高位移到移位寄存器的输出位置,紧跟其后的是第9位 1" ,在它的左边各位全为"0" ,这个条件,使TX控制单元作最后一次移位输出,然后使允许发送信号 SEND"失效,完成一帧信息的发送,并置位中断请求位TI,即TI=1,向主机请求中断处理。

模式1的接收过程:当软件置位接收允许标志位REN,即REN=1时,接收器便以选定波特率的16分频的速率采样串行接收端口RxD,当检测到RxD端口从 "1"→"0"的负跳变时就启动接收器准备接收数据,并立即复位16分频计数器,将1FFH植装入移位寄存器。复位16分频计数器是使它与输入位时间同步。16分频计数器的16个状态是将1波特率(每位接收时间)均为16等份,在每位时间的7、8、9状态由检测器对RxD端口进行采样,所接收的值是这次采样直经"三中取二" 即3次采样至少2次相同的值,以此消除干扰影响,提高可靠性。在起始位,如果接收到的值不为"0"(低电平),则起始位无效,复位接收电路,并重新检测 1"→0" 的起始位有效,则将它输入移位寄存器,并接收本帧的其余信息。接收的数据从接收移位寄存器的右边移入,已装入的1FFH向左边移出,当起始位 0" 移位寄存器的最左边时,使RX控制器作最后一次移位,完成一帧的接收。若同时满足以下两个条件:

·RI=0;

·SM2=0或接收到的停止位为1。

则接收到的数据有效,实现装载入SBUF,停止位进入RB8,置位RI,即RI=1,向主机请求中断,若上述两条件不能同时满足,则接收到的数据作废并丢失,无论条件满足与否,接收器重又检测RxD端口上的 "1"→"0"的跳变,继续下一帧的接收。接收有效,在响应中断后,必须由软件清0,即RI=0。通常情况下,串行通信工作于模式1时,SM2设置为"0"。

三、串口1测试程序

#include "stc15.h"typedef unsigned char BYTE;
typedef unsigned int WORD;#define FOSC 11059200L          //系统频率
#define BAUD 9600               //串口波特率void SendData(BYTE dat);
void SendString(char *s);void main()
{SCON = 0x50;                //8位可变波特率 串口工作模式1T2L = (65536 - (FOSC/4/BAUD));   //设置波特率重装值T2H = (65536 - (FOSC/4/BAUD))>>8;AUXR = 0x14;                //T2为1T模式, 并启动定时器2AUXR |= 0x01;               //选择定时器2为串口1的波特率发生器ES = 1;                     //使能串口1中断EA = 1;while(1);
}
// UART 中断服务程序
void Uart() interrupt 4
{   // 接收中断标志位if (RI){RI = 0;                 //清除RI位SendData(SBUF + 1);     // 把接收的数据+1 再发送出去}// 发送中断标志位if (TI){TI = 0;                 //清除TI位SendString("发送完成!\r\n");}
}
// 发送串口数据
void SendData(BYTE dat)
{SBUF = dat;while(TI == 0);TI = 0;
}
// 发送字符串
void SendString(char *s)
{while (*s)                  //检测字符串结束标志{SendData(*s++);         //发送当前字符}
}

这个实验就是把接受到的数据+1,再发送出去。

7.STC15W408AS单片机串口通信相关推荐

  1. 基于PC与单片机串口通信的温度监控系统程序设计

    基于PC与单片机串口通信的温度监控系统程序设计 1.系统介绍 1)本系统主要讲解基于PC与单片机串口通信的温度监控系统程序设计(如图1),上位机采用常用的PC机,下位机使用的是STC89C52单片机, ...

  2. 51单片机-串口通信

    目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部 ...

  3. 蓝桥杯单片机串口通信学习提升笔记

    今日得以继续蓝桥杯国赛备赛之旅: 有道是 "不知何事萦怀抱,醒也无聊,醉也无聊,梦也何曾到谢桥." 那我们该如何 让这位诗人纳兰 "再听乐府曲 ,畅解相思苦"呢 ...

  4. 51单片机串口通信模板_深入理解51单片机串口通信及通信实例

    串口通信的原理 串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...

  5. 普中单片机--串口通信(2)---通过串口助手发送数据点LED

    普中单片机–串口通信(2) 通过串口助手发送数据 点亮LED 软件部分 #include <reg52.h> #define jingzhen 12000000UL /*使用12.0M晶体 ...

  6. 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码

    目录 1. 串口通信原理 2. 51单片机串口通信 2.1 串口简要模式图 2.2 相关寄存器 (1)PCON.SCON.SBUF (2)IE.IPH.IP (3)配置T1定时器 2.3 波特率和系统 ...

  7. 51单片机串口通信模板_51单片机串口通信

    51 单片机串口通信 51 单片机串口通信(转载) 2009-03-03 18:22 一.串口通信原理 串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计 算机端,而且也能实现计算机对单 ...

  8. 51单片机~串口通信(讲解+代码)

    51单片机~串口通信 (一)计算机串行通信原理: 综上:所以在设置的时候,经常将SCON设置为0X50==0101 0000 ,使用方式1. (二)工作: 中断控制 led灯,每发送一条指令灯亮或灭( ...

  9. STC15W408AS单片机串口切换与下载问题

    STC15W408AS单片机串口切换与下载问题 STC15W408AS这款单片机支持串口的引脚切换功能.但是在配置过程中,发现从默认引脚P3.0和P3.1切换到P3.6和P3.7切换不成功. 官方推荐 ...

  10. stc12串口收发计算机,半双工串口通信实例36:STC12单片机和STC12单片机串口通信...

    半双工串口通信实例36:STC12单片机和STC12单片机串口通信 一.串口通信实例目的: STC12单片机主站数字量输入DI01~DI08控制STC12单片机从站数字量输出DO01~DO08: ST ...

最新文章

  1. 个人代码库の设置窗体效果AnimateWindow
  2. ORACLE安装请注意事项
  3. 预热您的JVM –超快速生产服务器和IDE
  4. java kryo register_java相关:Kryo框架使用方法代码示例
  5. jupyter 功能插件
  6. JavaScript可变参数个数
  7. windows 2003 英文版支持中文显示、中文输入的设置方法
  8. ASP.NET 3.5 开发大全DOC版
  9. 学习是一件很辛苦的事,全世界都一样!
  10. 骑士问题-BFS求解
  11. 企业微信审批功能有哪些?审批人如何设置?
  12. java中的迭代是什么意思_JAVA里的 迭代 具体是指什么意思
  13. 字节跳动全员降薪17%,员工都「炸锅了」
  14. 怎么计算两个日期之间的差值
  15. ios swiftui_ios swiftui中的本地化
  16. 纯手工打war包方法
  17. java namevaluepair_NameValuePair方式传参数实例教程
  18. iOS 蓝牙 Corebluetooth
  19. IPv6、雪人计划与中国互联网安全
  20. 知识变现必须破除的八个认知误区

热门文章

  1. AcrelCloud-6800智慧消防管理云平台在学校的应用
  2. 九月十月百度,迅雷,华为,阿里巴巴笔试面试六十题(第411~470题)
  3. vue分享至qq空间,新浪微博,微信朋友圈及微信好友
  4. 什么是spurious wakeups(虚假唤醒)
  5. uni-app创建并运行微信小程序项目
  6. Qt使用flowlayout,使控件两端间距始终固定,垂直和水平间距相等
  7. 视差角计算公式及其推导
  8. 陈华钧等 | OpenKG区块链:构建可信开放的联邦知识图谱平台
  9. python def是什么意思-python里面def是什么意思
  10. java不想被gc,Java GC 必知必会