EMC单片机学习四

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.

猜你喜欢

转载自blog.csdn.net/u013830926/article/details/69253763