200Smart的一些关于寄存器和地址的用法实例

1. 累加器

  • 200smart 有AC0 AC1 AC2 AC3四个累加器,不能作为位访问
  • 累加器大小均是32位
  • 累加器的数值不会自动清零,中断会保持并重新装载累加器(进入中断时先把原来的值保存起来,退出中断程序后恢复原程序)
  • 只有AC1/AC2/AC3可以用作指针
  • AC0不用作指针,不用作间接寻址
    1
    2
    3
    LD     SM0.0 //Always_On
    MOVD &VB0, AC1 //把从VB的起始的地址存入到AC1中,传地址用的DWORD
    MOVW *AC1, VW2 //*,把AC1地址所指向的内容给到VW2,值本身用的WORD

2. 指针

  • 指针的目的,实现数据寻址
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    //一个案例,实现VW0,VW2,VW4,VW6累加
    //Network 1
    LD SM0.0
    MOVD &VB0, AC1 //把起始地址给累加器1

    //Network 2
    LD M0.0 //启动信号,启动循环
    EU //上升沿
    FOR VW100, 1, 4 //for循环,VW100只是用来装当前循环次数的容器,不需要赋值。对应成SCL表示为`for VW100:=1 to 4 by 1 do`

    //Network 3
    LD SM0.0
    MOVD AC1, LD0 //自己新建了一个地址是LD0的DWORDL区变量,用来存地址
    +D 2, LD0 //把LD的地址+2,结果存在LD中,表示AC1的下一个地址
    +I *AC1, *LD0 //把两个地址对应的数据相加,结果存在*LD0里面
    +D 2, AC1 //把AC1的地址+2,开始下一次循环

    //Network 4
    NEXT //FOR..NEXT
    1
    2
    注意:
    `+D`/`+I`/`MOVD`等指令,它的计算结果放在第二个数里面,比如`<+D 2, LD0>`,运算结果存回LDO中。

3. 冒泡排序里面应用累加器&

  - 原理:比较相邻的两个元素,如果第一个比第二个大,则交换位置;一轮结束后,最后一个元素将会是最大的数,针对所有元素重复上述循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//子程序开始,表示一些块信息,标识符:<SUBROUTINE_BLOCK>
SUBROUTINE_BLOCK 冒泡排序:SBR0
TITLE=子程序注释

//符号表内容,标识符:<VAR_INPUT..END_VAR>
VAR_INPUT
start:BOOL;
Data_Ptr:DWORD; // 双字地址指针
Count:INT; // 长度
END_VAR

//变量表内容,标识符:<VAR..END_VAR>
VAR
Index:INT; // For循环使用变量
Middle:INT; // 中间变量
END_VAR

//程序段正式开始,标识符:<BEGIN..END_SUBROUTINE_BLOCK>
BEGIN
Network 1
// 创建指针地址
LD SM0.0
MOVD LD1, AC1 //这里的LD1指的是Data_Ptr,要排序的数的首地址
Network 2
LD L0.0 //表示start,开始排序触发
FOR LW7, 2, LW5 //for循环,LW7表示index,LW5表示Count
Network 3
LD SM0.0
LPS //逻辑进栈,STL自动生成。表示并联梯形图扫描的先后
MOVD AC1, AC2
+D +2, AC2 //AC2=AC1+2
AW> *AC1, *AC2 //比较指令,*AC1是否大于*AC2
MOVW *AC1, LW9 //LW9,定义的一个中间变量
MOVW *AC2, *AC1
MOVW LW9, *AC2
LPP //逻辑出栈,STL自动生成。开始读另一个分支
+D 2, AC1
Network 4
NEXT
END_SUBROUTINE_BLOCK

200Smart的一些关于寄存器和地址的用法实例
http://example.com/2024/07/21/200Smart的一些关于寄存器和地址的用法实例/
作者
xiao cuncun
发布于
2024年7月21日
许可协议