微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > PIC单片机之16C84单片机介绍(二)

PIC单片机之16C84单片机介绍(二)

时间:11-14 来源:互联网 点击:
五 I/O端口

  PIC16C84具有两个I/O端口,PORTA,PORTB。某些端口的引脚用来与另外一些功能复用。

  5-1 PORTA和TRISA寄存器

  PIC16C84的 PORTH是5位宽度的锁存器。RA4是施密特触发器输入,一个集电极开路输出。端口A的所有其它的引脚为TTL电平输入,含CMOS输出驱动。所有引脚有数据方向位(TRISA寄存器),可通过TRI SA来配置PORTA的引脚是输入式输出。设置TRISA的某位为1,则对应的 PORTA的位为输入,若设置为0,对应的PORTA的某位为输出。

  读PORTA寄存器,读入引脚的状态,向PORTA写入,则写到PORTA的锁存器。所有的写操作都是读--修改--写操作。当向端口写时,它首先读端口引脚,然后修改其位,再写入端口的数据锁存器。下面这段程序是对端口A的初始化:

  CLRF PORTA;初始化端口A

  BSF STATUS,RPO;选择1块

  MovLW CFH ;用于初始化数据方向的值

  MOVWF TRISA;设置RA3:0>为输入;RA5:4>为输出 ; 7:6>总是为0(无用)

  RA4是为TMRO的时钟输入复用。即如果这一位用作TMRO的时钟输入,则端口A就不能用RA4。

  5-2 PROTB和TRISB寄存器

  PORTB是8位宽度的双向端口。相应的数据由TRISB决定,方法用端口A。

  端口B的每一个引脚都具有内部弱的上拉电阻。通过一个控制位可以打开所有上拉电阻。这可通过对OPTION7>RBPU位的置1,清0来控制。当端口引脚配置成输出时,内部弱上拉电阻被自动关闭。上位是 端口需要的。PORTB的4个引脚RBT~RB4具有信号改变中断的功能,只要将这几个引脚配置为输入,就可能引起中断的发生。在输入方式下,引脚的位与最后一次读PORTB的值进行比较,这四个引脚中有任何一个或多个不相同,产生RBIF中端(置INTCON0>)。这个中断可能将 器件由SLEEP状态下唤醒。用户在中断服务程序中可以用这样的两个方法之一来清除中断。①通过清0RBIE(INT CON3>位)关闭中断,② 读端口B,则清0 RBIF位。

  不相等的条件将继续配置1RBIF位为止。读PORTB将结束不相等条件,并允许RBIF被清0。这一特征为软件可配置上拉一起允许用户非常容易的使用PORTB作为键盘输入的接口。也就可以通过按键来唤醒系统。

  注意:如果正在执行敛僮鳎琁/O引脚改变了信号,RBIF中断标志不可能被置成1。

  建议用改变信号中断作为按键唤醒操作,PORTB只不用改变信号中断,建议不要用查询方式。图4-7是用端口作键盘接口的原理图其R1为ESD保护而新选择的电阻。使用此接口时,通过软件选择保持内部上拉,即RB4~RB7为高,设置为输入方式。RB0~RB3输出。任何键被按下,RB4~RB7的某一根线将改变从而产生中断。这个中断可以唤醒芯片,用这种方法可以节省计时器资源。

  16个键

  RB4 100

  RB5

  RB6

  RB7

  RB0

  RB1

  RB2

  BR3

  Rf

  图4-7利用端口B的键盘接口图。

  5-3 I/O编程的考虑

  任何对端口的写操作,在内部都是读-修改-写。例如BCF,BSF 指令,先将寄存器读入CPU,执行位操作,将结果写回寄存器。例如对 PORTB执行BSF操作,首先将PORTB的8位读入CPU,在Bit5上进行BSF操 作,将这一位置1,将PORTB写回输出锁存器,如果这个时候PORTB的bit0用作输入引脚,则先将PORTB读入CPU,然后进行有关操作,结果写回PORTB的锁存器,并复盖了先前的内容,如果bit0一直保持在输入方式,这一操作是没有问题,但如果bit0在销后又改变成输出方式,数据锁存器的内容是未知的。

  实际写I/O端口发生在一个指令周期的结束,而读一个I/O端口,其有效的数据必须在指令周期的开始就出现。因此,对一个I/O通道相断执行读,写操作,要考虑数据的可靠性。为此,应在这两条指令之间加入一条NOP指令就可以保证数据的可靠性。

  六、计时器。

  (TMRO)模式 TMRO计时/计数器模式具有如下特点:

  ·8位计时计数器

  ·可读,可写

  ·8位软件可编程的预分配器

  ·从FFH到00H产生溢出中断

  ·具有外部时钟的边沿选择

  TMRO模式的简单框图与PIC16C6X系列相同。它可以经过清0 TOCs 位(即TION5>)来选择计时器方式。在计时器方式,TMRO模式对每个指令周期加1(没有预分频器),如果对TMRO写操作,则计时器为加 (操作后两个周期被禁止。)

  量TOCS为1(OPTION5>)选择TMRO为计数器方式。这种方式下 TM?RO将对RA4/TOCK1引脚上出现的上跳变或下跳变加1。清0TOSE(OPTION4>)选择上跳变否则为下跳变。有关预分频器的使用与PIC16C6X系列相同。当TMRO在计时/计数器方式下其值由FFH到00H时产生溢出中断,这个溢出中断将置TOIF位为1。此中断可以TOIE位为0来屏蔽。要能再次产生中断,必须在中断服务程序中,通过软件使TOIF清0,TMRO中断不可以用来唤醒芯片。因为在SLEEP状态下,计时器是关闭的。

如何使用TMRO的外

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top