第五章 IO端口
例:使用RB口控制G6区的8个指示灯,循 环移位点亮,瞬间只有一个灯亮。发光二 极管点亮
共阳极
输入输出端口
功能:MCU与外界交换信息的通道。 引脚的复用功能:
– 通用I/O – 支持外部设备
I/O端口的功能:
– 并行I/O端口 – 模拟端口引脚配置 – 输入电平变化中断模式
相关的I/O端口引脚: RB0~RB15 RC12~RC15 RD0~RD11 RE0~RE7 RF0~RF6 RG2~RG9
休眠和空闲模式下的CN 工作
CN 模块在休眠或空闲模式下继续工作。
– 如果使能的CN 引脚中的一个改变了状态, CNIF (IFS1<3>)状态位将被置1。 – 如果CNIE 位(IEC1<3>)被置1,则器件将从休眠或 空闲模式唤醒并恢复工作。
如果为CN 中断分配的优先级等于或低于当前 CPU 的优先级,则器件会紧随SLEEP 或IDLE 指 令后的那条指令继续执行。 如果为CN 中断分配的优先级高于当前CPU 的优 先级,则器件将从CN 中断向量地址继续执行。
变化通知(CN)引脚
CN 配置和操作
CN 引脚配置如下: 1. 通过将TRISx 寄存器中的相关位置1,确保CN 引脚配置为数字输 入引脚。 2. 通过将CNEN1 和CNEN2 寄存器中的相应位置1,允许所选的CN 引脚中断。 3. 通过将CNPU1 和CNPU2 寄存器中的相应位置1,打开所选的CN 引脚的弱上拉器件(如果需要)。 4. 清零CNIF (IFS1<3>)中断标志。 5. 使用CNIP<2:0> 控制位(IPC4<14:12>)为CN 中断选择所需的中 断优先级。 6. 使用CNIE (IEC1<3>)控制位允许CN 中断。 当CN 中断发生时,用户应读取与该CN 引脚相关的PORT 寄存器。 这样做将清除引脚电平不匹配条件,并设置CN 逻辑电路以检测下一 次引脚电平变化。可以将当前的端口值与上一次CN 中断时得到的端 口读出值比较,来确定发生过变化的引脚。
模拟端口
AD1PCFG 和TRIS 寄存器控制A/D 端口引脚的操 作。若希望端口引脚为模拟输入引脚,则必须将 相应的TRIS 位置1 (输入)。如果将TRIS 位清 零(输出),则该引脚的数字输出电平(VOH 或 VOL)将被转换。 读取PORT 寄存器时,所有配置为模拟输入通道 的引脚均读为0 (低电平)。配置为数字输入的 引脚不对模拟输入信号进行转换。
;Turn LED @ PORTA bit 0 ON ;Turn LED @ PORTA bit 1 ON
RMW 问题的解决方法
对LAT寄存器使用R-M-W 指令:
– BSF LATA,#0 – BSF LATA,#1
LAT 寄存器
与I/O 引脚相关的LALAT 寄存器之间的差异可以归纳如下:
IO口的外设复用
复用数字输入外设 外设不控制TRISx 寄存器。 PORTx寄存器可以读取引脚值。 PORTx数据输入路径不受影响。 外设输入路径使用特殊输入缓冲器,与IO 输入路径相互独立
变化通知(CN)引脚
电平变化通知(Change Notification,CN) 引脚使PIC24F 器件能够向处理器发出中断 请求,以响应所选择的输入引脚上的状态 变化。 可以选择(使能)最多24 个输入引脚来产 生CN 中断。 可用的CN 输入引脚总数取决于所选的 PIC24F 器件。具体查看引脚图
IO口的外设复用
下列外设允许通过PORT 寄存器手动控制它们的输入引脚:
– – – – 外部中断引脚 定时器时钟输入引脚 输入捕捉引脚 PWM故障引脚
大多数串行通信外设在使能时,将完全控制I/O 引脚,因此不 能通过相应的PORT 寄存器影响与该外设相关的输入引脚。 这些外设如下:
– – – – – SPI I2C DCI UART CAN
PORTx Function PINs
Drive Logic
Interfacing to 5V devices
5V tolerant input and Open drain configuration simplifies 5V interface
Interfacing to 5V devices
通用I/O
所有端口都为施密特触发输入,提高了抗噪声能力。
I/O 端口控制寄存器
有4 个与该端口操作直接相关的寄存器:
– TRISx: 数据方向寄存器 – PORTx:I/O 端口寄存器 – LATx: I/O 锁存寄存器 – ODCx: I/O 开漏控制寄存器
注:
– 器件上的每个I/O 引脚在TRIS、PORT、LAT 和ODC 寄存器中都分别有一个相关的位。 – 其中字母“x”表示特定的I/O 端口:
ODC 寄存器
每个I/O 引脚都可以单独配置为正常数字输 出( ODC 位为1)或开漏输出( ODC 位 为0 )。 ODC 位仅对输出引脚有效。 复位后, ODCx 寄存器的所有位的状态被 设置为0。
I/O 的开漏输出
15 7 6 5 4 3 2 1 0
0
0
0
1 0
0
0
0
0
0
ODCx
OD
CN 控制寄存器
有4 个与CN 模块相关的控制寄存器。
– CNEN1 和CNEN2 寄存器包含CNxIE 控制位, 其中“x”表示CN 输入引脚的编号。要让某个 CN 输入引脚中断CPU,必须将其CNxIE 位置 1。 – CNPU1 和CNPU2 寄存器包含CNxPUE 控制 位。每个CN 引脚连接一个弱上拉器件,该器 件可以通CNxPUE 控制位使能或禁止。 – 弱上拉器件充当连接到该引脚的电流源,并且 当连接了按钮或键盘设备时,有了该器件即可 不需要外部电阻。
端口可当作寄存器来访问(读入或写出) 每个端口的每个引脚可分别设置为输入(1) 或输出(0) 复位后,所有端口引脚都被定义为输入。
15 7 6 5 4 3 2 1 0
1
1
1
0 1
1
0 1
1
1
1 0
TRISA
I
I
I
I O
I
O I
I
I
O I
PORTA
引脚
数字 I/O 口 – 16-位
BSET PORTA,#0 BSET PORTA,#1
Interfacing to low impedence 5V load with open drain feature
5V 5V
PIC24FJxxxx
PIC24FJxxxx
Logic low
Load on
Logic high
Load Off
IO口的外设复用
许多引脚还支持一个或多个外设模块。当 配置为操作外设时,引脚不能用作通用输 入或输出。
– – – – 写PORTx 寄存器就是将数据值写入该端口锁存器。 PORTx 写LATx 寄存器就是将数据值写入该端口锁存器。 读PORTx 寄存器就是读取I/O 引脚上的数据值。 读LATx 寄存器就是读取保存在该端口锁存器中的数据 值。
PORT 寄存器
– 通过PORTx寄存器访问I/O引脚上的数据。 – 读PORTx寄存器是读取I/O引脚上的值; – 写PORTx寄存器是将值写入端口数据锁存器。 – 注意都是读-修改-写操作指令。如BSET 和 BCLR,