【SCL】移位和循环指令的应用(音乐喷泉改进)

news2024/9/25 13:24:03

移位指令:右移(SHR)左移(SHL)和循环左移/右移(ROR/ROL)指令的应用

文章目录

目录

一、移位和循环移位指令

1.左移右移

2.使用左移和脉冲实现音乐喷泉

3.循环移位指令

二、优化的其它方法

1.使用脉冲和数组

2.随机移位

总结


前言

这一章我们对音乐喷泉试验进行优化和改进,并一起来学习我们移位指令在这里的应用。


一、移位和循环移位指令

1.左移右移

 在我们前面实现音乐喷泉控制时,是使用的case of  语句来完成的,那么有没有其它的更加简便的方法方式呢!有的,移位指令就是!我们再来看一下控制要求:

7467bceaa06a4d67a52b0987c587a5b7.png

 L1到L8这8个灯以0.5s的间隔依次来闪亮,时间间隔相同,一共要用8个Q点;

左移(SHL):

 这一个是信息系统中的释义:30d1ddffe0c1478b9bc5bbcb8f2bdd17.png

d4174601da6548cbac93ed3ad2697578.png

这一个是scl中的左移指令,其中IN是要移位的一个值,上面音乐喷泉的8个灯是一个字节byte,8个位,这里IN我们填上QB0就可以了(Q0.0---Q0.7) ,N是对IN每次移位的位数(例:1,就是对QB0一次移动1位) 

1fae414d9d634fc897f19c3b821af136.png

 911a4586efc747458b91ff2fd681ffbb.png

左移就是从左边Q0.0开始,进行移位; 

右移(SHR):

和左移相反,从右边Q0.7开始进行移位;

2.使用左移和脉冲实现音乐喷泉

这里启动按钮按下后,用中继接通定时器来产生脉冲,并给qb赋值一个1(相当于初始值),用脉冲来触发左移指令,当最后一位也移完之后,qb就=0,这是再给它一个1,就可以循环往复一直运行,按下停止后,将标志1和qb清零就可以啦! 

较与case of 语句,这个会更加简便一些。 

IF #OFF THEN
    #标志1 := 0;
    #qb := 0;
END_IF;
IF #ON THEN
    #标志1 := 1;
    #qb := 1;
END_IF;
#T(IN := #标志1 & NOT #输出,
   PT := T#500ms,
   Q => #输出);
#P(CLK := #输出);
IF #标志1 & #P.Q THEN
    #qb := SHL(IN := #qb, N := 1);
    IF #qb = 0 THEN
        #qb := 1;
    END_IF;
END_IF;

3.循环移位指令

循环左移指令会在移位完之后,再次循环移位,在上中会比左移更加方便一些! 




二、优化的其它方法

1.使用脉冲和数组

这一个实现的原理就是给数组赋值2进制的数值,然后再将数组依次赋值给qb,来实现效果! 

IF #OFF THEN
    #qb := 0;
    #ZJ1 := 0;
    "数据块_1".变量 := 0;
END_IF;
IF #ON THEN
    #ZJ1 := 1;
END_IF;
#T[0](IN := #ZJ1 & NOT #输出1,
      PT := T#500ms,
      Q => #输出1);
#P[0](CLK := #输出1);
IF #P[0].Q THEN
    "数据块_1".变量 :="数据块_1".变量+1;
    IF "数据块_1".变量 = 8 THEN
        "数据块_1".变量 := 0;
    END_IF;
END_IF;
IF #ZJ1 THEN
    #qb := "数据块_1".数组["数据块_1".变量];
END_IF;

2.随机移位

 这里是用一个脉冲对变量w进行加加,另一个脉冲来抓取,然后来确定移动的位数。

//停止
IF #OFF THEN
    #中继1 := 0;
    #W := 0;
    #qb := 0;
END_IF;

//启动
IF #ON  THEN
    #中继1 := 1;
    //#中继2 := 1;
    #qb := 1;
END_IF;
//获取脉冲上升沿
IF #中继1 THEN
    #P(CLK := "Clock_2.5Hz");
END_IF;
//对变量w一直进行加1
IF #P.Q THEN
    #W := #W + 1;
    IF #W = 8 THEN
        #W := 1;
    END_IF;
END_IF;

//在0.5s内抓取变量w的数值,然后进行移位操作,实现每次移动的数不同。
#T(IN := #中继1 & NOT #时间到,
   PT := T#0.5s,
   Q => #时间到);
#P1(CLK := #时间到);
IF #P1.Q & #中继1  THEN
    //#中继1 := 0;
    #qb := SHL(IN := #qb, N := #W);
END_IF;
IF #qb = 0 & #中继1  THEN
    #qb := 1;
END_IF;

总结

以上就是对音乐喷泉这个案例的几个优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机SCI期刊的分值是什么意思? - 易智编译EaseEditing

影响因子(Impact Factor,IF)是美国ISI(科学信息研究所)的JCR(期刊引证报告)中的一项数据。 即某期刊前两年发表的论文在统计当年的被引用总次数除以该期刊在前两年内发表的论文总数。这是一个国际上通行的期刊评价指标。 例如,某期刊2005年影…

2023年主流的固定资产管理方式

2023年主流的固定资产管理方式可能有以下三种: 基于PaaS平台的固定资产管理系统,支持低代码平台,可以通过拖拉拽的方式进行表单搭建、流程搭建、自定义仪表盘等,满足不同行业和企业的个性化需求。基于RFID和二维码相结合的固定资…

卷麻了,00后Jmeter用的比我还熟练,简直没脸见人......

经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对测试工具的使用感到困扰?前言性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,才能根据得到的测试报告进行分析,找到系统性…

Allegro如何快速查看差分对是否等长的方法

在用Allegro进行PCB设计时,用快速查看差分对是否等长的方法,可以提高效率。那如何操作呢?具体操作方法如下:(1)选择菜单栏Route选择Timing Vision(时序视图) 然后在Options选项卡Tim…

陀螺和加计有关参数部分说明

部分参数计算一、零偏二、随机游走三、Allan方差分析使用要点一、零偏 如果只用一个指标来代表一款IMU的精度的话,那毫无疑问是陀螺零偏。这是因为:1) 惯导系统的精度主要取决于IMU中的陀螺器件精度,而不是加速度计精度;2) 陀螺的…

黑客入门教程【非常详细】从零基础入门到精通,看这一篇就够了!

首先要明白啊,我们现在说的黑客不是那种窃取别人信息、攻击别人系统的黑客,说的是调试和分析计算机安全系统的网络安全工程师。 黑客技术的核心就是渗透攻防技术,是为了证明网络防御按照预期计划正常运行而提供的一种机制。就是通过模拟恶意…

C#:Krypton控件使用方法详解(第十三讲) ——kryptonDomainUpDown

今天介绍的Krypton控件中的kryptonDomainUpDown。下面介绍控件的外观属性和Item属性:Cursor属性:表示鼠标移动过该控件的时候,鼠标显示的形状。属性值如下图所示:Text属性:表示控件的显示文本内容,属性值为…

Apache HTTP Server <2.4.56 mod_proxy_uwsgi 模块存在请求走私漏洞(CVE-2023-27522)

漏洞描述 Apache HTTP Server 是一个Web服务器软件。 该项目受影响版本存在请求走私漏洞。由于mod_proxy_uwsgi.c 中uwsgi_response方法对于源响应头缺少检查,当apache启用mod_proxy_uwsgi后,攻击者可利用过长的源响应头等迫使应转发到客户端的响应被截…

单例模式(设计模式详解)

单例模式 描述 单例模式是一种创建型模式,它的目的是确保一个类只有一个实例,并提供全局访问点。这个实例可以被多个客户端共享,从而避免创建多个实例所带来的资源浪费和不必要的复杂性。 实现 懒汉模式 public class LasySingleton {priv…

数以千计的网站使用的FTP凭证被劫持

云安全初创公司 Wiz 警告说,一场广泛的重定向活动已经导致数千个针对东亚受众的网站使用合法的 FTP 凭据遭到破坏。 在许多情况下,攻击者设法获得高度安全的自动生成的 FTP 凭据,并使用它们劫持受害网站,将访问者重定向到成人主题…

[学习笔记] 3. 算法进阶

算法进阶视频地址:https://www.bilibili.com/video/BV1uA411N7c5 1. 贪心算法 贪心算法(又称贪婪算法),是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑 —— 所做…

java零基础入门(1)

java零基础入门一、JRE和JDK1.1 JRE1.2 JDK1.3 IDK,JRE,JVM三者的包含关系二、CMD2.1 打开CMD2.2 常用CMD命令2.2.1 盘符名称 冒号2.2.2 dir2.2.3 cd 目录2.2.4 cd ..2.2.5 cls2.2.6 exit2.2.7 cd \2.2.8 cd \目录\目录\目录\目录2.3 利用快捷cmd打开 Q…

泰山众筹电商模式的分析

泰山众筹模式是电商平台营销玩法,市场上高活跃度的现象也证实了众筹模式的口碑,结合社交电商的模型,会员和产品销量都会得到飞跃,并且这样结合以后,泰山众筹模式也会更长久、合理,以及可持续。 泰山众筹模…

传输层——TCP协议

目录 一.TCP协议介绍 1.1简介 1.2TCP协议格式 32位序号/32位确认号 标志位 1.3tcp的发送和接收缓冲区 1.3.1介绍 1.3.2窗口大小 1.4超时重传 二.连接管理 2.1三次握手 2.2三次握手的状态变化 2.3为什么是三次握手? 2.4套接字与三次握手关系 2.5四次挥手…

C++11:类的新功能和可变参数模板

文章目录1. 新增默认成员函数1.1 功能1.2 示例2. 类成员变量初始化3. 新关键字3.1 关键字default3.2 关键字delete补充3.3 关键字final和override4. 可变参数模板4.1 介绍4.2 定义方式4.3 展开参数包递归展开参数包优化初始化列表展开参数包逗号表达式展开参数包补充5. emplace…

华为OD机试用Python实现 -【报数游戏】2023Q1 A卷

华为OD机试题 本篇题目:报数游戏题目输入输出示例 1输入输出示例 2输入输出Code代码编写思路最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解

会声会影2023旗舰版新功能介绍,Corel VideoStudio Ultimate2023以及电脑系统配置要求

会声会影2023中文旗舰版功能非常强大的视频编辑软件,非常专业的使用效果,会声会影2023中文版可以针对剪辑电影进行使用,非常强大的色彩校正方式,无论什么光线下进行拍摄,都可以通过后期进行调整,并且里面超…

Python SEO采集海量文本标题,用倒排索引找出“类似的标题“代码实现

Python SEO采集海量文本标题,用倒排索引找出“类似的标题“代码实现 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、说明 假设这个是采集到的海量文本标题: 现在要判断找到的这个标题 title = "拜登称特朗普拒绝承认选举…

C语言实验小项目实例源码大全订票信息管理系统贪吃蛇图书商品管理网络通信等

wx供重浩:创享日记 对话框发送:c项目 获取完整源码源文件视频讲解环境资源包文档说明等 包括火车订票系统、学生个人消费管理系统、超级万年历、学生信息管理系统、网络通信编程、商品管理系统、通讯录管理系统、企业员工管理系统、贪吃蛇游戏、图书管理…

再见 ETHDenver 2023

我们来一起回顾Web3中规模最大,持续时间最长的以太坊史诗级建造周我们正在庆祝#YearoftheSpork,并借助 Web3 中最大的以太坊社区活动之一拉开了黑客马拉松赛季的序幕。ETH Denver 旨在围绕一个共同的目标聚集了志同道合的人,我们非常高兴今年…