【单片机原理及其应用】第三章IO口的定义与使用

在学习IO口之前,首先来复习一下之前学习的PIC16F887系列的封装图
封装

第一节:IO口的基本知识介绍

数据方向控制器—TRISX

IO口就是input/output口,用于单片机连接外部电路或者外部电路连接单片机
887有35个O口36个I口
其中端口的分类有四种,分别为A,B,C,D。A,B,C,D口个8个引脚,E口四个引脚(RE3口只能输入不能输出)
由于存在每个端口进行输入输出复用(既可以作为输入口也可以作为输出口),所以在使用这些端口之前需要对端口的方向进行定义(简单来说就是控制这个端口在工作的时候是作为输出端口还是输入端口)。控制这些端口方向的“管理员”我们称为:数据方向控制寄存器 记作TRISx,分别有TRISA,TRISB,TRISC,TRISD,TRISE。控制各个端口的输入输出定义。
其中0是输出,1是输入。0是不是很像output,1是不是很像input。
所有的控制端口寄存器上电复位默认值全部为1,即输入口。

// PIC16F887 Configuration Bit Settings

// 'C' source line config statements

// CONFIG1
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = OFF      // Brown Out Reset Selection bits (BOR disabled)
#pragma config IESO = OFF       // Internal External Switchover bit (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)
#pragma config LVP = OFF        // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming)

// CONFIG2
#pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
#pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
 
#include <xc.h>
void main(void) {
    TRISA=0B00000001;//0b表示二进制。后面的表示端口的输入输出选择。从右边往左边,分别是RA0,RA1,RA2,RA3,RA4,RA5,RA6,RA7.
    TRISB=0B00000010;//表示RB1是输入,其他均为输出
    TRISC=0B00000100;
    TRISD=0B00001000;
    TRISE=0B0101;
    return;
}

注意
每个IO引脚最大的输出电流(拉电流)为25mA,最大输入电流(灌电流)也为25mA;
每个端口组合的最大输出电流和输入电流为90mA;
在写端口的时候要注意写和读同一个端口不能连续操作;
(因为单片机对I/O口的操作实际上是对I/O进行“读-修改-写”的过程,在指令周期的开头读取,修改,在指令周期的末尾写入锁存器。如果连续性写读会导致,电平还未稳定,读出来的和写进去的不一样。通常在中间加一个NOP()指令,使其休息一段时间)
PPT中的神奇的超低功耗唤醒
通过将PCON 寄存器中的ULPWUE 位置1 选择此模式。这将产生一个小的灌电流,可用于将RA0 上的电容放电。当RA0 上的电压下降到VIL (低电平,0.8V左右)以下时,将产生中断使器件唤醒并执行下一条指令。如果INTCON 寄存器中的GIE位置1,器件将调用中断向量( 0004h)
超低功耗唤醒功能执行步骤

模拟口与数字口的选择—ANSEL和ANSELH

在这里插入图片描述
ANSEL和ANSELH都是对端口输入信号类型的选择。AN就是模拟的意思,SEL就是设置的意思,H表示高位的设置。
寄存器介绍
特别要注意:
AN0—RA0
AN1—RA1
AN2—RA2
AN3—RA3
AN4—RA5
AN5—RE0
AN6—RE1
AN7—RE2
AN8/9/10/11/12/13对应RB(查表)
表格
注意:在上电复位时,与AN有关的端口的默认设置是模拟口
在书写程序的时候如果要使用到输出输入端口就要注意对输出输入端口进行初始化定义,即定义好是模拟量输入还是数字量输入,是作为输入口还是作为输出口,是具有弱上拉功能还是直接外部再接一个上拉电阻。

弱上拉

弱上拉功能
在这里插入图片描述
这里一定要注意,如果要弱上拉就一定要对OPTION_REG的第七位进行初始化。
在这里插入图片描述

电平中断设置

电平中断
中断功能设置

其他几个端口的用途(非重点)

在这里插入图片描述
作业:
程序

在这里插入代码片
  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值