您的位置:首页 > 其它

EMC单片机学习四

2017-04-05 14:34 127 查看
ELAN单片机在使用中遇到的,值得注意的地方:

1,堆栈为5级,如果使用超过5级以上的子程序调用,在调用子程序执行CALL指令时,首先把PC+1入栈,然后转载R2低十位值;RET指令则是把堆栈栈顶数据装入PC。 经实际测试,在使用六级子程序调用时,进入各级子程序都可以,但在返回时,5、4、3、2、1都可以返回上一 级子程序,0级子程序则不能正确返回主程序,而是在返回和调用一级子程序指令的下一条指令之间不断循环,无法正确返回子程序

2,EM78P153中的P63引脚不能用做输出。

3,RET子程序的返回,RETI中断的返回.

4,若不用之I/O Pin浮接时,会造成IC的耗电,最好的处理方式就是将不用的 I/O Pin设定成Output Pin。

5,ROM一页可以写一页1K条指令,也就是1024行指令

6.指令时间:CLKS选0时,执行一条单周期指令时间:2/系统频率; CLKS选1时,执行一条单周期指令时间:4/系统频率

7,上电后清空RAM,这里需要根据数据手册来确定,不能想当然。由于上电后RAM中的数据处于不确定的状态,会给单片机的运算或者条件判断带来影响,所以是必须必须清空的

8, 用TCC作时钟,若时钟是32.768KHZ,预分频器是1:256,则一秒要中断几次?如何计算?

若Option选择 2 clocks,32768 / 2clks = 16384 Hz (1/16384)*256=0.015625秒

即TCC (R1)会每0.015625秒加1,

—-1秒 / 0.015625秒 = 64

—-也就是当TCC(R1)每增加 64 就是已经经过一秒了。若要每秒中断一次,则須先把 TCC(R1)搬入 256-64=192,

—-如此TCC每数64之后就会溢位,TCC溢位则产生中断。严格说,这并不是真正的一秒,在进行中断处理时,指令执行也花费时间,这些时间要算进去,否则误差会愈来愈大。

9,休眠模式Sleep,

初始化时 MOV PORT6 ,PORT6 ;为PORT6状态变化中断做准备

调用sleep之前

MOV A,@0B00001111 ;预分频器分配给WDT

CONTW

WDTC

MOV A,@0B00000000 ;禁止WDT

IOW WDTCR

MOV PORT6,PORT6 ;读PORT6状态

DISI

MOV A,@0B00000011 ;使能外部管脚中断

IOW IMR

;——————–

SLEP 调用sleep就会进入休眠模式;

;——————-

;唤醒从这句后面开始执行

WDTC

NOP

MOV A,@0B00000000 ;禁止WDT

IOW WDTCR

nop

mov a,@0b00000001

iow iocf

MOV A,@0B00000100

CONTW

;跳转到主程序中去

10,EMC的减法指令有三条,如下:

SUB A,R (R-A→A)

SUB R,A (R-A→R)

SUB A,K (K-A→A)

需要注意的是,A的位置不论在前面还是后面,A都是减数,不是被减数.

在EMC的指令系统中.当减法发生借位时,CY=0,未发生借位时CY=1.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: