单片机汇编语言的几个小问题
1.在C语言中I/O我们被告知默认为高电平。而在汇编语言中,我们在进行I/O口输入时需要先对I/O进行置1操作。如MOV P0,#0FFH。这让我想到同样的外部硬件,为什么两者编程方式不一样呢。由此我想了解一下两者语言的一些特点。
2.汇编语言编程时,地址跳来跳去的,让小弟很困惑,这些地址是显然不是随便定义的,那么他的原理是什么呢?
以下题为例
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP SERVE
ORG 2000H这里的2000H是怎么确定的???????????????
MAIN:
MOV TMOD,#60H
MOV TL1,#9CH
MOV TH1,#9CH
MOV IE,#88H
SETB TR1
HERE: SJMP HERE
SERVE: CPL 1.0
RETI
谢谢各位了,不甚感激
[解决办法]
1.LZ看过C语言编译成汇编后的程序是什么样的嘛,看下吧。
2.51单片机地址0030H以下,一般是主程序和各种中断的入口地址。比如你程序里面0000H代表主程序的入口地址,而2000H就是你主程序代码的所在位置,这个地址可以随便选,只要不影响各种入口地址。而001bH就是你一种中断的入口地址了。
还是看下C语言编译成汇编语言,对比一下。呵呵
[解决办法]
二楼说的很清楚了,如果你不用中断的话,你当然可以从0000开始
[解决办法]
你的第一个问题。
如果P1,P2,P3作为普通的IO口的输入口来用的话,在读取引脚之前,先向端口写1,其实没有必要每次都写1,如果一直都作为普通输入口来用,写入一次就可以了,但是为了保证误操作,最好每次读之前都先写1.无论是汇编还是C语言都是一样的。这就是所谓的准双向口啊。
写1的目的是为了将端口内部连接端口和地之间的MOS管关闭,否则,无论外部是高还是低,读回来的数据都是低了。
下面是一片非常好的文章。请参考:
http://hi.baidu.com/flyman081/blog/item/4e86db3cd1aececdd46225de.html
[解决办法]
1.在C语言中I/O我们被告知默认为高电平。而在汇编语言中,我们在进行I/O口输入时需要先对I/O进行置1操作。如MOV P0,#0FFH。这让我想到同样的外部硬件,为什么两者编程方式不一样呢。由此我想了解一下两者语言的一些特点。
这个问题不用纠结了,不用置1
直接取数据就OK了