PIC16C84单片机介绍

[复制链接]
查看2539 | 回复5 | 2011-9-7 22:59:51 | 显示全部楼层 |阅读模式
<




PIC16C84单片机介绍

概述
PIC16C84是8位CMOS EEPROM单片机。它有高性能的类似于RISC 的指令,共有35条单字节的指令,所有的指令除程序分支指令需要两个指令周期外,都只需要一个指令周期。当主振频率为10MHZ时一个指令周期为400ns。程序指令的宽度为14位,在芯片内有1K×14的EEPROM程序存储器 。
数据的宽度为8位,在芯片内有36×8的静态RAM的通用寄存器,64×8的EEPROM的数据存储器。8级深度的硬堆栈。具有直接、间接、相对寻址方式。有4个中断源;外部RBO/INT引脚;TMRO计时器溢出,PORTB<7: 4>引脚上信号的改变;数据写入EEPROM完成。
数据存储器的擦/写可达1000000次,数据的保持大于40年。有13位的I/O引脚,可以单独直接控制。每一个I/O引脚均可承受25mA的输入/输出电流,这样就可以直接驱动LED。有8位的计时/计数器(TMRO)并带有8位可编程的预分频。有通电复位(POR);功耗上升(POWER-UP)计时器(PWRT); 振荡器起动计时器(OST);看门狗计时器(WDT),为了能可靠工作 ,它有自己的RC振荡器。有代码保证功能。有SLEEP(睡眠)方式,以节者功耗。有4种可供选择的振荡器:RC(低成本的RC振荡器);XT(标准的晶体/谐振器);HS(高速晶体/谐振器);LP(低功耗,低 频率的晶体)。工作电压的范围宽2.0V~ 6.0V。
PIC16C84单片机最大的特点是具有1K×14位的电可擦除的程序存储器和64×8位的电可擦除的数据存储器,这将为系统开发和各种应用提供了 更多的方便。
时钟和指令周期
从OSCI来的时钟输入在内部经4分频。产生互不叠加的时佛周期,每4个时钟周期(θ1,θ2,θ3,θ4)组成一个指令周期。在内部、程序计数内对每一个θ1加1,然后从程序存储器取指令,取出的指令在θ4时放入指令寄存内。在下一个θ1利θ4期间指令被执行。取指令和执行指令采用流水线技术,一个指令周期取指令,下一个指令周期执行已取出的指令,同时又取出下一条指令。所以每条指令执行,CPU的时间是一个指令周期。当某条指令要改变程序计数器的 内容时(如分支指令),则需要两个指令周期才能完成。被取出的指 令在执行指令周期的θ1时放入指令寄存器,在θ2,θ3,θ4时译码 并执行指令。在θ2期间读操作在θ4期间写操作数。
存贮器的结构
在PIC16C84单片机中有两个存储器块。即程序存储器和数据存储器。每一块具有它自己的总线,即可在同一时钟周期访问每一块。数据存储器被进一步分成通用RAM和专用功能寄存器(SFRs)。专 用功能寄存器用于控制外设模式。数据存储器也包含有数据EEPROM存 储器。这个存储器并不直接映象到数据存储器,而是间接映象的。即由一个间接寻址的指针指明要读/写的数据EEPROM的地址。64个字节 的数据EEPROM具有的地址是0~3FH。
3-1程序存储器的结构
PIC16C84单片机具有13位程序计数器,寻址能力为8K×14位的程序存储器空间。实际上对于PIC16C84能供使用的只有1K×14位的程序存储器(地址为0000~ 03FFH)。寻址上述单元,如超过了上述地址范围, 地址将卷绕。例对20H单元与地址420H,820H,C20H,1020H,1420H, 1820H,1C20H都将访问到它。系统复位时PC的值为0000H,中断向量是 0004H。
PC<12:0>
CALL,RETURN 13
RETFIE,RETLW 1级堆栈

8级堆栈
复位地址 0000H
外部中断向量 0004H
用户存贮空间 3FFH
1FFFH
图4-2程序存储的映象和堆栈
 
3-2数据存储器的结构
数据存储器被分成两个区域。第一个是专用功能寄存器(SFR)区域,第二是通用寄存器区域(GPR)。SFR控制着器件的操作。数据存储器被分成0块和1块。通过程序时状态寄存器STATUS中的RP1: RP0位 的设置来选择0块(RP1=0,RP0=0)或1块(RP0=1)。
其中带有斜线的部分是实际不存在的单元,带有*号的单元没有物理寄存。指令MOVWF和MOVF可以把W寄存器的值(W寄存器是器件内部的工作 寄存器)传送到寄存器文件(“F”)中的任何单元,反之也可以。整个数据存储器可以直接寻址或通过文件选择寄存器(FSR)进行间接寻址。间接寻址要根据状态寄存器的RP1:RP0位的状态决定访问数据存 储器的某一块,数据存储器的两块中都被分成通用寄存器和专用寄存 器。其中每块低地址单元留作专用寄存器,专用寄存器以上地址的单 元为通用寄存器,它们是静态RAM。


热帖推荐
tashi | 2011-9-7 23:00:14 | 显示全部楼层
2.TMRO中断
TMRO溢出(由FFH~00H)将置1 TOIF位(INTCON<2>)。这一位 的中断可以对TOIE(INTCON<5>)位置1或清0而开放/关闭中断。
3.PORTB中断
在端口B的7~4位的输入改变,就置1 RBIF(INTCON<0>)位。 这个中断可以对RBIE(INTCON<3>)位置1或清0而开放或关闭。
注意 :当正在对RB端口进行读操作时,RB7~RB4发生改变,RBIF标志位可 能不被置1。
4.中断时如何保存W和STATUS寄存器。
中断时,硬件自动将PC的值压入堆栈,这叫保存断点,用户经常希望保存关键的寄存器的内容,(如W和STATUS寄存器)。为此,执行如下一段程序。
MOVWF W-TEMP ;将W寄存拷贝到W-TEMP寄存器,W-TEMP寄存器 可在1块或0块
SWAPF STATUS,W;状态寄存器内容送入W
BCF STATUS,RPO;选0块
MOVWF STATUS-TEMP;将状态寄存器的内容(现在在W中的STATUS-TEMP寄存器中断服务程序
SWAPF STATUS-TEMP,W;将STATUS-TEMP送入W(设置块到原来 的状态)
MOVWF STATUS ;W送入STA?TUS(恢复STATUS)
SWAPF W-TEMP,0;W-TEMP送W(恢复W的内容)
在上面这段程序中,W-TEMP寄存器,必须定义在两个块中,且要在定在同样的块基地址。例如将W-TEMP定义在0块的20H,同时它也应定义在1块的A0H。寄存器STATUS-TEMP必须定义在0块。
5.看门狗计时器(WDT)
看门狗计时器实际使用的是在芯片上的RC振荡器,这不要求任何外部元件。这个RC振荡器与OSC1/CLKIN引脚上接的RC振荡器(主振时钟)是分开的。这样即使OSC1/CLKIN和OSC2/CLKOUT引脚停振,(例在执行SLEEP指令后)WDT仍然能够工作。在正常工作时,WDT计时器的输出产生器件的RESET信号。如果器件处于SLEEP状态下,WDT计时器的输出将唤醒器件,使器件继续正常的工作。WDT也可以通过编程的配置来关闭。其内容的框图与PIC16C6X系列相同。
九、PIC16C84单片机的指令系统共有35条指令。与PIC16C6X系列的指令完全相同。




subi | 2011-9-7 23:00:08 | 显示全部楼层
除了上述提到的防止错误的写数据EEPROM外,在电源刚加电期 间的72ms内也防止写EEPROM数据存储器。
八 CPU专门的特征
微控制器为其它处理器的区别是有专门的电路,这些电路涉及实时应用的需要。PIC16C84具有最大的系统可靠性,最低的价格,最少的外部元件,提供了低功能操作模式和代码保护。
PIC16C84具有看门狗计时器,此计时器只可经配置位来关闭,为了增加其可靠性,关闭它的RC振荡器。有两个计时器提供加电时需要的延时。振荡器起振计时器(OST)保持芯片在复位状态直到石晶稳定为止。另外一个是加电计时器(POWER-UP Timer(PWRT))它提供了 固定的72ms的延时。这样保证了器件复位以及电源的可靠供电,用了这两个计时器,使多数应用不需要外接复位电路。
SLEEP方式提供了低功耗方式。用户可经外部复位;看门狗计时器溢出;中断来唤醒芯片。
8-1配置位
配置位分为可编程的位,读作0,不可编程的位,读作1。通过可编程的位来选拔各种配置。这些位映象到程序存储器的2007H单元。注意地址2007H不等于用户程序存储器空间。事实上,它属于专门的测试 /配置存储空间(2000H~3FFH),只有在编程时可以访问。图4-10 是配置寄存器的结构(附后)
其中Fosc<1或0>为振荡器选择位。
11:选RC振荡器
10:选HS振荡器
01:选XT振荡器
00:选CP振荡器
WDTE是看门狗允许与禁止的选择位。此位为1,允许看门狗工作。此位为0禁止看门狗工作。
PWRTE是加电计时器允许与禁止的选择。此位为1,加电计时器允许工作,为0则禁止工作。
CP是代码保护的选择,此位为1代码保护取消,这一位为0,所有程序存储器的代码被保护。其余位是不执行的。读作1。
有关振荡器的配置,振荡器的选择与连接电路与PIC16C6X系列相同。
8-2中断
PIC16C84具有4个中断源。即外部中断RBO/INT引脚上的中断,TMR0溢出中断;PORTB改变中断(RB7:RB4);EEPRDM写完成中断。
中断控制寄存器(INTCON在其标志位,记录了每一个中断请求。它也包括了每个中断的允许/禁止位。所有中断的允许/禁止位(IN TCON<7>),它就开放所有中断或禁止所有中断。从中断返回指令RETFLE返回时,退出中断,并置GIE=1,重新开放所有中断。 RBO/INT引脚中断,RB端口改变中断和TMRO溢出中断,这些中断的中断标志在INTCON寄存器中。
当中断的响应时,GIE位被清0,关闭任何新的中断,返回地址被压入堆栈,用0004H装入PC。对于外部中断文件,如RBO/INT引脚或PORTB改变中断,这类中断需3到4个指令周期。严格的时间,取决于中 断事件的发生。一旦在中断的中断服务程序中可以通过查询中断标志 位来确定中断源。中断的标志位应在重新开发这个中断之前,经软件 将其清0。
注意:
①每一个中断的标志位被置位,而与它相应的屏蔽位或GIE无关。
②如果中断发生,而全部中的允许位GIE假设本是清0的,GIE可能被用户中断服务程序的RETFIE指令无意之间连成1。这种事情可能发生在
a、在中断被响应时,指令清0GIE位。
b、程序分支到中断向量并执行中断服务程序。
c、中断服务程序执行RETFIE指令而完成。这会引起GIE位被置1(允许中断)。同时程序返回中断关闭后的指令(实 际上由于上述原因引起中断未能关闭)。为确保GIE清0,应有如下一段程序。
l00p BGF INT CON,GIE:关闭全部中断
BTFSC INTCON,GIE;全部中断允许位被关闭了吗?
GOTO l00P;没有返回到l00p,再清0GIE,否则程序继续。
1.INT中断
在RBO/INT上的外部中断是边沿触发。如果INT?EDG位(OPTION <6>)是置1,则上升沿有效,如果INTEDG位被清0,则下降沿有效。当有效跳变出现在RBO/INT引脚上时,INTF位(INTCON<1>)被置1。清0INTE控制位(INTCON<4>),关闭这个中断。INTF在重新允许这个中断之前应由中断服务程序中的软件来清0这一位。在芯片进入SLEEP之前,如果INTE位被置1,则INT中断发生后可唤醒芯片。GIE位的状态决定了处理器被唤醒后是否分支到中断向量。


huangshan | 2011-9-7 23:00:04 | 显示全部楼层
如何使用TMRO的外部时钟,外部时钟的同步问题,预分频器的使用等,参看PIC16C6X系列关于TMRO的技术性能。
七、数据EEPROM存储器
数据EEPROM存储器在满电源电压(VDD)时,正常操作期间是可读,可写的,这部分存储器不能直接映象到寄存器文件空间,只有通过专用功能寄存器经间接寻址来访问,有四个SFR用于读、写这些存储器,这些寄存器是EECON1;EECON2;EEDATA;EEDAR。
其中EEDATA用来保持8位的读/写数据。EEADR用来保持正在访问 的EEPROM单元的地址。PIC16C84具有64个字节的EEPROM,其单元的地 址范围是00H-3FH。
EEPROM允许一次读/写一个字节。一个字节的写入将自动擦除该单元,写入新的内容(在写入之前擦除)。EEPROM数据存储器是高 速率的擦/写周期,写入时间正常为10ms,由芯片的计时器控制。实 际写入时间与所加电压,温度,芯片等有关。严格的时间请参看芯片的AC说明。当器件是在代码保护时,只有CPU可以完成数据存储器的读 /写。即器件的编程器的不再访问存储器(外部读/写被关闭)。
6 连接的考虑
因为模拟输入用了ESD保护,它们有反偏二极管连到VDD和VSS。这就要求模拟输入电压应在VDD和VSS之间。
如果模拟输入电压超过了最大值的0.6V以上的范围,二极管可能变为正向导通,如果输入电流超过了说明书上的规定,它可能破坏器件。有些时候把外部的RC滤波器加在输入信号上。要求选用的电阻R要保证总的信号源电阻不超过10K,任何在模拟信号上的其它的附加元件均应有非常小的漏电流。
7.变换功能
理论上A/D变换器的变换功能如下。
当模拟输入信号电压是1位L sb的电压时(或是VREF/256)第一次变换就发生。
8 A/D变换工作的流程图
表2-4 PIC16C74/73的A/D变换所涉及的寄存器
地址 名称 bit7 bit6 bit5 bit4 bit3 bit 2 bit1 bit0
0B/8B INTCON GIE PEIE
0C PIR1 ADIF
8C PIE1 ADIE
0D PIR2 CCP2IF
8D PIE2 CCP2IE
1F ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE ADON
9F ADCON1 PCFG2 PCFG1 PCFG0
除上述所例寄存器外,还有ADRES(地址1EH)用于存放A/D变换 的结果。PORTA(地址 05H)用于输入多路模拟信号,TRISA(地址85 H)用于设置PORTA的I/O方式,PORTE(地址09H)用于输入多路模拟信号,TRISE(地址89H)用于设置PORTE的I/O方式。
表2-5 PIC16C71的A/D变换所涉及的寄存器
地址 名称 bit7 bit6 bit5 bit4 bit3 bit 2 bit1 bit0
0B/8B INTCON GIE ADIE
08 AOCON0 ADCS1 ADCS0 CHS1 CHS0 GO /DONE ADIF ADON
88 ADCON1 PCFG1 PCFG0
 
此外还涉及ADRES(地址09H),PORTA,TRISA等。。
U U U U U U U U U R/P R/P R/P R /P R/P
- - - - - - - - - CP PWRTE WDTE FOSC 1 FOSC0 bit 13 bit0
图4-10 PIC16C84的配置寄存器
 
7-3 写EEPROM数据存储器
与写EEPROM的数据单元、用户必须首先写地址到EEADR寄存器,再送数据到EEDA?TA,最后用户必须跟着一个专门的序列起动写。例如:下面这段程序是写EEPROM的程序。 ? ? BSF STATUS, RPO ;选择1块
BCF INTCON,GIE ;关闭所有INT中断
MOVLW 55H ;
MOVWF EECON2 ;写55H
MOVLW AAH;
MOVWF EECON2;写AAH
BSF EECON1,WR;置WR位为1,开始写
BSF INTCON,GIE;允许INT中断。
如果这个程序(即先写55H 到EECON2,再写AAH到EECON2,然后置 WK=1)未跟有严格的时间,写将不能启动。我们建议在执行这几条指令期间关闭中断。
此外,EECON1中的WREN位必须选置成1,允许写。这样的机构防止 了因错误指令的执行而写数据EEPROM。用户在所有的时间应保持WREN位为0,除了当要热修改EEPROM以外。
写序列开始以后,清0WREN位不影响这次写周期。从开始设置,直到WREN=1为止WR位将被禁止。当完成了写周期以后,WR位由硬件清0 。写完成中断标志EEIF被置1,EEIF必须由软件将其清0。注意数据EEPROM存储器E/W周期可能偶然超过10ms,为确保写周期的完成,用户使用的EE中断或查询WR位(EECON1<1>)。这两个均可用来判断写周 期的完成。


taobi | 2011-9-7 23:00:01 | 显示全部楼层
读PORTA寄存器,读入引脚的状态,向PORTA写入,则写到PORTA的锁存器。所有的写操作都是读--修改--写操作。当向端口写时,它首先读端口引脚,然后修改其位,再写入端口的数据锁存器。下面这段程序是对端口A的初始化:
CLRF PORTA;初始化端口A
BSF STATUS,RPO;选择1块
MovLW CFH ;用于初始化数据方向的值
MOVWF TRISA;设置RA<3:0>为输入;RA<5:4>为输出 ;< 7:6>总是为0(无用)
RA4是为TMRO的时钟输入复用。即如果这一位用作TMRO的时钟输入,则端口A就不能用RA4。
5-2 PROTB和TRISB寄存器
PORTB是8位宽度的双向端口。相应的数据由TRISB决定,方法用端口A。
端口B的每一个引脚都具有内部弱的上拉电阻。通过一个控制位可以打开所有上拉电阻。这可通过对OPTION<7>RBPU位的置1,清0来控制。当端口引脚配置成输出时,内部弱上拉电阻被自动关闭。上位是 端口需要的。PORTB的4个引脚RBT~RB4具有信号改变中断的功能,只要将这几个引脚配置为输入,就可能引起中断的发生。在输入方式下,引脚的位与最后一次读PORTB的值进行比较,这四个引脚中有任何一个或多个不相同,产生RBIF中端(置INTCON<0>)。这个中断可能将 器件由SLEEP状态下唤醒。用户在中断服务程序中可以用这样的两个方法之一来清除中断。①通过清0RBIE(INT CON<3>位)关闭中断,② 读端口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 位(即TION<5>)来选择计时器方式。在计时器方式,TMRO模式对每个指令周期加1(没有预分频器),如果对TMRO写操作,则计时器为加 (操作后两个周期被禁止。)
量TOCS为1(OPTION<5>)选择TMRO为计数器方式。这种方式下 TM?RO将对RA4/TOCK1引脚上出现的上跳变或下跳变加1。清0TOSE(OPTION<4>)选择上跳变否则为下跳变。有关预分频器的使用与PIC16C6X系列相同。当TMRO在计时/计数器方式下其值由FFH到00H时产生溢出中断,这个溢出中断将置TOIF位为1。此中断可以TOIE位为0来屏蔽。要能再次产生中断,必须在中断服务程序中,通过软件使TOIF清0,TMRO中断不可以用来唤醒芯片。因为在SLEEP状态下,计时器是关闭的。


匿名 haoya | 2011-9-7 22:59:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则