当前位置: 代码迷 >> 单片机 >> []stc89C52RC单片机怎么赋值给io口,等
  详细解决方案

[]stc89C52RC单片机怎么赋值给io口,等

热度:104   发布时间:2016-04-28 14:55:22.0
[求助]stc89C52RC单片机如何赋值给io口,急等!
stc89C52RC单片机,1~1000范围内任意整数,赋值给io口(P2(低8位)、P1^0(第9位)、P1^1(第10位))。
想先把整数转化为16进制数,然后给io赋值。但不会编,请高手指教。
------解决方案--------------------
先把整数移位成二进制,再赋值给IO口不就行了吗


------解决方案--------------------
1000以内的数,按理应该是用一个16位的数来存储
低八位直接送入P2
高的两位。先把所在的八位前6位给清0,再把P1口的低两位清0,取或运算送入P1口就可以了
------解决方案--------------------
引用:
1000以内的数,按理应该是用一个16位的数来存储
低八位直接送入P2
高的两位。先把所在的八位前6位给清0,再把P1口的低两位清0,取或运算送入P1口就可以了

高位前6位不要清零的吧,那个还有其他用的,可以先把P1口于运算0xfc,再把16进制数直接右移8位,然后取或运算进P1口
------解决方案--------------------
十进制直接转二进制  除以2取余数蛮,逐位把余数赋值给端口 行不?

------解决方案--------------------
引用:
先把整数移位成二进制,再赋值给IO口不就行了吗
这个 汇编移位指令难度有点大啊

不过楼主这个问题,方法有多种。
首先需要搞清的是出题的老师希望看到学生用那种思路。。。
------解决方案--------------------
楼上版主说的对,从中取出低8位,另外的2位做位操作取出,不需要做什么进制转换。
------解决方案--------------------
引用:
楼上版主说的对,从中取出低8位,另外的2位做位操作取出,不需要做什么进制转换。


 ++
大端小端,别搞错了。

标准52的指令集和寄存器,基本上都是8位的,因此不分大小端。
涉及大于8Bit操作应该是只有MOV DPTR, #imm一个指令,这个指令的编码是大端的。就是OPCode, Hi 8Bit, Lo 8Bit,共3字节。

其它的数据类型,在C里面是依靠 编译器实现的,Keil C51用的是大端模式
------解决方案--------------------
引用:
Quote: 引用:

1000以内的数,按理应该是用一个16位的数来存储
低八位直接送入P2
高的两位。先把所在的八位前6位给清0,再把P1口的低两位清0,取或运算送入P1口就可以了

高位前6位不要清零的吧,那个还有其他用的,可以先把P1口于运算0xfc,再把16进制数直接右移8位,然后取或运算进P1口


清0的意义是防止改动端口上其它位的值
------解决方案--------------------
P2 = int_val;
P1_0 = int_val & 0x100 ? 1 : 0;
P1_1 = int_val & 0x200 ? 1 : 0;

------解决方案--------------------
P2 = int_val;
P1 = (P1 & 0xfc) 
------解决方案--------------------
 ((int_val >> 8) & 3); /*这个其实不安全,因为不清楚它是不是读的端口的值---可能产生错误的结果*/