原创 比较Keil和凌阳的unspIDE对片上外设寄存器赋值的几种方法的编译结果

2006-9-29 13:20 5740 13 8 分类: MCU/ 嵌入式

1、直接赋值:Keil中对外设直接赋值,查看汇编,只用一句话,而unspIDE没有这个能力


2、对内存映射地址通过指针赋值:


  //------------------------------


//Keil:


 unsigned char *p0=(unsigned char *)(0x80); 


/* MOV      R3,#0x00
MOV      R2,#0x00
MOV      R1,#P0(0x80) */


 *p0 = 0x55;
/*MOV      A,#0x55
LCALL    C?CSTPTR(C:0024) */


//----------------------------------


//unspIDE:


unsigned int *p0=(unsigned int *)(0x7000);


/*R2=0x7000


[BP]=R2*/


 *p0 = 0x55;


/*R2=[BP]


R3=0X55


R4=R2


[R4]=R3


*/


3、通过对结构体寄存器组地址访问:


//----------------------------------


//Keil:


REG1 = 0x44;
/*MOV      R0,#SP(0x81)
MOV      @R0,#0x44*/


//----------------------------------


//unspIDE:


REG1 = 0xEE;


/*R2=0xEE


[0x7001]=R2*/


其中结构体寄存器组是这么定义的:


typedef struct
{
 uint reg0;
 uint reg1;


...


}STreg;


#define  REG  ((volatile STreg *)(0x7000))     //Keil中是#define  REG  ((volatile STreg *)(0x80)) 


#define  REG1  REG->reg1


上面是一句C对应接着的屏蔽块里面的汇编,可以看出,Keil的效率比较高,虽然UNSP的单片机速度比51高很多,但是如果C编译器效率低的话也很难使这个优势发挥出来。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1053025 2006-9-29 15:19

投票~~~
相关推荐阅读
mubo_996067292 2010-11-07 23:09
继续升级,CTE1.3
新增:rms2vpp <rms value> -- sine signal amplitude convertvpp2rms <vpp value> -- sine signa...
mubo_996067292 2010-10-23 02:10
关于天灾
    胡公,温公,世之英杰。而其享国之日,天灾频现。自胡公七年(西历二千零八年)至于今日,三年之中,凡日蚀二,大地震二,大旱一。    方今之日,中国日强,使夷狄不敢正视,此千秋之功也。而剥其表视其...
mubo_996067292 2010-09-03 00:27
继续升级:mil-mm,db-倍数,m/s-km/h,电阻并联转换计算器
新增:    增加了电阻并联计算。另:   所有的转换和计算,输入数字的时候都不能有数字之外的字符。...
mubo_996067292 2010-08-27 00:47
mil-mm,db-倍数,m/s-km/h转换计算器
几组常用的转换。...
mubo_996067292 2010-08-03 22:59
mm和mil转换
命令行模式,四个命令:help显示帮助信息quit 退出程序mil2mm <mil值>  mil转换为mmmm2mil <mm值>  mm转换为mil 直接找了个朋友在单片机上...
mubo_996067292 2010-03-09 22:31
雨夜弹琴
雨落深圳寒,加班夜归晚。坐闻窗飒飒,发性抚琴弹。...
EE直播间
更多
我要评论
1
13
关闭 站长推荐上一条 /3 下一条