1.引言:

PIC单片机引脚图:
在PIC16F87X 单片机中,28引脚型号的单片机有3 个I/O端口,分别是RA、RB和RC;40引脚型号单片机有5个 I/O端口,分别是RA、RB、RC、RD和RE。其中RA有6条口线,RE有3条口线,其余都有 8条口线
PIC16F87X端口口线既可作普通I/O引脚,又可作某些部件或外围模块的外接引脚,比如端口引脚RC.4既可用作普通I/O脚,又可以作为SPI串行通信的数据输入引脚。这里只介绍端口的基本功能和基本用法,端口的其他复合功能,在以后介绍。

2.与输入/输出端口相关的2个寄存器

PIC单片机中各个I/O端口都具备两个基本的专用寄存器:端口数据寄存器端口方向寄存器。如下所示。      
这些寄存器在RAM中都有统一的编址,即PIC单片机的端口都可以当作RAM单元来访问,无需专门的指令访问。

3.输入/输出端口的基本结构

PIC16F87X的3/5个端口不但结构上存在差异,而且同一端口的各口线的内部结构也略有差别,但是他们的基本结构模型,如下图所示。
图中有三个D触发器(也称为锁存器)。
其中Data Latch代表了端口数据寄存器,例如PORTA、PORTB、PORTC;
TRIS Latch端口方向寄存器,例如TRISA、TRISB、TRISC;而Input Latch是端口设置为输入时作为缓冲器。

3.1 基本输入/输出端口的工作原理

下面对端口口线进行的基本操作说明如下:
⒈写I/O方向寄存器TRIS Latch
 当方向寄存器中的内容为1时,则对应口线被设置为输入(Input);当其内容为0时,则对应引脚设置为输出(Output)。
 ⒉ 经端口引脚输出数据
   要把端口口线作为输出,必须要把该口线预先设定为输出态,即相应的TRIS Latch的内容必须为0。
⒊从端口引脚输入数据
  要把端口口线作为输入,必须要把该口线预先设定为输出态,即相应的TRIS Latch的内容必须为1。

3.2输入/输出端口基本功能的应用举例

下面的实例是单键触发8位二进制累加计数器,是针对端口功能和ICD在线调试器上的硬件为基础而设计的。该实例中要用到的硬件电路如下图所示。

图中端口RC外接8条支路,这8条支路构成了端口RC的输出电路,其中8只电阻起限流作用,保护端口引脚和发光二极管LED;LED在高电平时发光。图中还使用了端口RB的RB0口线作为外接输入引脚。电阻R4为限流电阻,对RB0引脚起保护作用;电阻R21为上拉电阻,将RB0电平拉高;开关SW1用来人工输入低电平脉冲信号。

程序设计思路
刚接通电源时,8只发光二极管都不亮,表示计数器初始值为0。
按下开关SW1时,计数器值加l,D0点亮,表示二进制数00000001B,然后松开按钮;再次按下SW1时,计数器值又加1,D1点亮,表示二进制数00000010B,然后再松开按钮;依次类推。直到按了255次按钮时,D7~D0全部点亮,假如再次按动按钮将使计数器回0。如此循环往复。
设计按钮输入程序时,有一点需要注意,就是必须处理按钮在按下或松开时存在抖动现象,以免产生误判。按钮的去抖动一般都是调用延迟程序来消除抖动的。即在程序设计中,当查询到RB0上的首次电平变化后,马上延迟τ(例如10ms),待RB0上的状态稳定后,再次查询确认,果真是按键动作(按下或者松开),方认定为有效,否则,判为干扰脉冲。程序清单如下:
STATUS     EQU     03H
PORTB      EQU     06H
TRISB      EQU     86H
PORTC      EQU     07H
TRISC      EQU     87H
DATA1      EQU     20H          ; DATA1为延时变量
DATA2      EQU     21H          ; DATA2为延时变量
N1         EQU     D'13'        ;外层循环延时常数
N2         EQU     0FFH         ;内层循环延时常数
RP0        EQU      5H          ;体选位RP0
ORG        000H       BSF    STATUS, RP0         ;切换到RAM的体1MOVLW  00H                 ;将端口C设为输出MOVWF  TRISC       MOVLW  0FFH                ;将端口B设置为输入MOVWF  TRISB           BCF    STATUS, RP0         ;恢复到RAM的体0PORTC  EQU     07H    TRISC  EQU     87H     DATA1  EQU     20H         ; DATA1为延时变量DATA2  EQU     21H         ; DATA2为延时变量N1     EQU     D'13'       ;外层循环延时常数N2     EQU     0FFH        ;内层循环延时常数RP0    EQU      5H         ;体选位RP0
ORG      000H       BSF     STATUS, RP0        ;切换到RAM的体1MOVLW  00H                 ;将端口C设为输出MOVWF  TRISC       MOVLW  0FFH                ;将端口B设置为输入MOVWF  TRISB           BCF    STATUS, RP0         ;恢复到RAM的体0

汇编语言往往需要更多硬件知识,因此对于主攻软件或者有着良好C语言编程能力的人,我更像偏向于C编程。

以下是用C语言编写的程序
include <pic.h>
#define N1 13    //外循环
#define N2 0xff   //内循环
static volatile bit PORTB0 @(unsigned)&PORTB*8+0; //端口可变设计
int DATA1,DATA2;
main() {TRISC=0xff; //Input ???????  TRISC = 0x00;  //OutputTRISB=0xff; //InputPORTC=0;    //清零
check: if PORTB0==0 then goto check;  //监测是否有电平信号输入  有效电平信号1DELAY();  //延时去抖动if PORTB0==0 then goto check;//去抖动确定PORTC++; //C语言设计好处 立刻就凸显出来了
CHECK1 if  PORTB0==1  goto  CHECK1;  DELAY()if  PORTB0==1  goto  CHECK1;GOTO  check;while(1) {  };
}
void DELAY()
{DATA1=N1;      LP0: DATA2=N2;            LP1: if DATA2-- > 0 goto LP1;                 if DATA1-- > 0 goto LP0;return;}

PIC单片机入门_输入输出端口详解相关推荐

  1. PIC单片机入门_中断系统详解

    1.中断的基本概念 当单片机正在执行程序时,出现了某些特殊状况,例如定时时间到.有键盘信号输入等,此时CPU须要暂时停止当前的程序,而转去执行处理这些事件的程序,待执行完这些特定的程序之后,再返回到原 ...

  2. PIC单片机入门_定时器TMR2详解与实例

    1.前言 这里将介绍另一款定时器TMR2模块,TMR2与前面介绍的TMR0和TMR1相比,最大的差别是只能工作于定时模式,因此称它为"定时器TMR2".  2.TMR2的特性 TM ...

  3. PIC单片机入门_异步通讯模式详解

    1.USART用于异步通讯详解 1.1 USART的异步工作模式 在异步工作模式下, USART 采用的是标准非归零 ( NRZ编码格式 :一位起始位.8 位或 9 位数据位和一位停止位 ).最常用的 ...

  4. PIC单片机入门_定时器/计数器TMR0详解与实例

    1.前言: PIC 系列单片机内部配备有数量不等的定时器/计数器模块:例如PIC17CX系列和PIC18CX系列都都配置了4个定时器/计数器模块:而PIC16F87X系列都配置了3个定时器/计数器模块 ...

  5. PIC单片机入门_同步/异步通信技术基础

    1.前言 通用同步 / 异步收发器 (Universal Synchronous/Asynchronous Receiver/Transmitter, USART) 模块是两个串行 I/O 模块之一 ...

  6. PIC单片机入门_指令系统

    1.前文回顾 前面学习了PIC单片机的系统框架,也介绍了程序存储器.数据存储器的组织形式.这里需要补充一点的就是寻址方式,之前仅仅提到了立即数寻址.直接寻址.其实还有几个比较重要的寻址方式,PC相对寻 ...

  7. PIC单片机入门_框架与存储器

    1.PIC16F877A单片机框架 1.1 为何性能如此之高? PIC单片机之所以有很高的性能是因为其具备如下特性: 内部为哈佛结构.寄存器文档.大多数单指令周期.指令流水线操作.长字型指令.指令数很 ...

  8. PIC单片机入门_汇编/混编/C编比较

    1.问题描述: 对RAM中从30h开始的50个单元清零. 2.汇编方法 <span style="font-size:18px;">COUNT EQU 20H ;指定2 ...

  9. 单片机c语言常用的语句有几条,单片机C语言常用语句详解

    <单片机C语言常用语句详解>由会员分享,可在线阅读,更多相关<单片机C语言常用语句详解(22页珍藏版)>请在人人文库网上搜索. 1.C51编程中常见语句的总结.首先,C51定义 ...

最新文章

  1. Hibernate中HQL函数汇总及其说明
  2. mongodb query
  3. mongodb 查询 mysql_MongoDB 基本查询使用
  4. Popupwin结合Timer实现定时弹出消息提示
  5. Addr、@运算符与Pointer类型
  6. 分区字段不在SQL过滤中,悲剧
  7. T 沙龙 2018 年 1 月上海第 10 次线下活动总结
  8. python 拼音性命按照姓出现的次数排序_Python按姓氏排序字典列表
  9. 考研政治|马克思主义基本原理
  10. 股票交易接口api的协议
  11. js 格式化prettier配置_Prettier 代码格式化插件 -- 配置翻译
  12. 本悟法师:信仰,让孤独走开
  13. 无线上外网,有线上内网的方式
  14. 苹果备忘录如何转移?备忘录怎么转移到新手机?
  15. 数值分析Matlab三维数据网格图
  16. PHP还款,ThinkPHP内核借贷管理系统安装版
  17. 矩阵分析: Hilbert行列式
  18. 电脑硬件故障维护小全(十三)
  19. 2018戊戌年运大解析,不看后悔
  20. 产品经理对专业有要求吗?

热门文章

  1. Nginx技巧:灵活的server_name,Nginx配置一个服务器多个站点 和 一个站点多个二级域名...
  2. js计算两个日期的时间差
  3. 对URLEncode的解码
  4. php连接postgresql
  5. poj - 2356 Find a multiple
  6. 线性筛选素数法(O(n)复杂度)
  7. JSP简单练习-定时刷新页面
  8. bnuoj 20950 沉重的货物 (最小生成树)
  9. mongodb安装.
  10. .Net Core 在 Linux-Centos上的部署实战教程(二)