当前位置:首页 > 单片机 > 单片机
[导读]最近在研究单片机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

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

Sept. 10, 2025 ---- 根据TrendForce集邦咨询最新发布的《全球电动车逆变器市场数据》,2025年第二季受惠纯电动车(BEV)销售成长,全球电动车(注1)牵引逆变器装机量达766万台,年增19%。...

关键字: 增程式电动车 SiC 牵引逆变器

Sept. 8, 2025 ---- 根据TrendForce集邦咨询最新调查,2025年第二季NVIDIA(英伟达) Blackwell平台规模化出货,以及北美CSP业者持续扩大布局General Server(通用型...

关键字: SSD DDR4 服务器

Sept. 4, 2025 ---- Apple(苹果)即将发布iPhone 17、iPhone 17 Air(暂名)、iPhone 17 Pro及Pro Max四款旗舰新机,除了外观辨识度升级,处理器性能、散热和拍摄功...

关键字: iPhone 16 A19处理器 折叠机

Sept. 3, 2025 ---- 根据TrendForce集邦咨询最新发布的《2025近眼显示市场趋势与技术分析》报告,2025年随着国际品牌陆续推出AR眼镜原型,以及Meta预计在近期发布AR眼镜Celeste,市...

关键字: AR眼镜 OLED

Sept. 2, 2025 ---- TrendForce集邦咨询表示,2025年第二季DRAM产业因一般型DRAM (Conventional DRAM)合约价上涨、出货量显著增长,加上HBM出货规模扩张,整体营收为3...

关键字: DRAM 智能手机 ASP

Sept. 1, 2025 ---- 根据TrendForce集邦咨询最新调查,2025年第二季因中国市场消费补贴引发的提前备货效应,以及下半年智能手机、笔电/PC、Server新品所需带动,整体晶圆代工产能利用率与出货...

关键字: 晶圆代工 智能手机 笔电

Aug. 28, 2025 ---- 根据TrendForce集邦咨询最新调查,2025年第二季NAND Flash产业虽面临平均销售价格(ASP)小幅下滑,所幸原厂减产策略缓解供需失衡,叠加中、美两大市场政策推动,整体...

关键字: NAND Flash SSD AI

Aug. 26, 2025 ---- NVIDIA(英伟达)近日推出的Jetson Thor被视为机器人的物理智慧核心,以Blackwell GPU、128 GB记忆体堆叠出2070 FP4 TFLOPS AI算力,是前...

关键字: 机器人 大型语言模型 AI算力

Aug. 21, 2025 ---- 根据TrendForce集邦咨询最新液冷产业研究,随着NVIDIA GB200 NVL72机柜式服务器于2025年放量出货,云端业者加速升级AI数据中心架构,促使液冷技术从早期试点迈...

关键字: AI 数据中心 服务器

除了充电电路外,锂电池的放电过程也需要保护。锂电池的放电电压不能低于3.0V,否则电池寿命会大幅缩短。为了实现这一保护,工程师们设计了DW01芯片与8205 MOS管的电路组合。DW01芯片能够监控锂电池的放电电压和电流...

关键字: 锂电池 电池
关闭