完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
概述 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。 1.通用寄存器文件 寄存器文件可以直接寻址或通过FSR间接寻址。所有器件都有一定 数量的通用寄存器(GPR),它们的数据宽度是8位。PIC16C84只有36个字节的通用寄存器,地址为0CH~ 2FH,对1块对应的8CH~ AFH的访问都将实际访问0CH~ 2FH(地址的高位被忽略)。 文件地址 00 间接寻址地址(*) 间接寻址地址(*) 80 01 TMRO OPtiON 81 02 PCL PCL 8 2 03 STATUS STATUS 83 04 FSR FSR 8 4 05 PORTA TRISA 85 06 PORTB TRISB 86 07 87 08 EEDATA EECON1 88 09 EEADR EECON2(*) 89 0A PCLATH PCLATH 8A 0B INTCON INTCON 8B 36个通用寄 映象到 存器(SRAM) 0块 2F AF 7F FF 0块 1块 2.专用功能寄存器 CPU和外设使用专用寄存器以控制器件的操作。专用寄存是静态RAM。下面介绍几个重要的专用寄存器 ①状态寄存器 状态寄存器包含有ALU(复术逻辑运算单元)的算术状态,复位状态和对数据存储器的块选择,与任何寄存器一样,状态寄存器可以作为任何指令的目的寄存器。如果状态寄存器作为某指令的目的寄存器 ,而那条指令要影响Z、DC,C位的状态,则禁止写这三位。图4-4是 状态寄存器及其状态。 R/W R/W R/W R R R/W R/W R/W IRP RP1 RP0 TO PD Z DC C bit7 bit0 其中C是进位位,对ADDWF和ADDLW指令,当这一位为1,表示指令 运算的结果的最高有效位产生了进位输出。减法指令执行的是加第二 操作数的新码。对于循环指令(RRF,RLF),这一位即可以来自于源寄存器的高位,也可以来自于低位。如果这一位为0,表明结果的最高有效位没有产生进位输出。对于减法,这一位的极性取反。DC是数字进位或数字借位位。当这一位为1时,结果的D3位向D4位有进位,否则无进位。对于减法,这位的极性取反。Z是结果为0标志。当这一位为1时,表明算术运算和逻辑运算的结果为0,否则这一位为0,表明运算结果不为0。PD:低功耗位。当这一位为1表明电源加上按正常供电或执行了C LRWDT指令以后,这一位为0表示执行了SLEEP指令(即器件进入了低功 耗状态)。TO超时位。当这一位为1时,表明电源加上,进入了正常供电,且执行了CLRWDT和SLEEP指令,这一位为0表明产生了看门狗计时器超时。 RP1:RP0,作为直接寻址的数据存储器的块选择位。 RP1:RP=00状态,选择0块(地址00H~7FH)。 RP1:RP0=01状态,选择1块(地址80H~FFH)。 RP1:RP0=10选择2块(地址100H~17FH)。 RP1:RP0=11选择3块(地址180H~1FFH)。 每块128个字节,PIC16C84只使用RP0位,RP1编程时设置为0。不允许使用RP1为通用读/写位,这可能影响与将来产品的兼容性。IRP寄存器块选择位(作为间接寻址),当这一位设置为0,选择 0.1块(地址00H~FFH),当这一位为1时,选择2.3块(地址100H~1FFH)。PIC16C84不使用IRP位,IRP位在编程时为0。状态寄存器中的Z、DC,C位是根据器件的逻辑来置1或清0。而TO,PD位是不可写入的。状态寄存器作为目的寄存器的指令的结果将有不同的内容。例如CLRF STATUS(清0状态寄存器)。结果状态寄存器的内容为000uuluu。其中u表示不改变。只有BCF,BSF,SWAPF和MOVW F这些指令可以用来改变STATUS寄存器的内容,因为这几条指令不影响任何状态位。 ②OPTION寄存器 OPTION寄存器是可读,可写的寄存器,它包含了各种控制位以配 置TMRO/WDT的预分频器,外部INT中断,TMRO和在PORTB的微弱上拉。图4-5是OPTION寄存器各位的功能。 R/W R/W R/W R/W R/W R/W R/ W R/W RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 bit7 bit0 其中PS2,PS1,PS0为预分频器的值的选择。(与PIC16C6X的规定 相同)。PSA位是将预分频器分配给WDT(看门狗计时器,或TMR0)。 TOSE是为TMRO选择跳变信号 INTEDG是为INT中断引脚选择跳变信号。 RBPU用来打开或关闭PORTB内部的上拉电阻。 OPTION的所有位的定义同PIC16C6X系列。 ③INTCON寄存器 INTCON是可读可写的寄存器,它包含了各中断源允许或禁止中断 。图4-6是PIC16C84的INTCON寄存器 R/W R/W R/W R/W R/W R/W R/W R/W GIE EEIE TOIE INTE RBIF TOIF INTIF RB IF bit7 bit0 其中RBIF是RB端口改变中断标志位。此位为1,表明RB<7:4>输入中至少有一位发生了改变,它必须用软件清0这一位。否则为0,即 RB<7:4>输入中没有改变。 ? ? ? ? ? INTIF是外部中断标志位。当这一位为1时,表明有外部中断发生 ,它必须用软件将其清0,否则为0,表明没有外部中断发生。 TOIF是TMRO溢出中断标志。这一位为1,表明TMRO发生了溢出,必须由软件将这一位清0,否则为0,表明TMRO没有溢出发生 RBIE是RB端口改变中断的允许或禁止位,设置此位为1,允许中断,为0禁止。 INTE是INT中断的允许或禁止位。设置为1允许中断方式,为0禁止 。 TOIE为TMRO溢出中断的允许或禁止位。设置为1允许TMRO溢出中断,否则禁止。 EEIE是EE(电可擦除)的写完成中断的允许与禁止位。当设置为1时,允许EE写完成中断,否则禁止。 GIE是所有中断的允许与禁止。设置为1时,允许所有不可屏蔽中断,为0禁止。 四、PCL和PCLATH 程序计数器(PC)是13位。低字节PCL是可读,可写的寄存器。PC的高字节(PCH)不是直接可读,可写的。PCLATH(PC latch high) 是作为PC<12:8>的保持寄存器,这几位的内容被传送到程序计数器 的高位。当程序计数器在执行CALL,GOTO或写PCL等指令时,即向PC装入新的值。PC的高位由PCLATH装入。 具有8个13位宽度的硬件堆栈。堆栈空间它既不是程序存储器的一部分,也不是数据存储器的一个部分,堆栈的指针是不可读/写的。当执行CALL指令或中断被响应时,整个13位的PC被压入堆栈。在执行RETURN,RETLW,RETFIE等指令时,堆栈被弹出。PUSH(压入)和POP(弹出)不影响PCLATH。 堆栈是作为循环缓冲器。当堆栈被压入38次后,第9次压入将占据第一次压入的位置,第十次压入将占据第二次压入的位置,等等。同样当堆栈弹出第9次时,与第一次弹出是一样的。注意,没有状态位来 指明堆栈上溢式下溢的条件。没有PUSH,POP指令助记符,但CALL,R ETURN,RETLW,RETFIE等指令的执行或中断发生,将实际发生压栈退栈。 4-2程序存储器的页 PIC16C84具有1K的程序存储器,CALL,GOTO指令只有11位的地址范围,这11位的地址范围允许分支在2K程序存储器页大小的范围。 为将来PIC16C8X程序存储器的扩展,必须由另外两位来说明程序 存储器的页。这些页位来自于PCLATH<4:3>。当执行CALL、GOTO指令时,用户必须确保这些页位的编程等指向要求的程序存储器的页。 如果执行CALL指令,整个13位被压入堆栈。所以对于返回指令不要求 对PCLATH<4:3>位的管理。因为PC的值将会由退栈而获得。注意:PIC16C84忽略了PCLATH<4:3>位,这些位用于程序存储页1,2,3(0800H-1FFFH),不可以把PIC16C84的PCLATH<4:3>位用作通用读/写位,这会影响将来产品的向上兼容。 4-3间接寻址,INDF和FSR的作用 INDF寄存器不是物理寄存器,只是被用来与FSR寄存器连接以执行间接寻址。 使用INDF寄存器,就可以实现间接寻址。 使用INDF寄存器的任何指令,实际寻址数据是由文件选择寄存器(FSR)所决定的。读INDF自身(FSR=0),将产生00H。向INDF写,结果无操作(显然可以提供状态位)。8位FSR寄存器同状态寄存器STATUS<7>(IRP)组合可以得到9位地址。 然而PIC16C84是不用IRP的。使用下面的例程序,通过间接寻址清零。2OH~2FH单位。 MOVLW 20H ;初始化RAM的指针 MOVF FSR ;到FSR NEXT CLRF INDF ;通过间接寻址清0,由FSR的内容所指问的寄存器。 INCF FSR ;(FSR)+1→FSR BIFSS FSR,4;当FSR的第4位为1跳过下一条指令 GOTO NEXT ;否则入。 五 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;设置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状态下,计时器是关闭的。
|
|
相关推荐
3 个讨论
|
|
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之分支间的操作
290 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】3D 图形显示
487 浏览 0 评论
614 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】SPI点亮16级灰阶OLED显示屏
478 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第四十二章 录音机实验
1114 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12205 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-23 03:11 , Processed in 0.574296 second(s), Total 42, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号