[求助]stc89C52RC单片机如何赋值给io口,急等!

lgy1977 2013-09-10 11:07:38
stc89C52RC单片机,1~1000范围内任意整数,赋值给io口(P2(低8位)、P1^0(第9位)、P1^1(第10位))。
想先把整数转化为16进制数,然后给io赋值。但不会编,请高手指教。
...全文
795 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgy1977 2014-07-08
  • 打赏
  • 举报
回复
很久没来了,发现还有没结的帖子,谢谢各位的指点,已给分结贴。
seedundersnow 2013-09-13
  • 打赏
  • 举报
回复
P2 = int_val; P1 = (P1 & 0xfc) | ((int_val >> 8) & 3); /*这个其实不安全,因为不清楚它是不是读的端口的值---可能产生错误的结果*/
seedundersnow 2013-09-13
  • 打赏
  • 举报
回复
P2 = int_val; P1_0 = int_val & 0x100 ? 1 : 0; P1_1 = int_val & 0x200 ? 1 : 0;
lgy1977 2013-09-13
  • 打赏
  • 举报
回复
由于有事没能及时看帖,谢谢各位的回复,我初学,对于位的操作不太熟悉,正在解决。解决后我在给分结贴。
lbing7 2013-09-12
  • 打赏
  • 举报
回复
引用 3 楼 longyu199 的回复:
[quote=引用 2 楼 lbing7 的回复:] 1000以内的数,按理应该是用一个16位的数来存储 低八位直接送入P2 高的两位。先把所在的八位前6位给清0,再把P1口的低两位清0,取或运算送入P1口就可以了
高位前6位不要清零的吧,那个还有其他用的,可以先把P1口于运算0xfc,再把16进制数直接右移8位,然后取或运算进P1口[/quote] 清0的意义是防止改动端口上其它位的值
zhujinqiang 2013-09-11
  • 打赏
  • 举报
回复
引用 6 楼 lr2131 的回复:
楼上版主说的对,从中取出低8位,另外的2位做位操作取出,不需要做什么进制转换。
++ 大端小端,别搞错了。 标准52的指令集和寄存器,基本上都是8位的,因此不分大小端。 涉及大于8Bit操作应该是只有MOV DPTR, #imm一个指令,这个指令的编码是大端的。就是OPCode, Hi 8Bit, Lo 8Bit,共3字节。 其它的数据类型,在C里面是依靠 编译器实现的,Keil C51用的是大端模式
lbing7 2013-09-10
  • 打赏
  • 举报
回复
1000以内的数,按理应该是用一个16位的数来存储 低八位直接送入P2 高的两位。先把所在的八位前6位给清0,再把P1口的低两位清0,取或运算送入P1口就可以了
青松2 2013-09-10
  • 打赏
  • 举报
回复
先把整数移位成二进制,再赋值给IO口不就行了吗
lr2131 2013-09-10
  • 打赏
  • 举报
回复
楼上版主说的对,从中取出低8位,另外的2位做位操作取出,不需要做什么进制转换。
zhujinqiang 2013-09-10
  • 打赏
  • 举报
回复
引用 1 楼 lhfslhfs 的回复:
先把整数移位成二进制,再赋值给IO口不就行了吗
这个 汇编移位指令难度有点大啊 不过楼主这个问题,方法有多种。 首先需要搞清的是出题的老师希望看到学生用那种思路。。。
zhujinqiang 2013-09-10
  • 打赏
  • 举报
回复
十进制直接转二进制 除以2取余数蛮,逐位把余数赋值给端口 行不?
longyu199 2013-09-10
  • 打赏
  • 举报
回复
引用 2 楼 lbing7 的回复:
1000以内的数,按理应该是用一个16位的数来存储 低八位直接送入P2 高的两位。先把所在的八位前6位给清0,再把P1口的低两位清0,取或运算送入P1口就可以了
高位前6位不要清零的吧,那个还有其他用的,可以先把P1口于运算0xfc,再把16进制数直接右移8位,然后取或运算进P1口

27,375

社区成员

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

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