单片机汇编语言的几个小问题

方丈的寺院
Java领域优质创作者
博客专家认证
2011-11-28 05:33:47
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
谢谢各位了,不甚感激
...全文
182 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunny_2 2011-12-02
  • 打赏
  • 举报
回复
1楼,3楼正解。
a298028549 2011-11-30
  • 打赏
  • 举报
回复
楼上大牛说的好啊,其实多找点基础的书看看,虽然很多相同内容,但是还是能学到很多木有见过的知识,再就是多自己动手做做,有些东西试过才知道
Frog1228 2011-11-29
  • 打赏
  • 举报
回复
1楼,3楼
lbing7 2011-11-29
  • 打赏
  • 举报
回复
ORG 2000H这里的2000H是怎么确定的???????????????

程序员自己定的,这么理解就OK了,汇编上的开发,就是得程序员自己来规划存储空间

当然,指定在这里也许会有一些要求:

比如,不能占用中断向量表。各个程序段之间不能有重复。另外一些仿真环境的常驻程序占了部分程序空间,得避开这些地址

lbing7 2011-11-29
  • 打赏
  • 举报
回复
1.在C语言中I/O我们被告知默认为高电平。而在汇编语言中,我们在进行I/O口输入时需要先对I/O进行置1操作。如MOV P0,#0FFH。这让我想到同样的外部硬件,为什么两者编程方式不一样呢。由此我想了解一下两者语言的一些特点。

这个问题不用纠结了,不用置1

直接取数据就OK了

liangboone 2011-11-28
  • 打赏
  • 举报
回复
你的第一个问题。
如果P1,P2,P3作为普通的IO口的输入口来用的话,在读取引脚之前,先向端口写1,其实没有必要每次都写1,如果一直都作为普通输入口来用,写入一次就可以了,但是为了保证误操作,最好每次读之前都先写1.无论是汇编还是C语言都是一样的。这就是所谓的准双向口啊。
写1的目的是为了将端口内部连接端口和地之间的MOS管关闭,否则,无论外部是高还是低,读回来的数据都是低了。
下面是一片非常好的文章。请参考:
http://hi.baidu.com/flyman081/blog/item/4e86db3cd1aececdd46225de.html
御猫 2011-11-28
  • 打赏
  • 举报
回复
二楼说的很清楚了,如果你不用中断的话,你当然可以从0000开始
leiiiii 2011-11-28
  • 打赏
  • 举报
回复
1.LZ看过C语言编译成汇编后的程序是什么样的嘛,看下吧。
2.51单片机地址0030H以下,一般是主程序和各种中断的入口地址。比如你程序里面0000H代表主程序的入口地址,而2000H就是你主程序代码的所在位置,这个地址可以随便选,只要不影响各种入口地址。而001bH就是你一种中断的入口地址了。

还是看下C语言编译成汇编语言,对比一下。呵呵

27,372

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧