200Smart的一些关于寄存器和地址的用法实例
1. 累加器
- 200smart 有
AC0 AC1 AC2 AC3
四个累加器,不能作为位访问 - 累加器大小均是
32位
- 累加器的数值不会自动清零,中断会保持并重新装载累加器(进入中断时先把原来的值保存起来,退出中断程序后恢复原程序)
- 只有
AC1/AC2/AC3可以用作指针
AC0不用作指针,不用作间接寻址
1
2
3LD 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..NEXT1
2注意:
`+D`/`+I`/`MOVD`等指令,它的计算结果放在第二个数里面,比如`<+D 2, LD0>`,运算结果存回LDO中。
3. 冒泡排序里面应用累加器
和&
- 原理:比较相邻的两个元素,如果第一个比第二个大,则交换位置;一轮结束后,最后一个元素将会是最大的数,针对所有元素重复上述循环
1 |
|
200Smart的一些关于寄存器和地址的用法实例
http://example.com/2024/07/21/200Smart的一些关于寄存器和地址的用法实例/