- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在图4-47所示的变址操作程序中,当X0=1后,变址寄存器V3中的数据是10、Z3中的数据是20,则地址D0Z3=D(0+20)=D20;常数K30V3=K(30+10)=K40;32位数据传送指令“DMOVP D4Z3 D20”表示由D25、D24组成的32位字元件中的数据传送到D21、D20组成的32位字元件中。 当需要用32位变址寄存器时,就由V、Z组合而成。V是高16位,Z是低16位。在操作指令中只要指定Z,编号相同的V就被自动占用。如图4-47中传送指令“DMOVP H00013A5C Z3”表示将32位的十六进制常数H00013A5C送到由V3、Z3组成的32位字元件中。 【应用举例】 如图4-48所示为用加1减1指令及变址寄存器完成的彩灯正序亮至全亮、反序熄至全熄的循环变化。Y0--Y13接12个彩灯,程序中初始运行时将变址Z清0,X1为控制开关。当X1合上后,用M8013使K4Y0Z中的数据加1,然后Z中的值也加1,点亮第一个灯(Y0)。以后每隔1s点亮一个,依序点亮所有的灯。当Y14=1时置位M1,将加1程序切断,并接通减1程序。首先将变址Z的值减1,接着将K4Y0Z中的数据减1,即熄灭第十二个灯。以后每隔1s熄灭一个,依次熄灭所有的灯,再循环。 2. 二进制数与BCD码变换指令 ⑴ BCD码变换为二进制数(BIN) BIN变换指令是将源操作数[S]中的BCD码转换成二进制数存入目标操作数[D]中。如图4-49(a)所示,当X0=1时,K2X0中的BCD码转换成二进制数存入D10中。 说明: 如果源操作数不是BCD码就会出错,而且常数K不可作为该指令的操作数,因为常数K在操作前自动进行二进制变换处理。BCD码的取值范围:16位时为0—9999,32位时为0 2. 减法指令SUB SUB 减法指令是将指定的源元件中的二进制数相减,结果送到指定的目标元件中去。如图4-22 表示,当执行条件X0=1 时, [D10]-[D12] → [D14] 。SUB也是代数运算,如 5-(-8 )=13 。 各种标志位的动作、32 位运算中软元件的指定方法、连续执行型和脉冲执行型的差异均与ADD加法指令相同。 3. 乘法指令MUL 乘法指令MUL是将指定的源元件中的二进制数相乘,结果送到指定的目标元件中去。MUL分为16位和32位两种情况,源操作数是16位时,目标操作数为32位,源操作数是32位时,目标操作数是64位。最高位为符号位,0 为正,1 为负。 如图 4-23 所示,当为16 位运算,执行条件X0=1时, [D0]x[D2] → [D5、D4] 。当为 32 位运算,执行条件 X0 =1 时, [D1、D0]x[D3、D2] → [D7、D6、D5、D4] 。 如将位组合元件用于目标操作数时,限于K的取值,只能得到低32位的结果,不能得到高32位的结果。这时,应将数据移入字元件再进行计算。 用字元件时,也不可能监视64位数据,只能分别监视高32位和低32位。 4. 除法指令DIV DIV除法指令是将指定的源元件中的二进制数相除, [S1] 为被除数, [S2] 为除数,商送到指定的目标元件 [D] 中去,余数送到 [D] 的下一个目标元件。DIV分为16位和32位两种情况。 如图4-24所示,当为 16 位运算,执行条件X0=1 时,[D0]除 [D2]的商 → [D4],余数→ [D5] 。如当 [D0]=19 ,[D2]=3 时,则执行指令后[D4]=6 ,[D5]=1。 当为32位运算,执行条件X0=1 时,[D1、D0]除[D3、D2],商在 [D5、D4] ,余数在 [D7、D6] 中。 商为0时,有运算错误,不执行指令。若 [D] 指定位元件,得不到余数。商和余数的最高位是符号位。被除数或余数中有一个为负数,商为负数;被除数为负数时,余数为负数。 【乘除法指令拓展应用】 四则运算指令除了能进行最基本的加、减、乘、除运算之外,还能巧妙的利用其运算功能,实现某些特定的控制关系。如4—25图所示为利用乘除法指令实现灯组移位循环的实例。有一组灯共8盏,接于Y0~Y7。当K3Y0*2时,相当于将其二进制数码左移了一位。所以执行乘2运算,实现了Y0→ Y7的正序变化。同理除2运算实现了Y7→ Y0的反序变化。程序中T0和M8013配合,使两条运算指令轮流执行。先从Y0→ Y7,每隔1s移一位,再从Y7→ Y0,每隔1s移一位,并循环,如图4—26所示效果图。 (三)任务实施 选择输入输出设备,分配输入/输出地址,画出I/O接线图 根据前述任务分析,选定K2X0作自变量输入,K2Y0作因变量结果输出。表4-3所示是分配的I/O地址表,绘制的接线图如图4-27所示
文档评论(0)