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

一、GPIO1.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 __endasmINPUT = 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寄存器bitB7B6B5B4B3B2B1B0nameSM0/FESM1SM2RENTB8RB8TIRISM0&SM1指定串口工作模式、SM2为多机通信控制位、REN为接收允许位、TB8和RB8为要发送的第9位数据、TI和RI为收发中断。SM0、SM1:SM0在PCON.6位为1时,做错误检测只用,这点在PCON叙述。当PCON.6位为0时,两个寄存器共同指定串口工作模式。SM0SM1工作模式说明波特率00方式0同步移位串行方式SYSClock/1201方式18位uart,波特率可变(2^SMOD/32)*(TIMER1溢出率)10方式29位uart(2^SMOD/64)* SYSClock11方式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寄存器bitB7B6B5B4B3B2B1B0nameSMODSMOD0SMOD: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_UARTvoid uart_init(void){/* enable receive */#ifdef UART_RENREN = 1;#endif/* set uart mode */PCON = PCON | SMOD;#ifdef UART_MODE_0SM0 = 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

(0)

相关推荐

  • ESP32 DEVKILTv1(devkitv1)开发板全解析!!!(搭载芯片为ESP32D0WDQ6)

    少年听雨歌楼上,红烛昏罗帐.壮年听雨客舟中,江阔云低,断雁叫西风.而今听雨僧庐下,鬓已星星也.悲欢离合总无情,一任阶前,点滴到天明. 虞美人.听雨(宋.蒋捷) 在写之前突然下雨了,不自觉的就想起这个诗 ...

  • 增强型51和传统51单片机外设操作的区别

    文/Edward 前面的内容,我们从传统的51单片机出发,从硬件的基础上,一步步衍生出了增强型51单片机所增强的地方.现在我们可以清楚地了解,增强型51单片机对比传统的51单片机,增强的地方在于存储器 ...

  • 增强型51单片机扩展方式

    文/Edward 大家是否思考过一个问题,为什么现在的51单片机在做宣传的时候,不外乎都是称作为"增强型51单片机"?与传统的51单片机相比,究竟哪些地方得到了扩展? 在回答这个问 ...

  • 一天入门51单片机

    本套教程共3节课程,熟悉这3节课程的话,你已经入门51单片机了. 下面是内容正文 单片机学习的第一步,什么是单片机最小系统? 我来打个比喻吧. 我们都知道,人的大脑是可以控制眼耳口鼻,手脚,全身等等, ...

  • 51单片机的存储空间梳理

    文/Edward我们在学习传统的MCS-51单片机的时候,一定学习过51单片机的存储结构.传统的MCS-51存储器有三个空间,分别是片内RAM(内部数据存储器).片外RAM(外部扩展的数据存储器) 和 ...

  • 单片机“朝花夕拾”系列——乐创增强型51单片机讲义序

    本来想的是认认真真地做一部ARM内核的MCU教程和文档,这个入口最好的芯片切入口就是STM32.然而最不凑巧的是,现在STM32无论哪一个型号都是一"芯"难求.以至于我Layout ...

  • 如何看待增强型51单片机?

    文 / Edward  1  辩证地看待51内核单片机 要回答这个问题,首先需要来看一下传统的51单片机.在有些文章或者书本中,对于51单片机的态度是全面否定的,一旦听到某人要学习或者使用51单片机, ...

  • 51单片机 4个独立按键控制LED灯 (protues仿真)(C语言版)

    一.思路及相关问题 1.逻辑思路: 当按下key1时 led1亮起来 因为按下去具有瞬时性不用while,用if语句,当松开时,用while(!key1) ,函数调用. 先在脑海里想象它的大致运行过程 ...

  • 在51单片机上跑RTOS有没有意义?

    最近看见我的一个技术交流群在讨论一个问题:在51单片机上跑RTOS有没有意义? 今天就来围绕51和RTOS展开讲讲. 1关于51单片机及性能和资源 51单片机可以说是我们这一代人的经典,因为它资源不是 ...

  • 51单片机+DAC0832的信号发生器Proteus仿真设计(附仿真文件+Word文档+C程序

    设计要求: 1.输出4种波形:方波.锯齿波.三角波.正弦波: 2.幅值可调节范围为2V-10V: 3.频率可调节范围为20Hz-80Hz: 设计思路: 通过Keil平台下的C语言编程,单片机控制输出的 ...