找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2834|回复: 7
收起左侧

我是单片机初学者,在纠结一个汇编语言问题

[复制链接]
ID:711279 发表于 2020-6-2 20:03 | 显示全部楼层 |阅读模式
0FFH啥意思,我百度了,说是255,但是F不是15吗?15*15是225啊!!就算是255或者是225,他怎么就是P1口置高电平为1啊?啊啊啊啊啊,好烦啊。,为啥ORG后是0040H,0040H又是啥意思,下面的ORG 0200H又是什么意思呢,大佬们能讲一下吗,?这个程序配上我所示的图为按下一个开关,对应的灯就亮。题目如图,我运行完后好使,我这么扒的程序对吗。程序我也不是太懂。

AJMP  MAIN
                ORG   0040H
MAIN:       MOV P1, #0FFH
                MOV A,#0FH
                MOV P1,A
KEYSC:   MOV A,P1
                ANL A,#00001111B
                SWAP A
                ORL A,#0FH
                MOV P1,A
                AJMP KEYSC
                ORG 0200H
DELAY50: MOV R7,200
D1:           MOV R6,123
                NOP
D2:           DJNZ R6,D2
D3:           DJNZ R7,D1
                RET
                END


按键.JPG
按键.png
回复

使用道具 举报

ID:155507 发表于 2020-6-3 08:35 | 显示全部楼层
#0FFH是单片机汇编语言程序中一个来表示8位二进制数的16进制表示方法,#表示这是一个数字,0是汇编语言的规定,即当16进制数的高位数大于9时,前面要加0,FF是这个16进制数的数值,即255,H是16进制数的尾缀。

不是15*15 ,  是 15*16 + 15 =255  是16进制的

回复

使用道具 举报

ID:711279 发表于 2020-6-3 09:25 | 显示全部楼层
angmall 发表于 2020-6-3 08:35
#0FFH是单片机汇编语言程序中一个来表示8位二进制数的16进制表示方法,#表示这是一个数字,0是汇编语言的规 ...

ffh,是255,那就是F*H+F?15*16+15?我这么理解可以吗
回复

使用道具 举报

ID:401564 发表于 2020-6-3 11:25 | 显示全部楼层
不要纠结于这种没有多少重要性的问题,也不要想当然的去认为,编程是一个严谨的东西,没有“按道理来说”“正常情况下”“我觉得……”之类的,它只有“ 是”“不是”
1:0FFH=FF,0和H是编译器用规定的,FF就是一个两位16进制的数,它就是等于255,不等于F*F,88也一样的不等于8*8
它为什么让这个端口变成高电平:这个是8051单片机入门的基础知识,你不明白就说明你的基础不好,应该再去看一下基础
2:ORG 0040H的意思是:下面这个代码是从程序存储空间的0040H地址开始的,0040H换成其它的数值也是一样相对应的
正确的应该是:
ORG  0000H
LJMP     MAIN
ORG     0100H
MAIN:

ORG 0200H没有必要,一般来说,只有做表格的时候才会需要重新指定ORG的
回复

使用道具 举报

ID:261025 发表于 2020-6-3 12:52 | 显示全部楼层
#0FFH=#11111111B    8个1从左到右是端口7到0     
MOV P1, #0FFH 意思是P1端口的P1.7到P1.0全都输出高电平  
如果把P1换成P2就是P2的P2.7到P2.0都是高电平   
想让哪个端口变低电平就把哪个1变成0
比如#7FH=#01111111B 就是P1.7为低电平 其它的为高电平  
ORG我也不懂  删了它程序照样运行
回复

使用道具 举报

ID:711279 发表于 2020-6-4 11:02 | 显示全部楼层
Y_G_G 发表于 2020-6-3 11:25
不要纠结于这种没有多少重要性的问题,也不要想当然的去认为,编程是一个严谨的东西,没有“按道理来说”“ ...

说的很详细,谢谢哥!
回复

使用道具 举报

ID:402345 发表于 2020-8-2 22:47 | 显示全部楼层
ORG   0040H  这个语句的意思是后面的程序从0040H这个地址的程序存储空间开始   这个作用主要是为了避免一些隐性的冲突,比如定时器0的入口地址是000BH,其他还是外部中断的入口地址、串口通信的入口地址等等。其实从0030H这个地址以后都没有啥入口地址,所以在编写主程序前一般会加  ORG  0030H或0030以后    来避免主程序以一些入口地址产生冲突。
回复

使用道具 举报

ID:313246 发表于 2020-8-4 17:12 | 显示全部楼层
服了,知道十六进制吗?15*16+15
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表