单片机汇编指令问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 23:50:54
ANL P1,#0FEH
ORL P1,#01H
CLR IE0
8031执行上述程序就可在P1.0上产生一个宽度为二个机器周期的负脉冲。为什么?还有,为什么第一行的立即数前要加0,第二行不用呢?

ANL ORL 执行时消耗机器周期数都是一个机器周期,就产生一个宽度为二个机器周期的负脉冲

立即数的使用 凡以字母开头的立即数(十六进制数),须在其前面加 0 ,其他可以直接使用

这些都是一些书里最基本的东西,看书认真点吧~~

很简单的道理啦,第一行,是让P1与#FEH相与,结果自然是P1.0被置0,而其余的位不变,第二行,让P1与01相或,自然是P1.1被置1,其余位不变。

至于为什么要加0,是因为第一行的立即数里包含了字母,所以要加个0.这个与编译器有关,有的编译器可以不加0的。

第一行,把P1和 1111 1110 相与,(与是有0出0,单周期)所以P1.0清0
第二行,把P1和 0000 0001 相或,(或是有1出1,单周期)所以P1.0置1
第三行,关中断,和上面2行没什么关系

结论,这个程序不能产生宽度为2个机器周期的负脉冲
而是一个周期的负脉冲
楼上的同学不要开玩笑了- -

第一行加0是因为#后面不能跟16进制的字母

更正,第三行是清中断
如果你想要2个周期,第一行后面加一条NOP好了

再补充,
你这段程序是别的程序里抽出来的吧
断章取义的话可能是错的
再向上一条指令是不是也有把P1.0清0的操作
如果是,就是2周期了