当前位置:首页 > 单片机 > 单片机
[导读]最近在研究单片机C51对汇编的接口问题。char和int等都比较简单,使用寄存器或固定地地址传值都是可以的,具体可以参考keil的C51 user‘s guide。本篇短文主要重点讨论一下A51下如何遵循C51的接口标准来实现C51的指针

最近在研究单片机C51对汇编的接口问题。char和int等都比较简单,使用寄存器或固定地地址传值都是可以的,具体可以参考keil的C51 user‘s guide。本篇短文主要重点讨论一下A51下如何遵循C51的接口标准来实现C51的指针。主要原因是,现在用C51的人越来越多,大家都图省事和方便。网上面有关A51的资料少得可怜,知道用汇编来实现代码优化的少之又少。本人是一直坚持用汇编写东西的。在嵌入式领域,很多东西都与硬件有关,多知道点底层东西还是有好处。


使用工具主要为keil,在windows 7环境下。C51测试程序如下:


#include

unsignedpos;

bitabc(unsigned*pos){

*pos=100;

return0;

}

voidmain(){

while(1){

abc(&pos);}


这是测试用源程序,很明显程序中使用了int型指针 pos。为了能够生成汇编代码,加入编译器控制:


#pragmaSRC

#pragmaSMALL

#include

unsignedpos;

bitabc(unsigned*pos){

*pos=100;

return0;

}

voidmain(){

while(1){

abc(&pos);

}

}

注意,#pragma必需在文件的开始位置,否则会报错。另外编译器可能会跳“ EXCEPTION 0021H: PATH OR FILE NOT FOUND:main.obj”,没有关系,我们的目标是生成汇编的src文件。编译后生成src如下:


;main.SRCgeneratedfrom:main.c

;COMPILERINVOKEDBY:

;D:ProgramFilesKeilC51BINC51.EXEmain.cBROWSEDEBUGOBJECTEXTENDTABS(2)

$NOMOD51

NAMEMAIN

;寄存器及内存声明

P0DATA080H

P1DATA090H

P2DATA0A0H

P3DATA0B0H

T0BIT0B0H.4

ACBIT0D0H.6

T1BIT0B0H.5

T2BIT090H.0

EABIT0A8H.7

IEDATA0A8H

EXF2BIT0C8H.6

RDBIT0B0H.7

ESBIT0A8H.4

IPDATA0B8H

RIBIT098H.0

INT0BIT0B0H.2

CYBIT0D0H.7

TIBIT098H.1

INT1BIT0B0H.3

RCAP2HDATA0CBH

PSBIT0B8H.4

SPDATA081H

T2EXBIT090H.1

OVBIT0D0H.2

RCAP2LDATA0CAH

C_T2BIT0C8H.1

WRBIT0B0H.6

RCLKBIT0C8H.5

TCLKBIT0C8H.4

SBUFDATA099H

PCONDATA087H

SCONDATA098H

TMODDATA089H

TCONDATA088H

IE0BIT088H.1

IE1BIT088H.3

BDATA0F0H

CP_RL2BIT0C8H.0

ACCDATA0E0H

ET0BIT0A8H.1

ET1BIT0A8H.3

TF0BIT088H.5

ET2BIT0A8H.5

TF1BIT088H.7

TF2BIT0C8H.7

RB8BIT098H.2

TH0DATA08CH

EX0BIT0A8H.0

IT0BIT088H.0

TH1DATA08DH

TB8BIT098H.3

EX1BIT0A8H.2

IT1BIT088H.2

TH2DATA0CDH

PBIT0D0H.0

SM0BIT098H.7

TL0DATA08AH

SM1BIT098H.6

TL1DATA08BH

SM2BIT098H.5

TL2DATA0CCH

PT0BIT0B8H.1

PT1BIT0B8H.3

RS0BIT0D0H.3

PT2BIT0B8H.5

TR0BIT088H.4

RS1BIT0D0H.4

TR1BIT088H.6

TR2BIT0C8H.2

PX0BIT0B8H.0

PX1BIT0B8H.2

DPHDATA083H

DPLDATA082H

EXEN2BIT0C8H.3

RENBIT098H.4

T2CONDATA0C8H

RXDBIT0B0H.0

TXDBIT0B0H.1

F0BIT0D0H.5

PSWDATA0D0H


?PR?_abc?MAINSEGMENTCODE

?PR?main?MAINSEGMENTCODE

?DT?MAINSEGMENTDATA

EXTRNCODE(?C?ISTPTR)

EXTRNCODE(?C_STARTUP)

PUBLICpos

PUBLICmain

PUBLIC_abc

RSEG?DT?MAIN

pos:DS2

;#pragmaSRC

;#pragmaSMALL

;#include

;

;unsignedpos;

;

;bitabc(unsigned*pos){

RSEG?PR?_abc?MAIN

_abc:

;SOURCELINE#7

;----Variable'pos?040'assignedtoRegister'R1/R2/R3'----

;*pos=100;

;SOURCELINE#8

;---------关键代码-------------------

CLRA

MOVB,#064H

LCALL?C?ISTPTR;return0;

;SOURCELINE#9

CLRC;}


;SOURCELINE#10

?C0001:RET

;ENDOF_abc;

;voidmain(){

RSEG?PR?main?MAIN

main:

USING0;SOURCELINE#12

?C0002:;while(1){

;SOURCELINE#13

;abc(&pos);

;SOURCELINE#14

;---------关键代码-------------------

MOVR3,#00H

MOVR2,#HIGH(pos)

MOVR1,#LOW(pos)

LCALL_abc;}

;SOURCELINE#15

SJMP?C0002

;ENDOFmainEND

对于A51的程序格式,这里不多解释,有兴趣可以自己去Keil官网学习。这里主要说一下指针的C51汇编接口。代码中内存和寄存器声明,这个不重要,可以跳过。主要看标记为关键代码的部分。我们可以看到,在main中,在调用abc函数前,主程序初始了三个寄存器,分别是R1R2R3,代码如下:

MOVR3,#00H

MOVR2,#HIGH(pos)

MOVR1,#LOW(pos)


这里得着重讲一下。很明显,这是寄存器传值。依据C51规定,指针传递使用R1R2R3寄存器。其中,Mem type in R3, MSB in R2, LSB in R1。也就是说,R3表指针类型,R1为指针内容低位,R2为内容高位。从上面三个语句可以看出,程序将类型设为0,将pos地址高位传给R2,低位给R1。接下来再看abc函数中的操作

CLR A

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

为增进大家对混合集成电路的认识,本文将对混合集成电路的相关内容予以介绍。

关键字: 电路 指数 集成电路

为增进大家对集成电路的认识,本文将对集成电路的种类、应用以及芯片的种类、应用予以介绍。

关键字: 电路 指数 集成电路

为增进大家对集成电路的认识,本文将对集成电路、集成电路和芯片的主要差异予以介绍。

关键字: 电路 指数 集成电路

Mar. 28, 2024 ---- TrendForce集邦咨询表示,除了铠侠(Kioxia)和西部数据(WDC)自今年第一季起提升产能利用率外,其它供应商大致维持低投产策略。尽管第二季NAND Flash采购量较第一...

关键字: SSD NAND Flash 智能手机

为增进大家对监控摄像机的认识,本文将对监控摄像机常见机型以及监控摄像机的维修技巧予以介绍。

关键字: 摄像机 指数 监控摄像机

为增进大家对监控摄像机的认识,本文将对监控摄像机的分类、监控摄像机的维修方法予以介绍。

关键字: 摄像机 指数 监控摄像机

为增进大家对监控摄像机的认识,本文将对监控摄像机的基础配件、监控摄像机的选择方法予以介绍。

关键字: 摄像机 指数 监控摄像机

Mar. 26, 2024 ---- 目前观察DRAM供应商库存虽已降低,但尚未回到健康水位,且在亏损状况逐渐改善的情况下,进一步提高产能利用率。不过,由于今年整体需求展望不佳,加上去年第四季起供应商已大幅度涨价,预期库...

关键字: DRAM AI DDR5

为增进大家对电磁炉的认识,本文将对电磁炉的一些异常予以介绍,并介绍电磁炉的一些使注意事项。

关键字: 电磁炉 指数 温度传感器

为增进大家对电磁炉的认识,本文将介绍如果维修电磁炉,并向大家介绍一些选购电磁炉时常常陷入的误区。

关键字: 电磁炉 指数 电磁灶
关闭
关闭