历史上的今天
返回首页

历史上的今天

今天是:2024年11月18日(星期一)

正在发生

2019年11月18日 | PC、PCL、PCLATCH三者之间的关系

2019-11-18 来源:51hei

PC是程序计数器, 在PIC16中档单片机中是13位宽。


PCL是程序计数器的低8位,可读写。在程序执行过程中, 因PC会不断改变, 所以PCL也会跟着改变。同样,改变PCL的值会改变PC的值, 从而实现程序的跳转。


PCLATH是程序计数器的高5位锁存器, 但并不等于PC的高5位。PC的改变并不直接映射到PCLATH,同样,改变PCLATH并不直接改变PC。只有特定的指令PCLATH才会装载到PC中,即CALL、GOTO、ADDWF、PCL及F 指令。


2  程序跳转

(1)  PC绝对跳转

  CALL 或 GOTO 指令可实现程序的绝对跳转。

  例:

  CALL SUB1 

  GOTO SUB2

  说明: PC的低11位地址来自于操作码,高2位来自于PCLATH的第5位和第4位。因为操作码只包含11位子程序的地址,高2位来自于PCLATH,因此在调用子程序前必须正确设置PCLATH。当然不是每次调用子程序前都要设置PCLATH,但要保证调用子程序前,PCLATH已包含正确的值。

  设置PCLATH可使用宏命令:PAGESEL。

  例:

  PAGESEL SUB1   

  CALL SUB1

(2)  PC相对跳转

  用ADDWF 指令可实现程序的相对跳转。

  例:

  ADDWF PCL,F   

  RETLW 0x01 

  RETLW 0X02

  说明:PC的低8位地址等于当前的PCL与W相加后的值,高5位来自于PCLATH的低5位。因此在使用这条指令之前必须正确设置PCLATH,特别注意PCL与W相加后如果有进位,必须相应地对PCLATH加1。


3  查表的实现

虽然PIC16单片机没有专用的查表指令,但可利用ADDWF PCL,F指令实现查表,下面举例说明。

(1)  简单的查表程序

  程序说明: OFFSET为偏移地址, 假设程序起始地址为0X20, PCL与W相加后不会有进位。

  ORG 0X20 

MAIN: 

  MOVLW 0X01 

  MOVWF OFFSET 

  CLRF PCLATH 

  CALL LOOK_UP 

  MOVWF VALUE 

  GOTO $ 

LOOK_UP 

  MOVF OFFSET,W 

  ADDWF PCL,F 

  RETLW 0X01 

  RETLW 0X02 

  RETLW 0X03 

  RETLW 0X04 

  RETLW 0X05 

  RETLW 0X06 

  ……

(2)  通用的的查表程序

  程序说明: OFFSET为偏移地址,可将MAIN、LOOK_UP、TABLE三个子程序置于程序区任意位置。

MAIN 

  MOVLW 0X05 

  MOVWF OFFSET 

  PAGESEL LOOK_UP 

  CALL LOOK_UP 

  MOVWF VALUE 

  GOTO $ 

LOOK_UP 

  MOVLW HIGH(TABLE) 

  MOVWF PCLATH 

  MOVLW LOW(TABLE) 

  ADDWF OFFSET,W 

  BTFSC STATUS,C 

  INCF PCLATH,F 

  MOVF OFFSET,W 

TABLE 

  ADDWF PCL,F 

dt 0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x0a,0x0b,0x0c,0x0D,0x0E,0x0F ……

(3)  大于256个数据的查表程序

  程序说明: OFFSETH、OFFSETL为偏移地址的高8位和低8位。可将MAIN、LOOK_UP、TABLE三个子程序置于程序区任意位置。

MAIN 

  MOVLW 0X00 

  MOVWF OFFSETH 

  MOVLW 0X10 

  MOVWF OFFSETL 

  PAGESEL LOOK_UP 

  CALL LOOK_UP 

  MOVWF VALUE 

LOOK_UP 

  MOVLW HIGH(TABLE) 

  ADDWF OFFSETH,W 

  MOVWF PCLATH 

  MOVLW LOW(TABLE) 

  ADDWF OFFSETL,W 

  BTFSC STATUS,C 

  INCF PCLATH,F 

  MOVF OFFSETL,W 

TABLE 

  ADDWF PCL,F 

  dt 0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x0a,0x0b,0x0c,0x0D,0x0E,0x0F 

  dt 0x00,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x0a,0x0b,0x0c,0x0d,0x0e 

  dt 0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x0a,0x0b,0x0c,0x0d,0x0e,0x00 

  dt 0x00,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x0a,0x0b,0x0c,0x0d,0x0e 


推荐阅读

史海拾趣

Avery Dennison公司的发展小趣事

Avery Dennison一直致力于技术创新和产品开发。例如,公司在水胶技术方面取得了显著进展,成功开发出环保且高效的水性乳液聚合物粘胶剂,成为第一家大规模供应这类产品的标签制造商。此外,公司还推出了具有智能功能的RFID标签产品组合,为零售、食品、物流、医疗等行业提供了数字化解决方案。这些创新产品不仅提升了公司的竞争力,也为客户创造了更大的价值。

Abilis Systems公司的发展小趣事

Avery Dennison与众多知名企业建立了紧密的合作关系,共同推动行业发展。例如,公司与利郎服饰的合作就是一个典型的例子。通过提供Embelex™系列装饰标、厂内打印解决方案、RFID解决方案以及3D标签打样数字化解决方案等,Avery Dennison助力利郎实现了数字化转型和业务扩张。这种合作模式不仅提升了双方的市场地位,也为整个服装行业带来了创新动力。

DuPont公司的发展小趣事

为了进一步拓展电子市场,DuPont公司积极寻求与全球知名电子企业的合作。通过与国际知名品牌的战略合作,DuPont成功进入了多个重要的电子市场领域,如智能手机、平板电脑、汽车电子等。这些合作不仅为DuPont公司带来了广阔的市场空间,也促进了公司在电子领域的技术创新和产品升级。

Alps Alpine Co Ltd公司的发展小趣事

为了进一步拓展电子市场,DuPont公司积极寻求与全球知名电子企业的合作。通过与国际知名品牌的战略合作,DuPont成功进入了多个重要的电子市场领域,如智能手机、平板电脑、汽车电子等。这些合作不仅为DuPont公司带来了广阔的市场空间,也促进了公司在电子领域的技术创新和产品升级。

Curtis Instruments Inc公司的发展小趣事

1995年,Curtis在中国建立了独资企业科蒂斯仪器(中国)有限公司,其制造工厂于1997年投入生产。经过近20年的发展,Curtis在中国已经建立了完善的生产、研发和销售体系。2012年,Curtis在苏州工业园区成立了独立的科蒂斯技术(苏州)有限公司,进一步提升了在中国的研发和生产能力。如今,Curtis中国已成为Curtis在全球的第6个研发中心,也是中国最现代化的生产电动车辆驱动控制系统的厂商之一。

DATATRONICS公司的发展小趣事

DATATRONICS高度重视人才战略的实施。公司积极引进和培养了一批高素质的技术人才和管理人才,为他们提供了良好的工作环境和发展空间。同时,DATATRONICS还建立了完善的激励机制和培训机制,鼓励员工不断创新和进取,共同推动公司的持续发展。

问答坊 | AI 解惑

首个消费者命名的数码品牌呼之欲出

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 7月13日,“安全存储专家”旅之星联手搜狐数码频道,在全国范围内发动“数码品牌征名行动”,向广大消费者征集旅之星旗下数码品牌的名称。经过海选、预选和精选几个阶段,首个由消费者命名的国 ...…

查看全部问答>

各种集成电路简介(经典ZZ)

第一节 三端稳压IC 电子产品中常见到的三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。故名思义,三端IC是指这种稳压用的集成电路只有三条引脚输出,分别是输入端、接地端和输出端。它的样子象是普通 ...…

查看全部问答>

元件封装

       希望能帮到有需要的朋友…

查看全部问答>

设计高速电路板的注意事项

我最近针对一篇关于PCB特性阻抗的文章写了封信。该文阐述了工艺过程的变化是怎样引起实际阻抗发生变化的,以及怎样用精确的现场解决工具(field solver)来预见这种现象。我在信中指出,即使没有工艺的变化,其它因素也会引起实际阻抗很大的不同。在设 ...…

查看全部问答>

新手共享---GCC参数详解

[声明]    这篇文档是我的关于gcc参数的笔记,我很怀念dos年代我用小本子,纪录所有的dos    命令的参数.哈哈,下面的东西可能也不是很全面,我参考了很多的书,和gcc的帮助.    不全的原因是,有可能我还没有看到这个 ...…

查看全部问答>

发光的出气筒

设计师Jin-Sook Kim给我们带来了一款发泄工具,当你用力击打这个出气筒的时候,内置的LED灯便会随之点亮,并会以发光来回应每次击打。据说这样有助于发泄者内心由黑暗迅速走向光明。…

查看全部问答>

如何实现netui修改?

我想将wifi模块的配置信息在自己的应用程序中实现:思路是通过应用程序修改注册表,然后netui调用注册表里的值,主要包括wifi的密码,ap的名称等的保存。但是不知道NETUI中这一部分是在什么地方,代码里面没有找到。…

查看全部问答>

Wince 6.0 R3, MUI,控制面板快捷方式还是默认语言。

Wince 6.0 R3, MUI,控制面板快捷方式还是默认语言。 例如NK包含了4国语言,默认是中文,那么无论进入哪一个语言,控制面板的快捷方式,资源管理器的快捷方式还有网络,都是中文。 这个问题难道了好多人。 …

查看全部问答>

设备列表

谁知道怎么编程怎么实现获取系统中的硬件列表 或查看某一特定硬件是否连接正常…

查看全部问答>

oled12V工作电压

焊接完通电。这个电压不对,实测为3.3V。应该是gdr信号没有输出导致的。 谁的屏电压正常,还是需要向oled配置一下呢?…

查看全部问答>