![]() |
| 首页-> 产品信息-> 8位单片机 | |||||||
|
3.1 I/O 端口概述 SPMC65 系列单片机最多有 6 组 8 位并行端口:端口 A 、端口 B 、端口 C 、端口 D 、端口 E 和端口 F 。 SPMC65 系列单片机 I/O 端口具有 4mA 的推电流能力( driving )及 10mA 的灌电流( sinking )能力,其中有两个 I/O 端口的灌电流能力可达 20mA 。详细情况见 表 3.1 和 表 3.2 :表 3 . 1 端口 A 的直流特性( VDD=5.0V )
表 3 . 2端口 B 的直流特性( VDD=5.0V )
SPMC65 系列单片机的每一位 I/O 端口都可独立地设置为输入或输出状态,并且每个端口都内置有弱上拉、弱下拉电阻,可以通过寄存器设置为上拉或下拉输入状态,也可设置为悬浮输入状态。 SPMC65 系列单片机的 I/O 端口结构如 图 3.1 所示:
读 P_IOX_Data(X=A ~ F) 寄存器将得到管脚的电平状态,向 P_IOX_Data 写入数据,会存入数据寄存器中。 P_IOX_Data 单元和 P_IOX_Buf 单元的区别: 对输出而言两者没有区别,但对输入而言,读 P_IOX_Data 单元读的是当前 I/O 的电平值,读 P_IOX_Buf 单元是读的是上次写入的数据。 3.3.1 IO 端口的设置 SPMC65 系列单片机的 I/O 控制寄存器分别为:数据寄存器 P_IOX_Data 、方向寄存器 P_IOX_Dir 、属性寄存器 P_IOX_Attrib 和数据锁存寄存器 P_IOX_Buf ( X=A~F )。 通常,对某一个 I/O 端口的设置包括以下 3 个基本项:数据寄存器 Data 、属性寄存器 Attribution 和方向控制寄存器 Direction 。 其具体作用如下: 方向控制寄存器 P_IOX_Dir 将管脚设置为输入或输出 属性寄存器 P_IOX_Attrib 将管脚设置为悬浮或不悬浮 当管脚作为输入时,数据寄存器 P_IOX_Data 将其设置为上拉或下拉;当管脚作为输出时,写入数值到数据寄存器 Data 里,便可在端口输出相应的的电平。 I/O 端口的组合控制设置如 表 3.3 所列。 表 3 . 3 I/O 端口的组合控制设置
IO 口的默认状态需要设置芯片配置选项,具体设置方法请参考第十章中的介绍。 ( X=A~F ) 3.3.2 端口 A 端口 A 的控制寄存器为:数据寄存器 P_IOA_Data 、方向寄存器 P_IOA_Dir 、属性寄存器 P_IOA_Attrib 和数据锁存寄存器 P_IOA_Buf 。 P_IOA_Data($00 , R/W) A 口的数据寄存器,用于向 A 口写入或从 A 口读出数据。当 A 口处于输入状态时,读 P_IOA_Data 寄存器将得到管脚的电平状态,向 P_IOA_Data 写入数据,其值将会存入数据锁存器( P_IOA_Buf )中。当 A 口处于输出状态时,写数据到 A 口的数据寄存器会存入数据锁存器( P_IOA_Buf ),同时在管脚输出相对应电平状态;读 P_IOA_Data 寄存器也将得到管脚的电平状态。 P_IOA_Data 数据寄存器单元的默认初值为 #00h 。 端口 A 数据寄存器 P_IOA_Data 的设置见 表 3.4 表 3 . 4端口 A 数据寄存器 P_IOA_Data ( $00 , R/W )
Bit [7:0] P_IOA_Data :端口 A 数据寄存器 读:读取端口 A 外部管脚上的电平状态值 写:写入数据到端口 A 的数据锁存器中 ($59) P_IOA_Buf($59 , R/W) A 口的数据锁存寄存器, P_IOA_Buf 是一个专门用于存储端口数据的寄存器,并用来对端口各管脚进行位操作,而不直接用 P_IOA_Data 寄存器来操作。而读取 P_IOA_Buf 的值则可得到上次写入寄存器 P_IOA_Data 或 P_IOA_Buf 的值。端口 A 数据锁存器 P_IOA_Buf 的默认初值为 #00h 。 端口 A 数据锁存器 P_IOA_Buf 的设置见 表 3.5 表 3 . 5 端口 A 数据锁存器 P_IOA_Buf ( $59 , R/W )
P_IOA_Dir($04 , R/W) A 口的方向寄存器,用来设置 A 口是输入 / 输出状态。该方向控制寄存器可以写入或从该寄存器内读出方向控制向量。方向寄存器的每一个位决定了对应口位的输入 / 输出状态: 0 为输入, 1 为输出。 P_IOA_Dir 方向寄存器单元的默认初值为 #00h 。 端口 A 方向寄存器 P_IOA_Dir 的设置见 表 3.6 : 表 3 . 6端口 A 方向寄存器 P_IOA_Dir ( $04 , R/W )
Bit [7:0] P_IOA_Dir : 端口 A 方向寄存器 0 = 输入 1 = 输出 P_IOA_Attrib($08 , R/W) A 口的属性寄存器,用于 A 口属性的设置。 端口 A 属性寄存器 P_IOA_Attrib 的设置见 表 3.7 : 表 3 . 7端口 A 属性寄存器 P_IOA_Attrib ( $08 , R/W )
Bit [7:0] P_IOA_Attrib :端口 A 属性寄存器 0 = 不悬浮 1 = 悬浮输入 【例 4-1 】: 将端口 A[7:0] 设置为输出状态,并输出数据:
对应的口位的设置见 表 3.8 : 表 3 . 8 I/O 口位设置
【例 4-2 】: 将端口 A[7:0] 设置为下拉输入:
对应的口位的设置见 表 3.9 表 3 . 9 I/O 口位设置
3.3.3 端口 B 端口 B 的控制寄存器为:数据寄存器 P_IOB_Data 、方向寄存器 P_IOB_Dir 、属性寄存器 P_IOB_Attrib 和数据锁存寄存器 P_IOB_Buf 。 ■ 端口 B 数据寄存器 P_IOB_Data ( $01 , R/W ); ■ 端口 B 方向寄存器 P_IOB_Dir ( $05 , R/W ); ■ 端口 B 属性寄存器 P_IOB_Attrib ( $09 , R/W ); ■ 端口 B 数据锁存器 P_IOB_Buf ( $5A , R/W )。 3.3.4 端口 C 端口 C 的控制寄存器为:数据寄存器 P_IOC_Data 、方向寄存器 P_IOC_Dir 、属性寄存器 P_IOC_Attrib 和数据锁存寄存器 P_IOC_Buf 。 ■ 端口 C 数据寄存器 P_IOC_Data ( $02 , R/W ); ■ 端口 C 方向寄存器 P_IOC_Dir ( $06 , R/W ); ■ 端口 C 属性寄存器 P_IOC_Attrib ( $0A , R/W ); ■ 端口 C 数据锁存器 P_IOC_Buf ( $5B , R/W )。 3.3.5 端口 D 端口 D 的控制寄存器为:数据寄存器 P_IOD_Data 、方向寄存器 P_IOD_Dir 、属性寄存器 P_IOD_Attrib 和数据锁存寄存器 P_IOD_Buf 。 ■ 端口 D 数据寄存器 P_IOD_Data ( $03 , R/W ); ■ 端口 D 方向寄存器 P_IOD_Dir ( $07 , R/W ); ■ 端口 D 属性寄存器 P_IOD_Attrib ( $0B , R/W ); ■ 端口 D 数据锁存器 P_IOD_Buf ( $5C , R/W )。 3.3.6 端口 E 端口 E 的控制寄存器为:数据寄存器 P_IOE_Data 、方向寄存器 P_IOE_Dir 、属性寄存器 P_IOE_Attrib 和数据锁存寄存器 P_IOE_Buf 。 ■ R/W ); ■ 端口 E 方向寄存器 P_IOE_Dir ( $42 , R/W ); ■ 端口 E 属性寄存器 P_IOE_Attrib ( $44 , R/W ); ■ 端口 E 数据锁存器 P_IOE_Buf ( $5D , R/W )。 3.3.7 端口 F 端口 F 的控制寄存器为:数据寄存器 P_IOF_Data 、方向寄存器 P_IOF_Dir 、属性寄存器 P_IOF_Attrib 和数据锁存寄存器 P_IOF_Buf 。 ■ 端口 F 数据寄存器 P_IOF_Data ( $41 , R/W ); ■ 端口 F 方向寄存器 P_IOF_Dir ( $43 , R/W ); ■ 端口 F 属性寄存器 P_IOF_Attrib ( $45 , R/W ); ■ 端口 F数据锁存器 P_IOF_Buf ( $5E , R/W )。 SPMC65 系列单片机的 I/O 端口除了具有一般的输入 / 输出功能外,还提供了一些特殊功能或与片内硬件功能模块复用;其中,端口 F 没有特殊功能或复用功能。 3.4.1 端口 A 特殊功能: 端口 A 可以作为 A/D 转换的输入通道,具体见 表 3.11 ,端口 A 的特殊功能详细见 A/D 部分。 3.4.2 端口 B 特殊功能: PB7 既可以作为 A/D 转换的输入通道,也可以作为 A/D 转换的外部参考电压输入; PB6 可以驱动频率式蜂鸣器; PB[5:4] 可以作为 Timer 外部事件输入或中断输入管脚; PB[3:2] 可以作为比较输出或 PWM 输出管脚; PB[1:0] 可以为捕获输入或 Timer 外部事件输入管脚。 SPMC65 系列单片机支持慢速输出功能, PB[7:6] 通常情况下作为普通 I/O 口,但是如果将信号斜率控制寄存器 P_IO_Opt ($35) 的 bit0 设置为 1 ,便会打开 PB[7:6] 的慢速输出功能;此时当 PB[7:6] 输出从高电平变为低电平,将会延迟 250ns 左右,具体延迟时间由系统时钟( F SYS )决定。当单片机在进行远距离通信时,慢速输出功能可以防止电磁干扰。 P_IO_Opt 寄存器见 表 3.10 。端口 B 的复用情况见 表 3.11 。 表 3 . 10 慢速输出功能控制寄存器 P_IO_Opt ( $35 , R/W )
Bit [7:1] 保留 Bit 0 SLOWE :慢速输出功能使能位 1=PB[7:6] 开启慢速输出功能 0=PB[7:6] 关闭慢速输出功能 注:该寄存器必须连续写两次相同的值才能将值写入,该寄存器默认初值为 #00h 。 3.4.3 端口 C 特殊功能: PC[7:6] 可以用作 IIC 总线的复用端口、 PC[5:4] 可用于 UART 通讯接口、 PC[3:0] 用作 SPI 通讯接口。端口 C 各个管脚复用的特殊功能见 表 3.11 。 3.4.4 端口 D 特殊功能: PD[7:6] 可作为比较输出或 PWM 输出管脚、 PD[5:4] 可作为外部中断输入或 Timer 外部事件输入管脚、PD[3:2] 可用于比较输出或 PWM 输出管脚、 PD[1:0] 可用作外部中断输入管脚。端口 D 各个管脚复用的特殊功能见 表 3.11 ,详细描述见相应的章节。 3.4.5 端口 E 特殊功能: PE6 可以作为 D/A 转换的输出管脚, PE[5:2] 可以用于模拟电压比较器输入及比较参考电压输入。端口 E 各个管脚复用的特殊功能见 表 3.11 ,详细描述见相应的章节。 表 3 . 11 端口特殊功能
SPMC65 系列单片机的端口在使用前一般都需要对端口进行初始化,比如要使用端口 A 作为带下拉电阻的输入口时,就要在使用之前对端口进行初始化;而对于端口的复用功能在使用前,也有部分复用功能需要先初始化 I/O 口状态,比如需要用到外部中断输入的复用功能时,就要事先把对应的 I/O 端口设置为输入状态;类似的还有捕获输入、串行通讯接口。而部分复用功能在使用前是无需初始 I/O 端口状态的,如 ADC 输入、 DAC 输出、电压比较器功能、蜂鸣器输出、 PWM 输出、比较输出。具体的复用功能所需要的端口初始化要求请参考后面章节的介绍。 【 例 4-3 】:采用 32 管脚的 SPMC65P2408A ,外接四个按键,当按键按下或放开时,相应的发光二极管便会被熄灭或点亮用作指示。此例主要介绍 I/O 口的简单应用。 程序如下: 子函数 Switchx4.asm
硬件原理如 图 3.2 所示:
图3.2 键盘及 LED 原理图 【 例 4-4 】:本例采用 28 管脚的 SPMC65P2408A ,外接四个数码管作为显示部分。在程序中开辟了一个四字节的连续空间作为显示缓冲区,往这四个地址里分别写入数据( 0~F )便可以通过外接数码管显示出来。程序如下:
硬件原理如 图 3.3 所示:
图 3 . 3 LED 扫描原理图 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 版权所有:北京凌阳爱普科技有限公司 www.sunplusmcu.com 本站网络实名、通用网址:凌阳单片机 未经许可网站内容严禁复制、转载,任何人不得擅自使用 京ICP备05061966号 |