‘壹’ 三菱PLC步进梯形图多初始状态在GX仿真软件中怎么录入呀比如一个程序中,有S0,还有S1 ,急急
按顺序录入就行,例如:第一段的是S0(后面是你的初始化程序),然后写S1再继续(后面是你S1后面的程序)即可!
‘贰’ 单片机我定义S1,S2,S3三位是低,仿真出来只有S1是低,其他两位是灰色无效
S2,S3也出现过,是太快了,你看不见,应该有延时,还有语句后面是分号(;)
S1=0;
delay(100);
S2=0;
delay(100);
S3=0;
delay(100);
‘叁’ 单片机。c. bit s1,s2;啥意思
bit是位数据变量申明,这行的意思是位声明变量s0和s1,他们的取值只有0或者1.当取值为0以外的数值时候,系统均以1看待,有点类似高级语言的True和False。它与sbit的区别是,相同的地方都是位申明,bit和int char差不多,只是一个是8位,而bit是1位;bit在编译的时候分配的地址是随机的,sbit编译时候地址是固定的,即sbit可以寻址操作,而bit不行。
‘肆’ char s1[]="study"什么意思
我用EXCEL作两个表作为示意图,表1为模拟编译器编译时建立的变量表,编译器在为变量分配好内存后将变量注册添加到此表内,之后遇到该变量就提取地址替换到目标代码中。
假设内存分配在栈上且栈指针初始值指向1000,则表2即为分配s1后的内存情况,此时栈指针指向1006,下一个变量将从该地址开始分配。
这就是char s1[]="study"执行后的内存情况。
表1
‘伍’ 汇编语言 设s1变量存放着10个字节,将位于0,2,4,6,8位移量的字节与1,3,5,7,9位移量
Code Segment
Assume CS:Code,DS:Code
s1 db 129,78,99,72,63,51,49,37,253,199
Odd_Num equ 1 ;奇数
Even_Num equ 0 ;偶数
Parity equ Odd_Num ;相与结果存于奇数字节
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
cld
lea si,s1 ;变量s1首地址装入源变址寄存器si
mov cx,5 ;循环次数(10个字节,两两相与,循环5次)
.IF Parity==Odd_Num ;若把相与结果存于奇数字节
L1: lodsb ;读入偶数字节至累加器AL(这条指令执行后,si自动增1)
and [si],al ;相与的结果存于奇数字节
inc si ;准备处理后面的两个字节
loop L1
.ELSEIF Parity==Even_Num ;若把相与结果存于偶数字节
L2: inc si ;si增1,准备读取奇数字节
lodsb ;读入奇数字节至累加器AL
and [si-2],al ;相与的结果存于偶数字节
loop L2
.ENDIF
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
用伪指令实现分支结构
为了改善汇编语言源程序的结构,减少显式转移语句所带来混乱,在宏汇编MASM 6.11系统中,增加了表达分支结构的伪指令。该伪指令的书写格式与高级语言的书写方式相类似,汇编程序在汇编时会自动增加转移指令和相应的标号。理解并掌握该知识,对将来学习《编译原理》课程也有一定的帮助。
分支伪指令的具体格式如下:
格式1:
.IF condition ;以英文“句号”开头
指令序列 ;条件"condition"成立时所执行的指令序列
.ENDIF
格式2:
.IF condition
指令序列1
.ELSE
指令序列2 ;条件"condition"不成立时所执行的指令序列
.ENDIF
格式3:
.IF condition1
指令序列1
.ELSEIF condition2
指令序列2 ;条件"condition2"成立时所执行的指令序列
.ENDIF
其中:条件表达式“condition”的书写方式与C语言中条件表达式的书写方式相似,也可用括号来组成复杂的条件表达式。
条件表达式中可用的操作符有:==(等于)、!=(不等)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、&(位操作与)、!(逻辑非)、&&(逻辑与)、||(逻辑或)等。
若在条件表达式中检测标志位的信息,则可以使用的符号名有:CARRY?(相当于CF==1)、OVERFLOW?(OF==1)、PARITY?(PF==1)、SIGN?(SF==1)、ZERO?(ZF==1)等。例如:
.IF CARRY? && AX != BX ;检测CF==1且AX!=BX是否成立
;汇编语言指令序列
.ENDIF
在指令序列中,还可再含有其它的.IF伪指令,即:允许嵌套。伪指令.ELSEIF引导出另一个二叉分支,但它不能作伪指令块的第一个伪指令。
汇编程序在对“条件表达式”进行代码转换时将进行代码优化处理,以便尽可能生成最好的指令代码。如:
.IF ax == 0
汇编程序会把它转换为指令“OR ax, ax”,而不是“CMP ax, 0”,因为前者比后者更好,而不是简单直接地转换为后者。
‘陆’ 第二问怎么解啊,跪求
另一个同样的问题是你提问的吧。我在那个问题里已经把代码发给你了。
我在之前那个问题里贴的仿真图就是用我这边hex仿真出来的。
所以第二问就是把我的代码复制到你的工程里,编译重构一下,就生成hex文件了,然后你把你那生成的hex文件上传。
要是还是不明白怎么生成hex,你直接参考网络文库:
怎样将keil工程代码生成HEX文件
‘柒’ 编程编译后出现出现use of undefined type '$S1',这是什么意思呢
表示'$S1'这个符号没有定义或声明
‘捌’ S1是什么开关,在multisim里怎么找,急求
这个应该就是一个按键,轻触按键,一般是四个脚的。如果是仿真的话可以用按钮代替~
‘玖’ multisims1在哪里
在菜单栏的中间部分。Multisim仿真软件测试门电路延迟时间的方法,提出了三种测试方案,即将奇数个门首尾相接构成环形振荡电路,用虚拟示波器测试所产生振荡信号的周期,计算门的传输延迟时间;奇数个门首尾相接构成环形振荡电路,用虚拟示波器测试其中一个门的输入信号、输出信号波形及延迟时间;在一个门的输入端加入矩形脉冲信号,测试一个门的输入信号、输出信号波形及延迟时间。所述方法的创新点是,解决了受示波器上限频率限制实际硬件测试效果不明显的问题,并给出Multisim软件将门的初始输出状态设置为0时,使测试电路不能正常工作的解决方法。
‘拾’ 我就不明白了short s1=1;s1=s1+1;和short s1=1;s1+=1;有什么区别
这个不是写法的问题,而是你的类型的问题,short。
s1=s1+1; //这是一个短整型和一个整型运算,然后运算结果s1被强行自动升级为整形,而最初s1是声明为短整型的,显然矛盾,肯定会报错。
s1+= 1; //这种写法,强制把1转换成short类型了,当然不会报错了。
正确的写法是:short s1=1;s1=(short)(s1+1); 或者 short s1=1;s1+=1;