【蓝桥杯单片机组】(6)uart

发布者:码字奇才最新更新时间:2020-07-18 来源: eefocus关键字:蓝桥杯  单片机  uart 手机看文章 扫描二维码
随时随地手机看文章

(1)波特率的概念:1bps = 1 bit/s


(2)板载资源有两个串口,仅UART1可以通过USB连接电脑


(3)四种方式波特率计算公式:(fosc:晶振频率 )


方式1:baud = fosc / 12;


方式2:baud = (2^smod / 32) * (T1溢出率)


方式3:baud = (2^smod / 64) * fosc


方式4:baud = (2^smod / 32) * (T1溢出率)


(4)SMOD的设定位于PCON(电源管理寄存器中)PCON_D7


SMOD = 1 波特率加倍PCON &= 0x7f


SMOD = 0  波特率不变 PCON |= 0x80


(5)T1溢出率为T1定时器溢出的频率,即:T1溢出一次所需要的时间的倒数 


溢出率 = 1 / ( N * (12 / fosc))


(6)使用T1做时钟源的时候应当使用方式2,以避免重装计时器初值带来的时延,否则会产生累积误差。


(7)计算计数器初值方法(方式1):


设初值为x, T1 = (256 - x) * ( 12 / fosc)


baud = ( 2 ^ SMOD) / 32 * T1


需要使用的寄存器:SCON 串行口寄存器(可位寻址)


SCON D7 D6 D5 D4 D3 D2 D1 D0

  SM0 SM1 SM2 REN TB8 RB8 TI RI



SM0/SM1: 工作方式选择位


SM0 SM1 方式 功能说明

0 0 0 同步移位寄存器方式(用于拓展I/O口)

0 1 1 10位异步收发(1开始位,8位数据,1停止位)波特率可变(T1控制)

1 0 2 11位异步收发(9位数据)波特率固定

1 1 3 11位异步收发(9位数据)波特率可变(T1控制)


一般使用方式1


SM2: 多机通信控制位,SM2 = 1:收到的RB8(第9位数据)进入SBUF,并激活RI,引起中断


SM2 = 0:收到的RB8被丢弃


REN: 接收使能


TB8 / RB8:发送、接收到的第9位数据


TI :发送结束标志(在发送最后一位停止位开始时TI硬件置1,需要手动清零)


RI:接收中断标志(在接受到最后一位停止位中间,RI硬件置1,需要手动清零)




编程步骤:


(1)设定T1工作方式(方式2)


(2)为TH1 TL1装初值,开计数器


(3)为串口设定所使用的时钟源


sfr AUXR  = 0x8e;

AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T

AUXR &= 0xFE; //串口1选择定时器1为波特率发生器


(4)设定SCON工作方式(主要:SM0 SM1 REN)


(5)开中断(总中断与串口中断)


P.S:善于使用STC - ISP中自带的波特率计算器




发送函数:


(1)送字符入SBUF


(2)等待TI变为1(while( ! TI ); )


(3)清零TI


接收中断:


(1)清零RI


(2)收SBUF中的数据




自己写的分片代码初始化:


void t1_init()

{

TMOD = 0x20; //M1 = 1; M0 = 0

TH1 = 0xfd;

TL1 = 0xfd;

EA = 1;

TR1 = 1 ;

}

 

void uart_init()

{

AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T

AUXR &= 0xFE; //串口1选择定时器1为波特率发生器

 

SM0 = 0;

SM1 = 1; //方式1

REN = 1; //RECEIVE INTERRUPT

 

ES = 1; //uart interrupt

EA = 1;

}



STC - ISP计算的初始化代码:

void UartInit(void) //9600bps@11.0592MHz

{

PCON &= 0x7F; //波特率不倍速

SCON = 0x50; //8位数据,可变波特率

AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T

AUXR &= 0xFE; //串口1选择定时器1为波特率发生器

TMOD &= 0x0F; //清除定时器1模式位

TMOD |= 0x20; //设定定时器1为8位自动重装方式

TL1 = 0xFD; //设定定时初值

TH1 = 0xFD; //设定定时器重装值

ET1 = 0; //禁止定时器1中断

TR1 = 1; //启动定时器1

}


发送函数:

void trans_char(char t)

{

SBUF = t;

while(!TI);

TI = 0;

}

 

void trans_str(char t[])

{

char *p;

p = t;

while(*p != '')

{

trans_char(*p);

p++;

}

}


中断:

void uart_isr() interrupt 4

{

 

RI = 0;

rechar = SBUF;

trans_char(rechar);   //验证

 

}


P.S:在开发板上需要讲J13跳线至MM

关键字:蓝桥杯  单片机  uart 引用地址:【蓝桥杯单片机组】(6)uart

上一篇:【蓝桥杯单片机组】(4)Timer0/1 定时器
下一篇:STM8 模拟功耗控制

推荐阅读最新更新时间:2024-11-03 13:33

51单片机实现单键重复按键检测
/***************************************************************************** Copyright: 2013-07-27.version1.0 File name: key.c Description: 自己做的单键识别实现重复按键功能 Author: Version: version1.0 Date: 2013.7.27 History: 无 *******************************************************/ #include reg51.h sbit key=P0^0; int num=0; /**
[单片机]
STC单片机串口发送数据汇编程序
本段程序是在STC官方程序的基础上精简而成,只保留了串口单向发送,使用串口助手可以接收到数据。 本段代代码目的是为了调试的方便,单片机内部一些工作状态和数据可以通过串口发送出来,比如AD采集到的数据等,对调试程序会起到事半功倍的效果。以下为asm格式汇编代码: ; --- 使用伟福6000编译,STC15W401AS 实测通过------------ ;-----定时器2用作串口1的波特率发生器------- ;在Keil开发环境下请选择Intel的8058芯片型号进行编译 ;工作频率为11.0592MHz ;----------------------------------------- AUXR EQU 08EH
[单片机]
学习笔记 从零开始学单片机(9) 串口通信
串口通信是单片机一个重要的部分,单片机和PC,单片机和单片机之间的通信大都用串口。单片机的串口是全双工异步串口通信方式。通过TXD(P3.1)发送,RXD(P3.0)引脚接收输入。串口传送数据是一帧一帧发送的,它有四种工作方式,同时也可以做并行I/O的扩展。 图上是串口的结构图。 SBUF是数据缓冲寄存器,发送和接收用的是一个地址,但是不用担心冲突,读只能从接收缓冲区,写只能在发送缓冲区里。 寄存器SCON(SM0 SM1 SM2 REN TB8 RB8 TI RI) SM0和SM1: 工作方式选择(0-3),方式1和方式3使用T1产生波特率,方式0和方式2是固定速率。 SM2 :在方式2和方式3的多级通信控制
[单片机]
学习笔记 从零开始学<font color='red'>单片机</font>(9) 串口通信
以16位单片机实现信息家电连接internet
  0引言   随着网络时代的到来,internet已成为重要的基础信息设施,这方面的技术进步对于社会的各个方面产生了积极影响,很多领域都在不断探索开发和利用网络资源。从目前的情况看,大部分接入方式仍以PC作为网关来连接,然而这种情况一般用于大型工业集散控制系统,如果用于一般的信息家电接入而额外增加一台,必然会给产品带来高昂的成本,从产品的经济实用方面来看并不切实可行。用嵌入式设备将信息家电接入的方式则很好地解决了这一问题。所谓嵌入式设备一般是由嵌入式微处理器、外围设备、特定的网络协议以及应用程序等各部分组成,用于实现对信息家电的远程控制、监视和管理功能,它代替了传统的PC机或网关设备,在数据量不大的情况下能够符合要求,具有可靠
[单片机]
51单片机长按键测试程序
#include reg52.h #include stdio.h /* 程序功能: 本程序用于测试4X4矩阵键盘; 且具有长按测能力. 当按下按键后,在LCD1602上显示出按下的键号如:K1 K2.... K16; 当按下一个按键 超过1S时间时,每250MS就返回一个键值;实现长按键的功能; 同时把键值通过串口发送到口上显示; 程序说明:这是一种传通的采用延时来进行按键扫描按键驱动与测试程序;这种方法在 实际项目编程中是不使用的。 用在教学中 ,学生刚开始学习单片机时。 注意:在此程序中只显示了K4长按凳时情况。若要想对其它铵键长按处理,只需要增加 相关的
[单片机]
51单片机查表指令的用法
51单片机具有两条查表指令,用于从 ROM 中读出预存的数据: MOVC A, @A + PC MOVC A, @A + DPTR 其中前一条指令的用法,比较难,使用的时候,需要计算一个“偏移量”。不了解“指令的字节数”的人,都不清楚应该如何计算。 最佳答案: 51单片机汇编语言有一条查表指令是: MOVC A, @A + DPTR 它不是单独使用的,要和 DB 伪指令配套使用。 例如:若累加器A中有一个0~9的数,请用查表法求出该数的平方值,设平方表表头地址为1000H。 程序如下: ;------------------------------------- MOV DPTR, #1000H MOVC
[单片机]
关于单片机按键的抖动与消抖
在单片机的程序中,如果涉及到按键,一般都会看到几行注释着 消抖 的代码。 比如下面这一段: if((KeyV|0xc3)==0xff){//无键按下 return 0; } mDelay(10);//延时,去键抖 KeyV=P3; if((KeyV|0xc3)==0xff){//无键按下 return 0; } 关于其作用与目的,有如下解释: 按键在按下时会产生电平的变化,通常是由高电平变为低电平,而且这一过程也不是瞬间完成的,按键按下之后,电平会有一段不稳定变化的时间。一般情况下,我们的程序读取这个电平变化并做相关的动作。但由于机械按键的局限性,
[单片机]
关于<font color='red'>单片机</font>按键的抖动与消抖
深入解析汽车MCU的软件架构
电动汽车(EV)正在成为首选的交通方式,为传统内燃机汽车提供了一种可持续发展的环保型替代方案。在电动汽车复杂的生态系统中,众多电子控制单元(ECU)在确保其高效运行方面发挥着至关重要的作用。电机控制单元(MCU)就是这样一个 ECU,它是电机性能背后的大脑。在这篇综合文章中,我们将探索电机控制单元的世界,研究它们的功能、组件以及影响汽车 MCU 领域的最新趋势。 了解电动汽车使用的电机 在深入研究电动汽车电机控制单元的复杂性之前,有必要了解电动汽车常用的各种电机类型。最常见的两种类型是无刷直流(BLDC)电机和永磁同步(PMS)电机。 无刷直流电机又称电子换向电机,无需电刷和换向器,从而提高了效率,减少了维护。从本质上讲,它的
[嵌入式]
深入解析汽车<font color='red'>MCU</font>的软件架构
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved