芯片介绍 PIC单片机产品线丰富,型号众多。目前在国内介绍PIC的书籍中,大多都以具有较高性价比的中档机作为例子。为了能更加全面地展示PIC,本书是以高档的18系列单片机PIC18F4520作为主题芯片,对其片内功能和开发方法做一个全面的介绍。 1.2.1 片内资源配置PIC18F4520单片机片内资源配置如表1-2所示。 从表1-2中我们可以看出,PIC18F4520单片机片内资源十分丰富,存储器方面主要有32K字节基于闪存工艺的程序存储器,1024+512字节的数据存储器,以及256字节非易失性的E2PROM存储器。其I/O配备也能满足不同用户的需要,其中PORTA~PORTD端口均为一组8个,共计32个I/O口,PORTE端口为一组4个I/O口。 此外,PIC18F4520单片机还配备了功能强大的外设模块,主要有10位转换精度的A/D转换器模块1个,集比较、捕捉、PWM功能于一身的模块(CCP和ECCP)2个,具有SPI和I2C模式的主控同步串行接口模块(MSSP)1个,增强型通用同步/异步串行收发模块(EUSART)1个,模拟比较器2个,8位定时器1个,16位定时器3个。 此外,PIC18F4520单片机还具有如下功能: 1.2.2 PIC的I/O口I/O口是单片机的重要组成部分,也是单片机最小的外围功能模块。PIC单片机的I/O口信息传递是双向的,通过I/O口,单片机既可以实现对外部设备的控制,也可以判断外部输入电压的状态或对其进行量化处理。DIP40封装的PIC18F4520单片机共有五组I/O口,分别为PORTA端口、PORTB端口、PORTC端口、PORTD端口和PORTE端口。 其中PORTA~PORTD端口为每组8个引脚,PORTE端口只有4个引脚。在PORTA端口中,每一个引脚从低到高分别记作RA0、RA1……RA7,其他端口的引脚命名规则与此相同,DIP40封装的PIC18F4520单片机引脚功能如图1-5所示。 从图中我们不难看出,PIC18F4520单片机的36个I/O口都是以复用的形式出现的,复用的引脚在标注时将同一个引脚的不同功能用“/”隔开,五组I/O口的功能如下: 1)PORTA端口:8位宽双向I/O口,其中RA4引脚与TIMER0模块的时钟输入以及比较器的某个输出复用,组成RA4/T0CKI/C1OUT引脚;RA6和RA7引脚与主振荡器引脚复用。 2)PORTB端口:8位宽双向I/O口,每个引脚都有内部弱上拉电路,通过单个的控制位可以接通或关闭所有弱上拉电路,当PORTB端口的某个引脚被配置为输出时,该引脚的弱上拉电路会自动切断;PORTB端口的4个引脚(RB4~RB7)还具有电平变化中断功能。 3)PORTC端口:8位宽双向I/O口,部分引脚与定时器、SPI/I2C总线和串口收发等外设功能引脚复用。 4)PORTD端口:8位宽双向I/O口,三个PORTD引脚与增强型CCP模块的P1B、P1C、P1D输出引脚复用;通过置位控制位PSPMODE可将PORTD端口配置为8位宽的微处理器端口(并行从动端口)。 5)PORTE端口:4位宽I/O口,其中三个引脚是双向I/O口(RE0、RE1、RE2),可被配置为输入或输出。RE3引脚在配置成I/O口时,只能作为输入使用;MCLR/VPP/RE3引脚在编程过程中还是编程电压输入引脚。 为了详细地说明每一个引脚的多种功能,我们将其以表格的形式列出,具体详见本书附录A。 1.2.3 I/O口的方向设定PIC单片机在使用I/O时,需要事先设定好I/O口的方向,指定其输出或输入状态后,才能正确使用。设定I/O口的输入输出状态是通过用软件编程相应端口的方向控制寄存器来实现的。PIC单片机的每一组I/O口都有一个数据寄存器PORTx和一个方向控制寄存器TRISx与其对应,具体详见表1-3。 TRISx寄存器中的每一位的值都决定着与之对应的PORTx端口的每一位的输入/输出状态。若TRISx寄存器中的某一位值为1,那么与其对应的PORTx端口的某一位就被相应地设定为输入;若TRISx寄存器中的某一位值为0,那么与其对应的PORTx端口的某一位就被相应地设定为输出。 一个比较通用的**方法是,若TRISx寄存器中的某一位值为1,1类似于英文单词INPUT的字母I,意为输入。若TRISx寄存器中的某一位值为0,0类似于英文单词OUTPUT的字母O,意为输出。 1.2.4 I/O口的应用使用PIC的I/O口,有以下几点需要注意: 1)一旦I/O口的输入/输出状态被设定,即已经给TRISx寄存器赋值完毕,其设定结果就会被保持,直到单片机复位或者软件再一次改变TRISx寄存器的值为止。 2)PIC单片机在出现了任何条件的复位后,TRISx寄存器的所有数据位都会被硬件置1,因此所有I/O口也会被设定为高阻抗的输入状态。这一特性可以使PIC单片机在上电或其他形式的复位后,其引脚可以有一个确定的电平,我们只需按要求给引脚外接上拉或下拉电阻即可,有时这对于控制的安全性是至关重要的。 3)I/O口复位后默认为高阻抗的输入状态,如果此时引脚悬空,会受到外界干扰信号的影响而交替呈现出不确定的高低电平状态,单片机内部与该端口相连的门限判别电路也会随之频繁动作,其输入端晶体管会交替导通,从而产生额外的电流消耗。因此,我们在设计电路时,要尽量避免作为数字输入状态的引脚悬空。 4)PIC单片机和模拟输入(ANx)复用的引脚在复位后默认为模拟输入状态,这种状态下悬空引脚不会造成额外的电流消耗。 1.2.5 I/O口的内部结构PIC单片机的I/O口在作为输出时,有很强的驱动能力,高电平输出时的拉电流和低电平时的灌电流都可以达到25mA。而在作为输入时,端口会呈现出极高的输入阻抗,由端口引入的输入漏电流不超过1μA,对于输入信号来说基本上可以视为开路状态,下面我们结合I/O口单元电路模型(见图1-6),来分析一下其工作原理。 PIC单片机I/O口的基本结构如图1-6所示。I/O口的基本结构是由3个D触发器构成的锁存器、2个受控三态门、1个反相器、1个TTL电平缓冲器、1个具有双输入端的或门、1个具有双输入端的与门、互补推挽输出的PMOS管(P沟道场效应管)和NMOS管(N沟道场效应管)以及2个钳位二极管构成的。下面我们要分析一下I/O口是怎样工作的,这对我们理解PIC单片机的性能是有帮助的。 1.对端口的写操作 1)当对端口进行写“1”操作时,首先给TRISx寄存器赋值为“0”,将端口方向设定为输出。数值“0”首先存在于数据总线上,对TRIS寄存器的写操作(下降沿)会将数据总线上的数据锁存到TRIS锁存器的Q端,其值为“0”,此时TRIS锁存器的Q端值为“1”。 2)给PORTx寄存器赋值为“1”。数据被放置在数据总线上,对PORTx端口的写操作(下降沿)会将数据总线上的数据锁存到数据锁存器的Q端,其值为“1”,数据锁存器的Q端值为“0”。 3)此时或门的两个输入端均为“0”,其输出端为“0”。与门的两个输入端分别为“0”和“1”,其输出端为“0”,PMOS导通,NMOS截止,端口输出高电平。 4)当对端口进行写“0”操作时情况正好与此相反,或门的两个输入端为“0”和“1”,其输出端为“1”。与门的两个输入端均为“1”,其输出端为“1”,PMOS截止,NMOS导通,端口输出低电平。 2.对端口的读操作 1)当对端口进行读操作时,首先给TRISx寄存器赋值“1”,将端口的方向设定为输入。数值“1”首先存在于数据总线上,对TRIS寄存器的写操作(下降沿)会将数据总线上的数据锁存到TRIS锁存器的Q端,其值为“1”,此时TRIS锁存器的Q端值为“0”。 2)此时,无论数据锁存器中的数值如何,或门都会输出“1”,而与门则输出“0”,PMOS和NMOS均截止,因此数据锁存器中的数据不会出现在I/O口上。 3)I/O口上的电平信号经TTL型施密特触发器构成的门限判别电路(输入缓冲器)后,送至D触发器的输入端,对端口的读操作将使数据锁存到D触发器的Q端,且受控三态门会打开,数据放置到数据总线上。 4)如果I/O口工作在模拟输入状态,那么输入信号不经过输入缓冲器,使用单独的通道进入单片机的A/D转换器或比较器。 5)由于CMOS集成电路是一种极易受静电和外部高压入侵而损坏的半导体器件,为了防止过压损坏I/O口,PIC单片机在I/O口的输入端,使用两个二极管构成上下钳位电路,把输入电压限制在VDD + 0.7V至VSS - 0.7V范围内,从而保护内部CMOS器件不被损坏。
|