51单片机(二)—— GPIO&Uart

发布者:徽宗古泉最新更新时间:2018-05-01 来源: eefocus关键字:51单片机  GPIO&Uart 手机看文章 扫描二维码
随时随地手机看文章

一、GPIO

1.1 内部上拉电路

51单片机的I/O口都可以同时作为输入和输出之用。除了P0口以外,其他的I/O口都有内部上拉电阻。

3个内部上拉电阻都有不同的功用,要理解这个电路需要一定的模拟电路的知识。

内部上拉电阻示意图 

由于相关的硬件配置,在编程时有以下需要注意的地方:

  • 当I/O口被用作输入用途时,读取输入前要保证锁存器状态为1。

  • 当将I/O口由低拉高时,指令执行后需要1~2个机器周期才能使实际的输出变成高电平。

在外围电路上需要注意的地方:

  • P0口做普通I/O使用时,要加上拉电路,因为其没有内部上拉。

  • 为防止电流过大,必要时外加限流电阻。

1.2 编程示例

51单片机的I/O口在使用时,并不需要对其进行初始化。

可以直接位寻址读/写单个GPIO状态,也可以直接访问sfr来读/写一组GPIO的状态。

/* byte */

unsigned char temp; 

P0 = 0xff;

temp = P0;


/* bit */

P0_1 = 1;

}

假设需要读取一个I/O口的输入状态,而该I/O口目前被锁存为0,则需要先将锁存器置1,再延时2个时钟周期。

#define INPUT P2_6

#define NOP __asm nop __endasm


INPUT = 1;

NOP;

if (INPUT == 0) {

....

}


二、串口

2.1 串口概要

  • 51单片机有一个内部集成的全双工串口。

  • 引脚为P3.0(Rx)和P3.1(Tx)。

  • 波特率由定时器产生。

  • 发送缓冲器和接收缓冲器共用一个地址(99H),发送缓冲器只写,接收缓冲器只读。

2.2 相关寄存器

与串口直接相关的寄存器如下(从sdcc头文件<8051.h>中拷贝):

#ifndef REG8051_H

#define REG8051_H


/* sfr */

__sfr __at (0x98) SCON ;

__sfr __at (0x99) SBUF ;

__sfr __at (0x87) PCON ;


/*  SCON  */

__sbit __at (0x98) RI   ;

__sbit __at (0x99) TI   ;

__sbit __at (0x9A) RB8  ;

__sbit __at (0x9B) TB8  ;

__sbit __at (0x9C) REN  ;

__sbit __at (0x9D) SM2  ;

__sbit __at (0x9E) SM1  ;

__sbit __at (0x9F) SM0  ;


/* BIT definitions for bits that are not directly accessible */

/* PCON bits */

#define IDL             0x01

#define PD              0x02

#define GF0             0x04

#define GF1             0x08

#define SMOD            0x80


在头文件里也描述得很清楚,PCON寄存器不允许位寻址。

2.3 SCON寄存器

bitB7B6B5B4B3B2B1B0
nameSM0/FESM1SM2RENTB8RB8TIRI

SM0&SM1指定串口工作模式、SM2为多机通信控制位、REN为接收允许位、TB8和RB8为要发送的第9位数据、TI和RI为收发中断。

SM0、SM1: 
SM0在PCON.6位为1时,做错误检测只用,这点在PCON叙述。当PCON.6位为0时,两个寄存器共同指定串口工作模式。

SM0SM1工作模式说明波特率
00方式0同步移位串行方式SYSClock/12
01方式18位uart,波特率可变(2^SMOD/32)*(TIMER1溢出率)
10方式29位uart(2^SMOD/64)* SYSClock
11方式39位uart,波特率可变(2^SMOD/32)*(TIMER1溢出率)

方式0用于外扩I/O,串转并等需要快速响应I/O跳变的场合。

方式1采用8位传输。

方式2和方式3采用9位传输,第九位通常被用来当做校验位,或者多机通信中的地址位。方式2和方式3的区别主要是波特率产生方式不同。

SM2: 
多机通信控制位,开启后,从机只有接收到RB8为1,才开始响应串口中断。51单片机还提供两个从机地址寄存器来支持多机通信的硬件自动化控制。

REN: 
REN位为接收允许位,只有该位置1,才允许从串口接收数据。

TB8: 
该位是在方式2和方式3下要发送的第9位,需要由软件置位或者清0。比如在进行奇偶校验时,自己用软件计算出该字节的奇偶,然后写该位。

或者在多机通信时,假设在总线上接了一群从机。主机在发送数据时,先发送1帧地址帧并将该位置1。这样所有收到地址帧的从机都开始判断是否是与自己匹配的地址,而只是判断是自身地址的从机才会处理后续数据。

RB8: 
该位是在方式2和方式3下接受到的第9位。而在方式1中,该位是接收到的停止位。

TI、RI: 
接收和发送中断位。

注意:

  • 两者共用一个系统中断,进入中断后,要自行判断是TI还是RI引发的中断。

  • 需要软件清0,否则会重复进入中断。

2.4 PCON寄存器

bitB7B6B5B4B3B2B1B0
nameSMODSMOD0





SMOD: 
SMOD为1时,波特率加倍,参考上面的公式。

SMOD0: 
SMOD0为0时,SCON里的M0和M1共同指定串口工作方式。SMOD0为1时,M0作为帧错误检测使用。

2.5 SBUF寄存器

SBUF寄存器是收发缓冲器,当发送和接受收,缓冲器里存的事收发的8位数据。如果在方式2和方式3,收发的第9位数据在SCON中的RB8和TB8中保存。

虽然收发共用一个sfr的地址,但实际上是两个不同的存储区域,可以独立使用。

2.6 编程示例

不考虑波特率的设置、中断、多机通信,uart的初始代码可以这么写。

#include <8051.h>


#define USE_UART

#define UART_MODE_1

#define UART_REN


#ifdef USE_UART


void uart_init(void)

{


/* enable receive */

#ifdef UART_REN

    REN = 1;

#endif


/* set uart mode */

    PCON = PCON | SMOD;

#ifdef UART_MODE_0

    SM0 = 0;

    SM1 = 0;


#elif defined(UART_MODE_1)

    SM0 = 0;

    SM1 = 1;


#elif defined(UART_MODE_2)

    SM0 = 1;

    SM1 = 0;


#elif defined(UART_MODE_3)

    SM0 = 1;

    SM1 = 1;

#endif

}


#endif

关键字:51单片机  GPIO&Uart 引用地址:51单片机(二)—— GPIO&Uart

上一篇:51单片机(三)——定时器/计数器
下一篇:51单片机(一)——总览

推荐阅读最新更新时间:2024-03-16 16:01

STM32的GPIO输入编程实例之读取按键状态
一、概述 1、按键简介 按键是一种机械器件,按键两端分别对应某电路的两个断点,我们可以通过按键接通和断开控制该电路的电压等参数,我们利用按键做的应用通常有控制继电器、键盘、复位等。随着应用的扩展,按键已成为电路板上不可或缺的一部分。 2、按键类别简介 按键主要有四种类型:常开带复位、常开不带复位、常闭带复位、常闭不带复位。(本次实验使用的是常开带复位按键) 按键主要有以下4种工作模式: 常开带复位:初始默认状态是开路,当受力按下时按键使电路连通,受力结束后其自动返回开路状态。 常开带不复位:初始默认状态是开路,每按下一次按键改变一次开闭状态。 常闭带复位:初始默认状态是连通,当受力按下时按键使电路开路,受力结束后其自动返回
[单片机]
51单片机闪烁灯制作
简介:51单片机闪烁灯制作:在单片机P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭形成闪烁灯状态,一亮一灭的时间间隔为0.2秒。 1.电路原理图 图4.1.1 2.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 3.程序设计内容 (1). 延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理: 如图4.1.1所示的石英晶体为12MH
[单片机]
<font color='red'>51单片机</font>闪烁灯制作
MSP432--GPIO IAR环境
GPIO 1.特点:众多的独立可编程I/O口 任意端口的输入输出组合 中断 独立的输入输出寄存器 独立可配置的上拉下拉寄存器 2.分布:总共有P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 PJ P1-P10共78个I/O,PJ有6个I/O P1.0,P1.4,P1.5,P3.0,P3.4,P3.5,P6.6,P6.7自带硬件滤波,消抖 P1.2-- BSLRXD P1.3-- BSLTXD SPI引脚:P1.4-- BSLSTE P1.5-- BSLCLK P1.6-- BSLSIMO P1.7-- BSLSOMI IIC引脚:P3.6-- BSLSDA P3.7-- BSLSCL 总共100引脚 ZXH封装
[单片机]
51单片机外围模块——蜂鸣器
蜂鸣器简介 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。 接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。 多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。 改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。 改变输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。
[单片机]
<font color='red'>51单片机</font>外围模块——蜂鸣器
39-基于51单片机的热敏电阻测温设计
1、设计需求及目标 具有温度上下限范围,并可以手动调整; 初始化后显示温度信息与上下限信息; 模数转换芯片使用分辨率10位以上A/D芯片; 采用液晶显示; 2、设计思路及方案 本设计以51系列单片机STC89C52为控制核心,以液晶显示模块、键盘为人机接口,负温度系数热敏电阻器(NTC)为采样传感器,实现了一个基于51单片机的热敏电阻测温设计。
[单片机]
39-基于<font color='red'>51单片机</font>的热敏电阻测温设计
51单片机霍尔自行车码表测速里程表
#include reg52.h //调用单片机头文件 #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535 sbit clk = P1^3; //ds1302时钟线定义 sbit io = P1^4; //数据线 sbit rst = P1^5; //复位线 //秒 分 时 日 月 年 星期 uchar code write_add ={0x80,0x8
[单片机]
<font color='red'>51单片机</font>霍尔自行车码表测速里程表
解读51单片机LED系统电路设计方案
简介:旋转LED 显示器是一种通过同步控制发光二极位置和点亮状态来实现图文显示的新型显示器,其结构新颖,成本低廉,可视角度达360°。 LED 旋转显示器时基于视觉暂留原理,开发的一种旋转式LED 显示屏。其在具有一定转速地载体上安装16 个LED 发光器件,各LED 发光管等间距排位一条直线,随着旋转速度的加快,在计算机软件精确的时序控制下,不断扫描出预设的文字,图案等。使用一个光耦(U 型槽的红外对管)作为定位传感器,当旋转一周时,挡光板遮挡光源,光敏三极管的集电极输出高电平,当离开挡光板时,集电极再次输出低电平,从而给单片机一个下降沿的跳变型号,产生一个中断,从而更新显示。供电部分,因为整个装置是在不停的高速旋转当中,所
[单片机]
解读<font color='red'>51单片机</font>LED系统电路设计方案
基于51单片机的嵌入式多媒体播放器的设计与实现
  1、引言   随着音频解码技术、存储器技术、MP3高质量压缩技术等相关技术不断的发展以及人们对消费电子产品需求的增加,MP3新产品层出不穷,成为时尚潮流前沿的一个最佳载体。人们可以用它休闲娱乐 ,也可以用它工作和学习。设计一款性价比优良的MP3 播放器具有实际的应用价值 。随着 C语言的发展和嵌入式系统技术的推广 ,在嵌入式系统低端应用中 ,存在着大量的小型嵌入式应用系统。MP3 播放器的设计 ,就是典型的嵌入式系统应用。MP3具有最基本的播放、选曲、音量控制、音效控制功能。当连接到计算机的 USB接口时,MP3变成 U盘,可以向 U盘复制文件,文件包括 MP3歌曲文件和普通文件 。系统的功能结构图如图 1所示: 
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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