当前位置: 首页 > article >正文

plc到复杂指令集(8051)编译器设计(汇编)2-组合逻辑部分-基本控制指令

在最开始一定要注意,使用的单片机指令集至少要有100条左右,不然很有可能是没有逻辑指令的精简架构,在指令翻译过程中会有严重问题,例如机器码的非一致性。

本文中的plc系统指令使用三菱fx1,单片机使用amd87c51,其他衍生型号可能略有出入,标题以PLC指令为准

在这里插入图片描述
请忽略t0,这是时序逻辑范畴,不在组合逻辑部分内描述

文字描述的伪代码:读取按钮,装入中间寄存器,输出到y0;读取取反按钮,装入寄存器,输出到m100(内存空间);后省略
重要的一件事就是:一定要看好机器码!!指令具体是不一样的
位操作mov分别是a2和92!

LD+OUT

MOV C,P0.0
MOV P1.0,C 

LDI+OUT

MOV C,P0.0
CPL C
MOV P1.0,C 

其中,ldi对应前两句

机器码:

A2
B3
92

LD+OUTM

MOV C,P0.0
MOV 30H,C 

对于51来说,ram相当有限,00h-7fh可以作为m中间继电器的存储区域,共128位,推荐用Q系列的八位编号方式,例如Q0.0,对应30h,Q0.7对应37h

LDM+OUT

MOV C,30H
MOV P1.1,C 

在这里插入图片描述

LD+AND+OUT

MOV C,P0.0
ANL C,P0.1
MOV P1.0,C 
A2
82
92

LD+ANI+OUT+AND+OUT

MOV C,P0.0
ANL C,/P0.1
MOV P1.0,C
ANL C,P0.2
MOV P1.1,C 
A2
B0
92
82
B0

在这里插入图片描述

LD+OR+ORI+OUT

MOV C,P0.0
ORL C,P0.1
ORL C,/P0.2
MOV P1.1,C 
A2
72
A0
B0

在这里插入图片描述

LD+SET

MOV C,P0.0
ORL C,P1.0
MOV P1.0,C
A2
72
92

从机器码可以看出,ld+set等效于ld+ory+out

LD+RST

MOV C,P0.0
ANL C,/P0.1
MOV P1.1,C 
A2
B0
92

sety和m是一样的
m使用的是位地址,而不是单元地址,只能用c来操作
如果要使用D这样的八位数字寄存器,则需要使用单元地址30h-7fh

LD+RSTD (程序中应避免)

MOV C,P0.0
JC FINISH
MOV 30H,#00H 
FINISH:
A2
40
75

这就很恶心了,使用了伪指令,这样一来,伪指令标签还要再自加数字,如果后边还有rstd的话
所以尽量用传送指令清D

在这里插入图片描述
这是一个fx1n加入的指令,在线上取反

LD+INV+OUT

MOV C,P0.0
CPL C
MOV P1.0,C
A2
B3
92

在这里插入图片描述

这一坨(只适用于一个ld后边的分支,只有一个mpp和mps,有一堆mrd的简单情况,不应使用)

MOV C,P0.0
;LD
MOV ACC,#00H
MOV ACC.0,C
;MPS
ANL C, 30H
;AND
MOV P1.0,C
;OUT
MOV C,ACC
;MRD
ANL C,3FH
;AND
MOV P1.1,C
;OUT
MOV C,ACC
;MPP
ANL C,40H
;AND
MOV P1.2,C
;OUT

在这里插入图片描述

正确的mps和mpp,最后一行前边插入了分支mrd

程序最开始的地方按需求应该放置sp

MOV SP,#00H
;BEGIN
MOV C,P0.0
CPL C
;LDI
MOV ACC.0,C
PUSH A
;MPS
ANL C,P0.1
;AND
MOV ACC.0,C
PUSH A
;MPS
ANL C,/P0.3
;ANI
MOV P1.0,C
;OUT
POP A
MOV C,ACC.0
;MPP
ANL C,P0.2
;AND
MOV P1.1,C
;OUT
POP A
MOV C,ACC.0
;MPP
ANL C,P0.3
;AND
MOV ACC.0,C
PUSH A
;MPS
ANL C,/P0.3
;AND
MOV P0.3,C
;OUT
MOV C,ACC.0
;MRD
ANL C,P0.5
;AND
MOV P0.4,C
;OUT
POP A
MOV C,ACC.0
;MPP
ANL C,P0.6
;AND
MOV P0.5,C
;OUT

http://www.kler.cn/a/551198.html

相关文章:

  • Vue前端开发-Vant介绍,安装部署
  • 百达翡丽(Patek Philippe):瑞士制表的巅峰之作(中英双语)
  • 网页制作01-html,css,javascript初认识のhtml的基本标记
  • Web开发技术概述
  • Java语言的云计算
  • 【进程与线程】Linux 线程、同步以及互斥
  • 优选算法的灵动之章:双指针专题(二)
  • 联想小新 510S-14IKB (80UX) 原厂Win10系统oem镜像下载
  • Go 切片导致 rand.Shuffle 产生重复数据的原因与解决方案
  • Web 开发 —— 高阶 WebSocket 和 SSE
  • 国产Linux OS:网络性能调优关键内核参数
  • USC 安防平台之移动侦测
  • MME-CoT:专为评估大型多模态模型CoT推理能力的基准测试。涵盖了数学、科学、OCR、逻辑、时空和一般场景6个领域。
  • 如何在wps中使用AI
  • C++ | 虚函数
  • 【kafka系列】Kafka如何实现高吞吐量?
  • Qt之线程的创建与启动
  • git pull 与 git pull --rebase的区别与使用
  • 【Elasticsearch】`nested`和`flattened`字段在索引时有显著的区别
  • 如何使用 DeepSeek + Kimi 自动生成PPT