OTP(OneTimeProgrammable)开发之汇编技巧

我开发的是义隆单片机,所以以义隆的汇编举例。

1.定义IO口

原来的方式: IO_Buz == 1
给IO置1,则需要写成

BS    P5.IO_Buz

更改方式: IO_Buz == P5.1

BS    IO_Buz

这样做的好处是,可避免程序更改带来的兼容问题,只要改文件定义部分就好,而且书写量变小。

2.定义常用的状态标志位

一般功能寄存器定义里都有类似如下的定义:

R3		==	0X03:rpage 0
STATUS	==	0X03:rpage 0

我们可以在下面加一些自己要的定义:

;{				
		;//因为这里定义了每一位,所以才不用指定寄存器
	    C	  	==  STATUS.0	;
	    DC	 	==  STATUS.1
	    Z	  	==  STATUS.2
	    P	  	==  STATUS.3 ;Power-down bit.
	    T	  	==  STATUS.4 ;
	    
	    IOCS  	==  STATUS.6 ; I/O REGISTER PEGER CONTER BIT
	    RST		==  STATUS.7 ;
;}

不要小看了这个定义,原来可能写的是

bs  STATUS.2

现在写的是

bs  Z

不但书写量变小,而且不容易出错,一下明白他的意思。

3.代码压缩语法技巧

3.1 调用之后马上返回

call 	F_XXX
Ret

可改为:

jmp	 F_XXX

好处是节省一个 ret 栈少压一层。坏处是破坏程序完整性,仿真的时候不方便跟踪。非最后开发需要几行ROM,不建议这样做。

3.2 多次对位比较跳转到相同的地址

Jbc 	B_XX1
Jmp		mainloop
Jbc		B_XX2
Jmp		mainloop

可改为:

jbs		B_XX1
Jbc		B_XX2
Jmp		mainloop

每两次比较跳转可节省一个 跳转。

4.中断现场保存

1.中断保存的原则是会破坏什么才保护什么,这里的技巧在于,你的中断程序不一定破坏了R4间接寻址寄存器,所以可以选择性保存。

mov 	V_A_Save,a
swap	V_A_Save

中断保存一定要用这个。
不可只用

mov		R,a

因为出中断还原的时候:

swapa	V_SF_Save
mov 	SF,a
swapa	V_A_Save

是先还原的状态寄存器,如果用 mov a,R 则会改变Z标。

5.改善兼容性

义隆IDE开发还支持条件编译,伪指令,这个利用好能大大增加兼容性。

5.1条件编译

条件编译用法:

if(条件)
/*代码块*/
endif

举例:
我常用的的OTP芯片是153S和372N,在使用IIC的时候,总是有端口设定上兼容性问题,每次都要琢磨改。终于在发现条件编译后才解放。
在开始的位置,先说明使用的OTP平台,需要改IO方向的SDA在哪个端口。

OTP_153S == 0;
OTP_372N == 1;
Port_SDA == P6

下面实际应用实现。

;;------------------153S---------------------
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值