义隆单片机EMC-法宝级的EMC单片机编程技巧集锦 2007-03-16 11:44 EM78XXX单芯片自从问世以来已经陆续推出十余种不同等级的单芯片,小到8Pin的78P152,大到100Pin OTP的78P860,其汇编语言指令都是一样的,仅有57个,所以反复练习几次就能熟悉指令的用法。汇编语言用在 I/O控制非常容易,也有很高的效率,所以坊间的书籍大部份以讨论控制为主显,显少专门探讨软件技巧的篇幅,其实老手都知道,关于芯片之控制往往用到时再去翻一翻 DATA BOOK,注意一下 TIMING,然后准备一部示波器,三两下就可以搞定。反倒是算法用的好不好会大大影响产品的稳定度,所以有经验的程序设计师通常都有自己的一套葵花秘笈,所以要提升自己的功力最好的方式除了多练习之外,看看别人的程序也会使你进步很快。 BCD转换成 Binary 由于 EM78XXX是8位的微控器,因此为了节省内存,我们的范例仅以一个BYTE存放两位 BCD数为例,数字的范围在 0~99之间,转换后的结果放在 ACC,如果您需要更多的位数,相信您在看完之后应该不难自行修改才是。 程序一 这个范例程序共花费 13个指令CYCLE,需要两个变量空间,执行后会影响到原BCD的内容。 MOV A,BCD MOV TMP,A MOV A,@0x0F AND TMP,A SWAP BCD AND BCD,A BC PSW,0 RLC BCD ; *2 MOV A,BCD ADD TMP,A RLC BCD RLCA BCD ; *8 ADD A,TMP 说明 在程序一中所采用的方式应该算是最多人知道的方式,也是一种最直觉的方法,先将 BCD个位数保存起来,因为十位数必须要乘以10,所以利用移位的技巧乘以10再加上个位数,所得的答案放入 ACC。 程序二 在程序一的缺点,就是在执行程序以后,原本 BCD的内容已经在移位的过程中被破坏掉了,为了改善这项缺失,我们换一种方式看看。下面这个程序,我们企图改善前面的缺失,共花费 11个指令CYCLE,仍需要两个变量空间,但是执行后不会破坏原来BCD的内容。 SWAPA BCD MOV TMP,A MOV A,@0x0F AND BCD,A AND TMP,A BC PSW,0 RLCA TMP SWAP TMP RRC TMP ADD A,TMP ADD A,BCD 程 序 三 对 于 程 序 二 的 结 果 我 们 仍 然 不 满 意 , 似 乎 稍 嫌 复 杂 , 虽 然 速 度 有 所 改 善 , 但 在 内存 的 分 配 上 仍 有 余 地 , 所 以 我 们 再 改 善 成 程 序 三 的 型 态 。 转 换 过 程 只 花 费 10个指 令 CYCLE, 而 且 只 需 要 ...