—— —— —— 技术资料下载中心

>> PIC单片机原理 \

PIC单片机16F84的内部硬件资源（三）
4 I/O口 单片机作为一个控制器件必定有数据输入和输出。输入量可能是温度、压力、转速等，而输出量可能是开关量和数据，以保证受控过程在规定的范围内运行。数据的输入和输出都需通过单片机内部有关电路，再与引脚构成输入/输出(I/O)端口。PIC16F84芯片有两个I/O端口(PROTA和PORTB)。端口A为5位口，端口B为8位口，共占用13位引脚。每个端口由一个锁存器(即数据存储器中的特殊功能寄存器05H、06H单元)、一个输出驱动器和输入缓冲器等组成。当把I/O口作输出时，数据可以锁存；作输入口时，数据可以缓冲。
16F84 PORTA口中的RA4是斯密特触发输入、漏极开路输出。而其它的RA口引脚都是TTL电平输入和全CMOS驱动输出。端口PORTB是一个八位双向可编程I/O口。各端口虽然也由锁存器、驱动器、缓冲器等构成，但因功能略有不同而导致电路亦存在差别。现以PORTA口的RA0 ～RA3的电路(见左图)为例，说明其基本工作原理。
图中RA口的I/O引脚是由数据方向位(寄存器TRISA)来定义数据流向。当TRISA寄存器的位置为“1”时，其输出驱动器(由P沟道和N沟道MOS管串接而成)呈高阻态，即两个MOS管均截止，I/O口被定义为输入。此时，数据由I/O端输入，经TTL输入缓冲器到D触发器。当执行读指令时，此D触发器使能，数据经三态门进入数据总线。
当TRISA的位置为“0”时，I/O口被定义为输出，此时输出锁存器的输出电平就是I/O口的输出电平。
读PORTA寄存器的结果就是读取I/O引脚上的电平，而写PORTA寄存器的结果是写入I/O锁存器。所有的写I/O口的操作都是一个“读入/修改/写入”的过程，即先读I/O引脚电平，然后由程序修改(按要求给定一个值)，再置入I/O锁存器。
PIC16F84的输出可提供20mA的电流，所以它可直接驱动LED。PORTA和PORTB各个位均可分别定义为输入和输出。下面以PORTA口初始化程序的实例，说明选择I/O口的方法。
CLRF PORTA；端口A被清零
BSF STATUS；状态寄存器STATUS的RPO位置为1，选BANK1。
MOVLW 0xCF ；将定向值
；11001111置入W工作寄存器
MOVWF TRISA；置RA(3～0)位为输入
；RA 54位为输出
；TRISA 76位未用
在使用I/O口时应注意：
(1)当需要一个I/O口一会做输入、一会又做输出时，输出值会不确定。
(2)I/O引脚输出驱动电路为CMOS互补推挽输出。当其为输出状态时，不能与其它输出脚接成“线或”或“线与”，否则，会因电流过载烧坏单片机。
(3)当对I/O口进行写操作后不宜直接进行读操作，一般要求在两条连续的写、读指令间至少加入一条NOP指令。
例：MOVWF 6 ；写I/O
NOP ；稳定I/O电平
MOVF 6，W；读I/O
5堆栈
单片机执行程序时，常常要执行调用子程序。这样就产生了一个问题：如何记忆是从何处调用的子程序，以便执行子程序之后正确返回。此外，在程序执行过程中，还可能会发生中断，转而执行中断子程序，这时，又如何记忆从何处中断，以便返回呢?
满足上述功能的方法就是“堆栈”技术。
“堆栈”是一个用来保存临时数据的栈区。当主程序调用子程序时，单片机执行到CALL指令或发生中断时，就自动将下一条指令的地址“压栈”保存到栈区。当子程序结束，单片机执行返回指令时，就自动地把栈区的内容“弹出”，作为下步指令执行的新地址。
PIC16F84芯片内有一个8级13位宽(与PC同宽)的硬件堆栈，此堆栈既不占用程序存储空间，也不占用数据存储空间。当执行一条CALL指令或一个中断被响应后，程序计数器PC中的断点地址就自动被压栈(PUSH)保护，而当执行RETURN、RETLW或者RETFIE指令时，堆栈中的断点地址会弹回(POP)程序计数器PC中。无论是PUSH还是POP操作，都不影响PCLATH寄存器的内容。　　成都　卫东
知识竞赛试题：
19简述PIC单片机I/O口的功能。
20PIC16C64A/RL64与PIC16C65的管脚数相等，管脚功能相近，但PIC16C64A/RL64的{16}脚无CCP2、{25}脚无TX/CK、{26}脚无RX/DT等功能，试绘出PIC16C64A/RL64的管脚功能图。

[ 返回 ]