当前位置:首页 > 单片机 > 单片机
[导读]在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向一个常数表。双数据指针可以改善同时有两个16位指针使用时的性能。作为一种增强特性,有许多

在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向一个常数表。双数据指针可以改善同时有两个16位指针使用时的性能。作为一种增强特性,有许多8051派生型器件支持双数据指针。以宏晶科技STC89系列的产品为例,DPTR被增强为DPTR0和DPTR1两个,仍然使用原来的地址,用另外一个SFR AUXR1的0位DPS来切换。当DPS位为0时,所有对DPTR的操作使用DPTR0;当DPS位为1时,所有对DPTR的操作使用DPTR1。这样,通过一个简单的INC AUXR1指令,就可以来回切换两个数据指针。

  1 Keil C51对双数据指针的支持情况

  作为一个常用的C51编译器,Keil C51是支持双数据指针的,但并不是直接支持。如果要在C51程序中使用双数据指针,有一些特别的要求。

  首先来看Keil C51是如何支持双数据指针的。

  在Keil C51的编译器手册中指出:#pragma modp2可以打开Philips或Atmel WM系列器件中有双DPTR的型号,并且可以提 
升以下库函数的性能,包括:memcpy,memmove,memcmp,strcpy,strcmp。

  Keil公司也提供了一个对照表,对比性能的提升。对比的型号是8051和Dallas 320,函数是memcpy块拷贝。对照表如下:

  看起来似乎使用库函数就可以大幅度提高程序性能,但实际上这样做并不能保证一定可以提高程序性能。首先Dallas 320是4T的CPU,本身就比12T的8051快。其次,以memcpy为例,它的原型是void*memcpy(void*s1,const void*s2,int len),其传人参数有3个,合计8字节,要使用数据段来传送。在数据量少的情况下,参数传递的开销就有可能大过数据传递的开销。如果想要在数据块拷贝或移动的同时对数据加以处理,比如在一个目的数据块后面加上一个校验和,那么使用库函数是办不到的,只有通过循环来进行。当数据块的源和目都是16位地址时,每一次循环都会有两次对数据指针的赋值,在源地址和目地址之间来回切换,这时采用双数据指针会有效地提高程序性能。如果要在程序中直接生成使用双数据指针的代码,目前没有直接的编译指令。Keil公司在它的网站上曾说过多数据指针支持库函数,并且目前也未打算在编泽器中直接支持多数据指针。

  2 Keil C中直接生成双数据指针的代码

  实际上,Keil C51编译器还是可以直接生成使用双数据指针的代码的,只要没定好适当的优化级别,安排好适当的C51语句,编译器就会生成使用双数据指针的代码。下面给出一个例子,使用双数据指针将CODE区的一个16字节的数组拷贝到XDATA区。 编译后其中for循环的汇编代码主体如下:

  可以看到,汇编代码基本上是最简化的使用双数据指针的汇编程序。

  由上面的代码可知,在优化级别7(Extended Index Ac-cess Optimizing)的作用下,DPTR被调用了。通过类型转换和SFR指令的配合,双数据指针指令被生成。这足一个经验方法,基本上这是一个框架,可以在看到双DPTR调用被生成后加入其他语句,在块操作的同时处理数据。

  3 调试环境的设定

  在Keil uVision2环境下,软件仿真Philips或AtmelWM系列器件中有双DPTR的型号时,仿真器中会有AUXR1、DPTR0、DPTR1这3个寄存器。如果不使能双DPTR特性,仿真时DPTR的值是混乱的。对于宏晶科技STC89系列器件的双DPTR特性,打开软件仿真设定的具体步骤是:在File/Device Database菜单中选择STC的某一具体型号,在Options框中"CPU="一项后加上MODP2,然后单击Update更新器件库。打开双数据指针调试后,再启动Debug,就会有AUXR1、DPTR[0]、DPTR[1]这3个寄存器。当加载上述程序时,会清楚地看到双数据指针的操作和AUXR1的变化。

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

汽车解决方案必须满足对电磁能力 (EMC) 的严格要求,这从根本上是一个系统集成问题。随着 ECU 和线束的数量和复杂性的增加,问题只会变得更糟。挑战不是电子产品的增加,而是 OEM 上市时间需要更短的最终产品验证时间。...

关键字: EMC EMC防护

正在进行重要创新的第二个领域是电磁兼容性 (EMC)。这是获得电路批准的重要先决条件。开关稳压器总是会产生电磁辐射。发射是通过每个开关稳压器中的脉冲电流产生的。它们取决于开关频率和开关转换的速度。所用电源中的辐射和传导发...

关键字: 创新电源 EMC 开关频率

任何电子产品都必须通过适用的电磁兼容性 (EMC) 测试才能投放到预期市场。接受预防胜于治疗,从开发的早期阶段就设计合规性通常是理想的。可以采取各种方法,从应用已知的最佳实践到使用可用的 EMC 模拟器,以及在内部或与专...

关键字: 电磁兼容性 EMC

PathWave RFPro 与新思科技定制化编译器相辅相成,可提供无线晶片设计工作流程所需的整合式电磁模拟工具

关键字: 是德科技 集成电路 编译器

(全球TMT2022年6月15日讯)2022年7月6日-7日,国际独立第三方检测、检验和认证机构德国莱茵TUV大中华区(简称"TUV莱茵")将举办2022汽车质量安全论坛,聚焦"碳达峰、碳中和"背景下中国新能源汽车产业...

关键字: 汽车 新能源汽车 EMC 可持续发展

近日,EMC 测试与测量设备的行业领先供应商罗德与施瓦茨公司(以下简称“R&S 公司”)对外宣布,将于 2022 年 5-7 月举办【E 起向未来—R&S ELEKTRA 新品发布&电磁兼容在线技...

关键字: 罗德与施瓦茨 测试测量 EMC

进一步加强检测认证服务合作 首尔2022年5月17日 /美通社/ -- 近日,全球领先的检验检测认证机构DEKRA德凯与韩国产业技术试验院(KTL)在韩国首尔签署了MoU合作备忘录。DEKRA德凯集团执行副总裁、亚太区...

关键字: WALSH EMC RF AVS

电磁兼容性 (EMC)在医学应用工程中不可或缺是有其原因的。如果在医疗应用时, 无线通信出现干扰并中断, 这可能会为患者带来严重后果。有鉴于此, 电磁兼容性专家SCHURTER (硕特)与医疗行业的工程人员合作研发符合最...

关键字: SCHURTER EMC 医学

Heidenhain 的 EnDat 2.2 接口是用于线性或旋转位置反馈编码器的纯数字双向串行接口标准。EnDat 2.2 主站通过模式命令将传输的数据类型(如绝对位置、参数和诊断)发送到编码器。EnDat 2.2 接...

关键字: EnDat 2.2 接口 EMC

单片机

21600 篇文章

关注

发布文章

编辑精选

技术子站

关闭