历史上的今天
返回首页

历史上的今天

今天是:2024年12月14日(星期六)

2019年12月14日 | PIC16F87x单片机存储器特点及数据存储器使用规划

2019-12-14 来源:elecfans

国微芯科技公司的PICmicro单片机和其他单片机相比,在硬件结构和指令系统中采用了很多独有的设计。


PIC系列单片机硬件系统设计简洁,指令系统设计精练;采用哈佛总线结构,芯片内部数据总线和指令总线分离;选址方式简单。


PIC16F87x系列单片机是PIC16系列子系列,是中间档次产品。PIC系列与其他单片机相比,让人印象最深的特点可能要属其内存的分页结构,有很多习惯了其他单片机编程的人认为PIC单片机的内存分页带来很多不便。本文介绍在PIC1687x系列单片机中,根据数据变量的访问特性安排其在数据存储器中的位置的方法及其中断编程,从一方面说明内存的规划对编程的影响。

1 PIC16F87x单片机存储器特点

PIC16F87x单片机采用哈佛总线结构,程序存储器和数据存储器分别有自己的总线。数据存储器被分成4个页(BANK),每个页大小为128字节,RP1和RP0位可以用来进行页选择。数据存储器分为通用寄存器和特殊功能寄存器。


特殊功能寄存器是通过CPU和外围模块来控制单片机运行的寄存器。特殊功能寄存器分成两类:一类是与核心功能有关的特殊寄存器,如状态寄存器(STATUS)、FSR等;另一类是与外围特性有关的外设寄存器。通用寄存器文件可以通过文件寄存器直接访问,一般给用户系统用作变量存储。


特殊功能寄存器在每个页靠前的位置,有部分特殊功能寄存器(如STATUS)在每个页中都有,但其实共享一个物理存储,在PIC16F876/877中BANK0~ BANK3的后16个字节的通用寄存器也共享一个物理存储。在PIC16F874/873中通用寄存器也有类似的安排。可见厂家在设计安排这些存储器时已经考虑根据它们的访问特性安排其物理存储位置。


PIC16F87x系列单片机所有寄存器有两种访问方式,即直接寻址访问和间接寻址访问。当通过直接寻址访问时,先设置状态寄存器的RP1和RP0位进行页(BANK)选择,每个页内具体偏移地址则由访问寄存器的指令给出。汇编代码可以将页选择代码写成宏,例如:

BANK0 MACRO ;选择页0

bcf STATUS,RP0

bcf STATUS,RP1

BANK1 MACRO ;选择页1

bsf STATUS,RP0

bcf STATUS,RP1

ENDM

假如变量tempVar1是在Bank1:

CBLOCK 0xA0

tempVar1

……

ENDC

则访问tempVar1可以用:

BANK1 ;选择TempVar1所在的页

movwf tempVar1 ;将w内容复制到tempVar1movwf

用上面传统的方法经常要考虑当前的变量是否与前面访问的处于同一个页。如果不是在同一个页,则要进行页选择;如果要进行页选择,还要考虑决定调用BANK0还是BANK1、BANK2等。


当然,单片机开发人员也没有必要每次访问变量时都要考虑变量是在那个页,MPASM 汇编语言提供伪指令BANKSEL可帮助完成页选择,如BANKSEL tempVar1。如果在访问变量时都用这个伪指令进行页选择,则可以避免编程时考虑变量页的问题,但这无疑使程序的效率降低。


间接寻址访问寄存器是通过INDF和FSR寄存器。INDF不是物理上的寄存器,访问INDF寄存器导致间接寻址,所要访问的寄存器地址由FSR内容给出。FSR是8位的,可以给出地址空间是256字节,而页大小是128字节,所以间接寻址一样存在页选择的问题。但与直接访问的页选择机制不同,它是通过IRP一个位来进行页选择的。当然,这个时候所指的“页”,应该是256字节。

2 数据存储器使用规划

在用汇编语言开发的应用系统中,与用高级语言一样存在变量存储特性问题,如在c语言中有元素型的变量(如int、char等),也有集合型或结构型的(如数组和结构等)。类似地,在汇编语言开发中一样存在单个变量和块类型的变量,如运算过程的临时变量,RS232通信缓冲区的数据指针、数据长度等,这些是元素型变量;也有块类型的变量,如RS232通信的缓冲区等。一般元素型变量在代码中出现频繁,比较适合用直接寻址访问方式,而块类型变量在变量中的出现相对比较集中,比较适合用间接寻址访问方式。


数据存储器使用规划的方法就是把变量分成元素类型变量和块类型变量,将元素变量都定义在页0(BANK0),而将缓冲区型的变量都放在其他页(当然,若BANK0有空间,也可将缓冲区变量定义在BANK0)。在访问元素变量时,都用直接寻址,而对于块类型变量都采用间接寻址访问。这样整个程序初始化时就可以将RP1:RP0位设置为00,即选择BANK0,以后访问元素类型变量都不再进行页选择。这样程序开发过程基本就不要考虑分页的问题,可以像MCS-51等其他系列的单片机一样使用变量了。


当然还有一部分特殊寄存器是定义在BANK2~BANK3之间的。对于访问这些非页0内的特殊寄存器,必须进行页选择。访问完这些特殊寄存器,把页选择重新设置为BANK0,同时要注意在访问特殊寄存器过程中必须关闭中断(这与中断现场保护代码实现有关,参见下面中断处理部分)。在PIC单片机中,一般只是把与设置相关或者与外围相关的寄存器放在BANK1~BANK3。根据经验,除了在系统初始化部分代码中,在其他地方访问这些特殊寄存器是很少见的。至于访问这些特殊寄存器时要关中断,除了考虑下面保护现场的因素外,还有一个原因:这些特殊寄存器多是与外围相关和中断相关的,访问修改它们,从安全可靠角度也是应该要先关闭中断的。对于块类型变量,都统一使用间接选址访问;对于PIC16F873/874芯片,其通用寄存器都在BANK0和BANK1中,如果使用间接选址,则初始化之后,也不存在设置IRP进行页选择的问题。对于876/877芯片,当在访问BANK0~BANK1和BANK2~BANK3之间切换时,还须正确设置IRP位。

3 中断编程

中断现场的保护是中断技术中一个很重要的环节。对于PIC16F87x单片机,在进入中断服务程序期间,只有返回地址,即程序计数器PC的值被自动压入硬件堆栈;而在中断处理程序中,一般必须像使用WReg、STATUS等寄存器一样,在中断处理程序开始处,就备份这些寄存器的内容,即进行所谓的现场保护。


PIC16F87x子系列单片机具备的中断源多达14种,中断矢量只有1个,并且各个中断源之间也没有优先级别之分,不具备非屏蔽中断。PIC单片机中采用的是硬件堆栈结构,不占用程序存储器空间,也不占用数据存储器空间,同时也无需用户去操作堆栈指针;但同时也就决定了它不具备其他单片机指令系统中的压栈(PUSH)和出栈(POP)指令。实现中断现场保护时,不能用堆栈来实现,而是通过变量的复制备份来实现。一般的实现办法是:先确定要保护的现场,一般包括WReg、STATUS等寄存器的内容,然后在各个页都定义与这些寄存器对应的变量,以备份现场。发生中断时,在中断处理代码开始处先将这些现场寄存器内容复制到备份变量,退出中断处理时再复制回去恢复现场:
PIC16F87x单片机存储器特点及数据存储器使用规划

因为中断发生具有随机性,发生中断时当前的页是哪个也具有不确定性,所以只在某个页(如BANK0)中定义一套备份变量w_temp、status_temp等,处理起来是很麻烦的,也要耗费CPU 处理时间,所以一般在每个页BANK都定义了一套用于备份现场的变量。这显然是浪费空间的办法。


进行数据存储器的变量规划后,程序的执行过程都是在BANK0,因此在BANK0定义一套备份变量就可以了。要备份的现场包含哪些寄存器,可以根据系统具体情况而定。


基于上面设计的中断处理程序,总是默认当前的页是BANK0。如果在访问一些不在BANK0的特殊寄存器而没有关闭中断,而刚好此时发生中断,则此时不能正确访问到wREG_TEMP等备份变量了,这种情况就是个错误。

结语

用PIC16F87x单片机开发室内监控系统,进行变量的规划,免去大量的页选择问题带来的不便,能够避免分页没处理好而带来程序BUG。PIC系列单片机都有类似的硬件结构和指令系统,所以存储器的规划对于其他PIC系列单片机应该也是起作用的。另外,这也从另一个角度说明,在设计阶段对系统变量的物理存储进行适当的规划,有时会得到意想不到的效果。

推荐阅读

史海拾趣

Deutsch公司的发展小趣事

在竞争激烈的电子行业中,品质控制和品牌建设至关重要。Deutsch公司深知这一点,因此始终将品质控制和品牌建设作为公司的重要任务。公司建立了严格的质量管理体系,确保产品的每一个细节都符合高标准。同时,通过精心策划的品牌推广活动,Deutsch公司的品牌形象逐渐深入人心。这些努力不仅提升了公司的市场地位,也增强了客户对公司的忠诚度。

Chyao Shiunn Electronic Industrial Ltd公司的发展小趣事

为了进一步扩大业务范围,Chyao Shiunn开始实施全球化战略。公司积极寻求与国际知名企业的合作机会,通过技术合作、合资经营等方式拓展海外市场。同时,公司还加强了对海外市场的调研和分析,根据市场需求调整产品策略和生产计划。这些举措使得公司的业务遍布全球多个国家和地区,实现了合作共赢的局面。

DMS Electronic Components, Inc公司的发展小趣事

DMS深知品质对于企业的重要性,因此从一开始就建立了严格的质量管理体系。公司采用先进的生产设备和工艺,对每一个环节都进行严格把关,确保产品质量符合国际标准。DMS还积极参与国际认证,通过ISO9001、CE、UL等认证,进一步提升了品牌的国际竞争力。

ATOP_Technologies公司的发展小趣事

ATOP Technologies自1989年创立以来,以创新、智能、整合、坚持为核心价值观,初期主要专注于工业自动化领域的产品研发。在创立初期,公司面临着资金紧张、市场竞争激烈等挑战。然而,凭借着对技术的深刻理解和对市场的敏锐洞察,ATOP Technologies逐步在工业自动化领域站稳脚跟,并开始积累起一批忠实的客户。

GE (General Electric)公司的发展小趣事
检查各电机是否正常运转,有无异响或过热现象。
海芯科技(AVIA)公司的发展小趣事

面对电子行业的快速变化和市场竞争的加剧,海芯科技始终保持着对技术创新的追求和投入。公司不断引进新技术、新工艺和新材料,对现有产品进行升级和改进,同时也在不断探索和研发新的产品和技术。这些技术升级和创新发展不仅提升了公司的核心竞争力,也为公司在未来市场竞争中保持领先地位提供了有力保障。

这五个故事展示了海芯科技在电子行业中的发展历程和取得的成就。通过不断的努力和创新,海芯科技已经逐渐成为了电子行业中的佼佼者,为行业的发展做出了积极的贡献。

问答坊 | AI 解惑

【晒电路】马达调速电路

1.长假,预祝大家双节快乐 2.大家【晒电路】,才是真的【晒电路】,晒 完我就回家了 3.正题 在许多应用场合,需要随时通过调整马达的转速实现调整风量、流量等目的。过去通常采用通过调整串入马达的电感量来实现对马达转速的控制,这种方法存在 ...…

查看全部问答>

招聘WINDOW CE 应用软件工程 2名

1.精通C++或C语言,能熟练使用EVC或VS2005等工具开发应用软件. 2.有多媒体,GPRS网络应用开发经验者优先. 3.有游戏软件编程经验着优先. 4.熟悉windows ce 系统优先. 5.有较强的团队合作精神,富有责任心. 6.待遇面议. 请把您的简历和作品发送到s ...…

查看全部问答>

ARM7芯片哪个口接按键?

我想用D1口接按键,可以吗? 用什么指令可以让D1口设置为高电平?(MOV D1 #0FFH行吗?)…

查看全部问答>

请教IAR下Release的脚本文件设置

                                 我的工程程序改自IAR自带的,它里面只有Debug的脚本,我填加了个Release,用debug in flash的脚本,结果发现生成的 ...…

查看全部问答>

求助

我写了一个测脉冲宽度的程序,但是执行时总出现乱码,哪位高手给指点一下 #include<reg51.h>sbit CK=P3^2;int a,n,m;unsigned char x[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(int coda){ int i,j; for(i ...…

查看全部问答>

LED驱动中的问题

有个LED工作电流1A电压3.1V,现在选用芯片LM3405A来驱动LED,3.6V锂电池供电,手工搭的电路图以及芯片资料如附件。首先芯片的第一管脚是不是正对着芯片上的字左下角第一个管脚就是第一脚(我搭电路时就是这么搭的)?电路搭好(第四脚使能端与第五 ...…

查看全部问答>

富士通工业测控DIY活动总结

怀着对ARM的好奇和学习的冲动参加了这个活动。只会一点点51的我显然是低估了ARM的复杂程度。 因为没有接触过ARM,加上自己擅长的是结构设计。以为只有设计个外壳和内部结构还有面板就可以了。没想到项目只是做个板子就结束了。并不是以搞个成型的 ...…

查看全部问答>

收到板子啦,哇咔咔

一楼感谢,感谢芯灵思,感谢论坛,感谢ccav,求各类贺电,先来个果照 …

查看全部问答>

TI器件查找的快速方法

本帖最后由 dontium 于 2014-12-30 20:36 编辑   TI的网站,设计得还是很不错的,器件的查找也非常方便。-------这都得益于TI搞搞活动、搞调查问卷的结果,---- 集大家智慧帮TI赚钱。 第一,记住TI主页        ...…

查看全部问答>

MSP430F5529LP+CC3000学习心得(一)——与AP的连接

设备:MSP430F5529LP+CC3000 BoosterPack EVMSDK:CC3000 SDK_V1.11 、android下smart Config APPPatch:PatchProgrammerMSP430F5529LP-7.11.7.13.19开发环境:CCS 5.4.0第一步:硬件连接。第二步:对F5529LP进行Patch programmer。导入C:\\ti\\Pat ...…

查看全部问答>