找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2070|回复: 8
打印 上一主题 下一主题
收起左侧

小白请教C语言循环移位函数

[复制链接]
跳转到指定楼层
楼主
ID:891876 发表于 2023-2-22 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一种:正常循环
void main()
{
   uhcar c=0xfe;
  while(1)
    {
        P0=c;
        c=_crol_(c,1);
        delay(200);
    }
}
第二种:只循环一位就停止了

void main()
{
   uhcar c=0xfe;
  while(1)
    {
        P0=_crol_(c,1);
        delay(200);
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:69038 发表于 2023-2-22 14:55 | 只看该作者
因为第二个你的C,永远是0xfe,所以P0看上去只“循环一位”就停了。第一个的C每移一次就变一次所以会“一直移”~~”
回复

使用道具 举报

板凳
ID:69038 发表于 2023-2-22 14:59 | 只看该作者
_crol_的用法:
a=_crol_(b,n) =>>a是目标,b是源,n是要移多少位。
即源寄存器中的数据,带C左移n位后存入目标寄存器中。
回复

使用道具 举报

地板
ID:353115 发表于 2023-2-22 15:21 | 只看该作者
void main()
{
    P0 = 0xFE;
    while(1)
    {
        P0 = P0<<1|P0>>7;
        delay(200);
    }
}
回复

使用道具 举报

5#
ID:807182 发表于 2023-2-22 17:28 | 只看该作者
因为第一个c会一直变化,但第二个程序,c是固定值
回复

使用道具 举报

6#
ID:1063951 发表于 2023-2-22 22:55 来自触屏版 | 只看该作者
第二个把c位移了,要重新定义一下
回复

使用道具 举报

7#
ID:624769 发表于 2023-2-23 13:05 | 只看该作者
为什么要多个C 多此一举呢?
直接用P0不好么?

void main()
{
  P0=0xfe;
  while(1)
    {
        P0=_crol_(P0,1);
        delay(200);
    }
}
回复

使用道具 举报

8#
ID:69038 发表于 2023-2-23 14:18 | 只看该作者
188610329 发表于 2023-2-23 13:05
为什么要多个C 多此一举呢?
直接用P0不好么?

逻辑上有c没c是一样的,但除非万不得已,直接操作MCU的IO是有一定的风险的:有可能你读到的IO值并不是你之前输出的值--被外围硬件改变了。
回复

使用道具 举报

9#
ID:230500 发表于 2023-2-25 14:39 | 只看该作者
第二种:只循环一位就停止了

void main()
{
   uhcar c=0xfe;
  while(1)
    {
        P0=_crol_(c,1);  //在这个位置,C 一直都没有变化重新赋值,所以 C永远都是0xfe
        delay(200);
    }
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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