1、汇编语言的语句格式:
标号 操作码(指令助记符) 操作数 ;注释
(label) (opcode) (operand) (comment)
2、常用伪指令
a.EQU——符号名赋值伪指令
格式:符号名 EQU nn
b.ORG——程序起始地址定义伪指令
格式:ORG nnnn
c.END——程序结束伪指令
格式:END
d.LIST——列表选项伪指令
格式:LIST [可选项,可选项,......]
e.INCLUDE:调入外部程序文件伪指令
格式:INCLUDE "文件名"
2、分支程序结构
——对于程序中的指令运用作几点说明:
(1)凡是需要2个数参与的逻辑运算(与、或、异或)和算术运算(加、减),都需要事先将其中一个操作数放入W中。对于在此使用的减法指令更要格外关注,应预先把减数放人W中,或者说,预先放入W中的数,在运算中是当做减数,而寄存器中的数当做了被减数。
(2)一条条件跳转指令往往需要跟随一条无条件跳转指令,才能实现长距离的转移和程序的分支。
(3)PIC单片机的指令系统中没有设置专用的停机指令,可以用一条跳转到自身的无条件跳转指令GOTO来实现。
3、PIC单片机指令
由3种基本类型指令组成:
a.字节操作类指令
b.位操作类指令
c.立即数和控制操作类指令
对于字节操作指令,f——>文件寄存器标识符,d——>目标寄存器标识符
说明:目标标识符指定了操作结果的存放位置:
d=0 操作结果存入W寄存器
d=1 操作结果存入指定的文件寄存器,d默认值为1
4、指令集
5、例子
1 ;--------------------------------------------------------
2
3 ;顺序程序结构
4 ;将20H单元低4位取出存入21H,高四位取出存入22H
5 ;要点:ANDLW和SWAPF
6
7 ;---------------------------------------------------------
8 MOVF 20H,0 ;将20H单元的内容送人W
9 ANDLW 0FH ;W高四位清零低4位保持不变
10 MOVWF 21H ;将拆分后的低4位送21H
11 SWAPF 20H,0 ;将20H单元内容高、低半字节换位后送W
12
13 ANDLW 0FH ;再将W高四位清0低四位保持不变
14 MOVWF 22H ;将拆分后的高四位送22H单元
15
16
17 ;--------------------------------------------------------
18
19 ;分支程序结构
20 ;RAM中20H和21H单元存放2个数,找出大着存入22H单元
21 ;要点:两数做减法,判断标志位C的值
22
23 ;---------------------------------------------------------
24 STATUS EQU 03H ;定义STATUS寄存器地址为03H
25 C EQU 0 ;定义进位/借位标志C在STATUS中得地址为0
26 MOVF 20H 0 ;将20H单元的内容送人W
27 SUBWF 21H 0 ;用21H单元的内容减去W中的内容,结果存在W中
28 BTFSS STATUS,C;若C=1,没借位,则21H单元中的数大,跳到F21BIG
29 GOTO F20BIG ;若C=0,有借位,20H单元中得数较大,则跳至F20BIG
30
31 F21BIG MOVF 21H,0 ;将21H中的内容存入W寄存器
32 MOVWF 22H ;再将它转存到22H单元
33 GOTO STOP ;跳过下面两条指令到程序末尾
34
35 F20BIG MOVF 20H,0 ;将20H中的内容存入W寄存器
36 MOVWF 22H ;再将它转存到22H单元
37
38 STOP GOTO STOP ;任务完成,停机,原地踏步
39
40
41 ;--------------------------------------------------------
42
43 ;循环程序结构
44 ;数据存储器中,从地址30H开始的50个单元全部写入00H
45 ;要点:间接寻址寄存器FSR当做地址指针
46
47 ;---------------------------------------------------------
48 COUNT EQU 20H ;指定20H单元作为循坏次数计数器(即循环变量)
49 FSR EQU 04H ;定义FSR寄存器地址为04H
50 INDF EQU 00H ;设定INDF寄存器地址为00H
51 MOVLW D50 ;把计数器初值50送入W
52 MOVWF COUNT ;再把50转入计数器(作为循环变量的操作值)
53 MOVLW 30H ;把30H(起始地址)送入W
54 MOVWF FSR ;再把30H转入寄存器FSR(用作地址指针)
55
56 NEXT CLRF INDF ;把以FSR内容为地址所指定的单元清0
57 INCF FSR,1 ;地址指针内容加1,指向下一单元
58 DECFSZ COUNT,1 ;计数值减1,结果为0就跳过到下一条指令到STOP处
59 GOTO NEXT ;跳转回去并执行下一次循环
60 STOP GOTO STOP ;循环结束之后执行该语句,实现停机
61
62 ;--------------------------------------------------------
63
64 ;子程序结构
65 ;3个数最大者放入40H单元
66
67 ;---------------------------------------------------------
68 STATUS EQU 03H
69 C EQU 00H
70 X EQU 20H
71 Y EQU 21H
72 Z EQU 22H
73 ;--------------------------------------------------------
74
75 ;主程序
76
77 ;---------------------------------------------------------
78
79 MAIN MOVF 30H,0
80 MOVWF X
81 MOVF 21H,0
82 MOVWF Y
83 CALL SUB
84 MOVF Z,0
85 MOVWF X
86 MOVF 32H,0
87 MOVWF Y
88 CALL SUB
89 MOVF Z,0
90 MOVWF 40H
91 STOP GOTO STOP
92 ;--------------------------------------------------------
93
94 ;子程序:(入口参数:X和Y,出口参数:Z)
95
96 ;---------------------------------------------------------
97 SUB MOVF X,0 ;将X内容送人W
98 SUBWF Y,0 ;Y内容减去W内容,结果存入W
99 BTFSS STATUS,C;若C=1,没有发生借位,执行下一条,否则跳转
100 GOTO X_BIG
101
102 Y_BIG MOVF Y,0 ;将Y中的数据送入W
103 MOVWF Z ;再将它转存到Z
104 GOTO THEEND ;跳过下面两条到末尾
105
106 X_BIG MOVF X,0 ;将X中的数据送入W
107 MOVWF Z ;再将它转存到Z
108 THEEND RETURN ;子程序返回
上一篇:比较/ 捕捉/PWM (CCP)模块
下一篇:【PIC单片机】MPLAB X IDE快速入门指南
推荐阅读最新更新时间:2024-11-08 13:39
设计资源 培训 开发板 精华推荐
- 使用 ROHM Semiconductor 的 BA80BC0T 的参考设计
- LT3091ER 简单电缆压降补偿的典型应用
- LTC1516,从 2V 至 5V 输入提供稳定的 5V 输出
- 2.9寸/1.54寸桌面墨水屏摆件
- CC2530底板
- 具有 6.4A 输入电流限制和 5V、30W 备份模式的 LTC3350IUHF 4.8V 至 12V、10A 超级电容器充电器的典型应用电路
- DER-396 - 使用LYTSwitch -4设计的20 W高效率(>86%)、可控硅调光、带功率因数校正的隔离反激式LED驱动器
- 具有 I2C 兼容监视功能的 LTC4215 和 LTC4215-2 热插拔控制器的典型应用
- LTC3210 的典型应用 - 采用 3mm -3mm QFN 封装的 MAIN/CAM LED 控制器
- C4935256_RN8209C芯片方案验证板