,单片微机原理及应用,教学课件第二讲:指令与编程本讲重点:
寻址方式;
MCS-51指令集;
伪指令;
汇编语言与简单程序设计,
,单片微机原理及应用,教学课件第三章 指令系统及程序设计 ( P.43)
51系列单片机指令集含有 111条指令每条指令在执行时要花去一定的 时间,以机器周期为单位。按指令 执行时间 分类:
单周期 (64条 );双周期 (45条 );4周期 (2条 )
按指令的 功能 分类,可分为 5大类:
数据传送类 ( 29条); 算术运算类 ( 24条)
逻辑运算及移位类 ( 24); 控制转移类 ( 17条)
位操作类 ( 17条)
每条指令在程序存储器 ROM中占据一定的 空间,
以字节为单位。按指令 所占字节数 分类:
单字节 (49条 );双字节 (46条 );3字节 (16条 )
,单片微机原理及应用,教学课件
ASM-51指令的格式 (P.44)
方括符 [ ]表示可选项
标号 代表指令所在地址,1-8个字母 /数字,,,‖
结尾
操作码 就是指令功能助记符,指令实体
目的操作数
源操作数
注释,以,;‖开头
[标号,]操作码 [目的操作数 ][,源操作数 ][;注释 ]
,单片微机原理及应用,教学课件
51单片机指令的 寻址方式 (P.45)
寄存器寻址
立即寻址
寄存器间接寻址
直接寻址
变址寻址 (基址寄存器 +变址寄存器间接寻址 )
相对寻址
位寻址寻址方式,指令按地址获得操作数的方式七种寻址方式,一条指令可能含多种寻址方式
,单片微机原理及应用,教学课件寄存器寻址 ——(P.45)
从 寄存器 中读取操作数 或 存放操作数进 寄存器例,MOV A,B ; ( A) ← ( B)
MOV 30H,R0 ; ( 30H) ← ( R0)
MOV A,R1 ; ( A) ← ( R1)
,单片微机原理及应用,教学课件立即寻址 ——(P.45)
操作数直接就出现在指令中例,MOV A,#64H ; (A)← 立即数 64H
ADD A,#05H ; (A)←(A)+ 立即数 05H
注意,符号,#‖表明其后跟的是 立即数,
立即数 ——就是数字量本身 。
,单片微机原理及应用,教学课件寄存器间接寻址 ——(P.46)
寄存器中的 内容 是一个 地址,由该 地址 单元寻址到所需的 操作数注意,
1),间接,表示某寄存器中的,内容,只是一个
,单元地址,,这个地址单元中存放的 数据 才是要找的,操作数,。
2) 符号,@‖表示,在 … ‖,其 含义 与 读音 皆同
,at‖。
例,[ MOV R1,#30H ;(R1)← 立即数 30H ][ MOV,30 (R )← 立即数 30H
MOV @R1,#0FH ;(30H)← 立即数 0FH
MOV A,@R1 ;(A)←((30H))=#0FH
,单片微机原理及应用,教学课件直接寻址 ——(P.46)
指令中 直接 给出了操作数所在 单元的地址或名称例,MOV R1,1FH ; (R1) ← ( 1FH)
MOV 30H,4AH ; (30H)← ( 4AH)
在本单片机中规定:访问特殊功能寄存器 SFR
只能 采用直接寻址方式。例如:
MOV A,SP ; (A) ←(SP)
MOV A,81H ; (A) ←(SP)
MOV P1,#5AH ; (P1)←(#5AH)
MOV 90H,#5AH ; (P1)←(#5AH)
MOV B,30H ; (B) ←(30H)
SFR的地址见 P.33表相同相同
,单片微机原理及应用,教学课件在本单片机中访问特殊功能寄存器 SFR只能 采用直接寻址方式的 原因,SFR分布在 80H~ 0FFH范围内,
而 52系列 单片机有 256字节的片内 RAM,其中的
80H~ 0FFH的 RAM与 SFR所占 地址重叠 。
MOV A,90H 等效于 MOV A,P1 属直接寻址
MOV A,@R0 ; [事先已知 (R0) = #90H ]
执行的操作,A ←(90H) 属寄存器间接寻址,
随意写的指令如,MOV A,85H 则是非法的!
于是规定,80H~ 0FFH范围内的 RAM只能用 寄存器间接寻址 方式,而 SFR只能用 直接寻址 方式。从而解决了地址冲突的问题。例如:
,单片微机原理及应用,教学课件存储器配置 ( 片内 RAM)
89C51片内 RAM 128字节 ( 00H— 7FH)
89C52片内 RAM 256字节 ( 00H— 0FFH)
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才有的 RAM区普通 RAM区位寻址区工作寄存器区
SFR分布在
80H-FFH
其中 92个位可位寻址80H
FFH
89C51
128字节
89C52
256字节只能直接寻址只能寄存器间接寻址
,单片微机原理及应用,教学课件变址寻址 ——( P.47)
也称为,基址寄存器 +变址寄存器 间接寻址以 16位的 地址指针寄存器 DPTR或 16位的 PC寄存器为基址寄存器,以 累加器 A 为变址寄存器,两者中的
,内容,形成一个 16位的,地址,,该,地址,所指的存储单元中的内容才是操作数。
P47例,[设,A中已存有 #A4H,DPTR中已存有 #1234H]
MOVC A,@A+DPTR; ( A) ← ((A)+(DPTR))
操作:将 A4H+1234H=12D8H单元中的 数 放进累加器 A
,单片微机原理及应用,教学课件相对寻址 ——(P.47)
当前 PC值加上指令中规定的偏移量 rel,构成实际的操作数地址例,SJMP rel
操作:跳转到的 目的地址 = 当前 16位 PC值 + rel
注意,
1),当前 PC值,指程序中 下一条指令所在的首地址,
是一个 16位数;
2) 符号,rel‖表示,偏移量,,是一个带符号的单字节数,范围是,-128—+127(80H—7FH),在实际编程中,,rel” 通常用标号代替
,单片微机原理及应用,教学课件位寻址 ——(P.48)
指令中直接给出了操作数所在的 位地址 。
例,CLR P1.0 ; (P1.0) ← 0
SETB ACC.7 ; (ACC.7)← 1
CPL C ; ( C )← NOT( C )
注意,
1) 位地址里的数据只可能是 一个 0 或 1
2) 有的位地址十分明确,如 P1.0,ACC.7等,
有的位地址则,不太明确,,如:
[MOV A,17H ; (A)←( 17H),17H是 字节地址 ]
MOV ACC.0,17H ;(ACC.0)←( 17H),这里 ACC.0
是 位地址 所以该指令中的 17H是 22H单元的第 7位
,单片微机原理及应用,教学课件
片内 RAM中有 128个位可按位寻址的位,位地址,00H— 7FH分布在,20H— 2FH单元;
另外,在 SFR中还有 92
个位 可按位寻址
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才有的 RAM区普通 RAM区位寻址区工作寄存器区
27H
22H
21H
20H
26H
24H
25H
23H
28H
07 06 05 04 03 02 01 00
0F 0E 0D 0C 0B 0A 09 08
17 16 15 14 13 12 11 10
1F 1E 1D 1C 1B 1A 19 18
27 26 25 24 23 22 21 20
2F 2E 2D 2C 2B 2A 29 28
37 36 35 34 33 32 31 30
3F 3E 3D 3C 3B 3A 39 38
47 46 45 44 43 42 41 40
2FH 7F 7E 7D 7C 7B 7A 79 78
位地址总共
128
个可按位寻址的位单元地址
17
D7 D6 D5 D4 D3 D2 D1 D0
,单片微机原理及应用,教学课件位寻址 ——(P.48)
指令中直接给出了操作数所在的 位地址 。
例,CLR P1.0 ; (P1.0) ← 0
SETB ACC.7 ; (ACC.7)← 1
CPL C ; ( C )← NOT( C )
注意,
1) 位地址里的数据只可能是 一个 0 或 1
2) 有的位地址十分明确,如 P1.0,ACC.7等,
有的位地址则,不太明确,,如:
[MOV A,17H ; (A)←( 17H),17H是 字节地址 ]
MOV ACC.0,17H ;(ACC.0)←( 17H),这里 ACC.0
是 位地址 所以该指令中的 17H是 22H单元的第 7位
,单片微机原理及应用,教学课件
MCS-51指令集功能分五类,共 111条指令
,单片微机原理及应用,教学课件
MCS-51指令集 (五大类功能) P.49页数据 传送 类指令,( 29条 )
算术 运算类指令,( 24条 )
逻辑 运算及移位类指令,( 24条 )
控制 转移 类指令,( 17条 )
位 操作(布尔操作)类指令:( 17条 )
,单片微机原理及应用,教学课件内部存储器间传送,( MOV——16条)
外部数据存储器与累加器间传送,
( MOVX——4条)
程序存储器向累加器传送:
( MOVC——2条)
数据交换:( XCH,XCHD,SWAP——5条)
堆栈操作,( PUSH,POP——2条)
(一 )数据传送类指令 ( 5种 /29条) P.49
—— 见 P.49的表 3- 2
,单片微机原理及应用,教学课件
Acc 累加器
Direct 直接寻址 @Ri 间接寻址
Rn 寄存器 #data 立即数
Rn,R0—R7
@Ri,@R0,@R1
#data,8位立即数
#data16,16位立即数
direct,直接地址
rel,8位带符号偏移量
(一 )数据传送类指令 ( 5种 /29条)
内部存储器间传送指令 (16条 ):
MOV 类指令的 操作方向 总是 后面 的操作数 指向 前面 的操作数 !
例,MOV A,30H —— ( A)?( 30H)
,单片微机原理及应用,教学课件数据传送类 指令 (续) P.52
外部数据存储器与累加器间传送 (4条 ):
MOVX类指令可在 累加器 与以 @DPTR或 @Ri所代表的外部 RAM 之间进行数据传送。
例如,
MOVX A,@DPTR ——(A)? ((DPTR))
MOVX A,@Ri ——(A)? ((Ri))
MOVX @DPTR,A ——((DPTR))?(A)
MOVX @Ri,A ——((Ri))?(A)
,单片微机原理及应用,教学课件程序存储器向累加器传送指令( 2条):
MOVC A,@A+DPTR
MOVC A,@A+PC
——通常称为查表指令,寻址方式属,
―基址寄存器 + 变址寄存器 间接寻址,
数据传送类 指令 (续) P.52
@A+DPTR或 @A+PC指向 程序存储器 中的某单元。拟传送给累加器 ACC 的数据就是程序中事先写进去的 表格数据。 这些表格数据往往用伪指令 DB,DW
等定义在程序中。
,单片微机原理及应用,教学课件数据传送类 指令 (续)
数据交换指令 (5条 ),——P.53
XCH A,direct (字节互换 )
XCH A,@Ri (字节互换 )
XCH A,Rn (字节互换 )
( A) ( direct) [或 ((Ri)),或 (Rn)]
XCHD A,@Ri
累加器 Acc的 低 4位 与 ((Ri))的 低 4位 互换,
各自的高 4位不变
SWAP A
累加器 Acc的 低 4位 与自身的 高 4位 互换
,单片微机原理及应用,教学课件堆栈操作指令 (2条 ),——P.54
PUSH——压栈指令
POP ——弹栈指令
√ 堆栈区由特殊功能寄存器 堆栈指针 SP 管理
√ 堆栈区可以安排在 RAM区任意位置,一般不安排在 工作寄存器区 和 可按位寻址的 RAM区,而是放在 RAM区的 靠后 的位置
√ 堆栈总是指向 栈顶
√ 通常 PUSH与 POP两条指令 成对使用数据传送类 指令 (续)
,单片微机原理及应用,教学课件例如:设 (A)=7BH; (35H)=11H
并且知道( SP)= 60H
PUSH ACC ;(61H)? #7BH
PUSH 35H ;(62H)? (35H)
即,(62H)? #11H
POP ACC ;(A)? (62H)
即,(A)? #11H
POP 5AH ;(5AH)? (61H)
即,(5AH)? #7BH
,单片微机原理及应用,教学课件
(二 )算术运算类指令 ( 6种 /24条) P.54
加法运算,(ADD——4条 )
带进位加法运算,(ADDC——4条 )
带借位减法运算,(SUBB——4条 )
加 1/减 1操作,(INC,DEC——9条 )
单字节乘 /除法运算,(MUL,DIV——2条 )
十进制调整,(DA A——1条 )
,单片微机原理及应用,教学课件
(二 )算术运算类指令 (续) P.55
加法运算,( ADD——4条)
带进位加法运算,( ADDC——4条)
带借位减法运算,( SUBB——4条)
所有的加法 (ADD)、带进位加法 (ADDC)、带借位减法 (SUBB)运算都是以 A为一个加数或被减数,最终结果也存进 A 。
加法 (ADD)、带进位加法 (ADDC) 以及带借位减法
(SUBB)运算中,如果产生了进位或借位,将自动对
PSW中的 Cy标志位 置,1‖ 。
带进位加法 (ADDC):(A)?(A)+(Cy)+(第二操作数 )
带借位减法 (SUBB):(A)?(A)-(Cy)-(第二操作数 )
,单片微机原理及应用,教学课件
(二 )算术运算类指令 (续) P.57
加 1/减 1操作,( INC,DEC——9条)
INC,DEC与 用加 /减法指令做 加 1/减 1 操作不同之处在于 INC,DEC不影响标志位,
单字节乘 /除运算,(MUL,DIV——2条 )
两个单字节数的乘 /除法运算只在 A与 B之间进行。
MUL AB,(A)与 (B)相乘,积为 16位 数,
(A)?积的 高 8位 ; (B)?积的 低 8位
DIV AB,(A)除以 (B),结果用 2字节表示,
(A)?商的 整数 部分 ;(B)?余数
,单片微机原理及应用,教学课件
(二 )算术运算类指令 (续) P.60
BCD码 是指,用二进制表达的十进制数,。如:
十进制数 20可以用二进制数 00010100B表示 ;
也可以用十六进制数 14H表示;
还可以用 BCD码 00100000B 或 20H 表示。
4个二进制位就可以表示 一位 BCD码:
0000~ 1001 可表示十进制数 (BCD数 ) 0~ 9;
8个二进制位就可以表示 两位压缩的 BCD码:
00000000~ 10011001 表示 00~ 99。
十进制调整,( DA A——1条)
用于两个 BCD码 之间的相加,这条指令 只能跟在
ADD 或 ADDC 之后
,单片微机原理及应用,教学课件若 (A)3~ 0?9或 (AC)=1则 (A)3~ 0?(A)3~ 0+ 6;
若 (A)7~ 4?9或 (CY)=1则 (A)7~ 4?(A)7~ 4+ 6;
P.60例 5:两个十进制数,65‖与,58‖相加,根据常识,显然其和应当为,123‖。
MOV A,#65H
ADD A,#58H
DA A
结果,(A)= 23H
(CY)= 1
指令,DA A‖ 完成的操作,
6 5 0110 0101
5 8 0101 1000
+
1 3
18 19
2
6 6 0110 0110
,单片微机原理及应用,教学课件若 (A)3~ 0?9或 (AC)=1则 (A)3~ 0?(A)3~ 0+ 6;
若 (A)7~ 4?9或 (CY)=1则 (A)7~ 4?(A)7~ 4+ 6;
又如:两个十进制数,39‖与,58‖相加,根据常识,显然其和应当为,97‖。
MOV A,#39H
ADD A,#58H
DA A
结果,(A)= 97H
(CY)= 0
3 9 0011 1001
5 8 0101 1000
+
0 7
23
9
6 0110
指令,DA A‖ 完成的操作,
,单片微机原理及应用,教学课件
(三 )逻辑运算及移位类指令 ( 5种 /24条)
—— P.61
逻辑与运算,( ANL——6条)
逻辑或运算,( ORL——6条)
逻辑异或运算,( XRL——6条)
累加器清零 /取反,( CLR,CPL——2条)
累加器移位操作,( RL,RLC,RR,RRC—4条)
,单片微机原理及应用,教学课件逻辑运算及移位类指令 (续) P.61
逻辑与 (ANL),逻辑或 (ORL),逻辑异或 (XRL):
累加器清零 /取反操作 ( CLR,CPL——2条)
CLR A ——对累加器清零 1 Byte 1 个 Tm
CPL A ——对累加器按位取非 1 Byte 1 个 Tm
指 令 形 式 Byte Tm
ANL(ORL,XRL) direct,A 2 1
ANL(ORL,XRL) direct,#data 3 2
ANL(ORL,XRL) A,#data 2 1
ANL(ORL,XRL) A,direct 2 1
ANL(ORL,XRL) A,@Ri 1 1
ANL(ORL,XRL) A,Rn 1 1
,单片微机原理及应用,教学课件逻辑运算指令 的常见用法逻辑与 ANL用于 清 0或者 保留 某些位:
例,ANL A,#0FH; 则 (A) = 0AH
( 已知累加器 A中已存有数,9AH )
逻辑或 ORL用于 置 1或者 保留 某些位:
例,ORL A,#0FH; 则 (A) = 9FH
逻辑异或 XRL用于 取反 或者 保留 某些位:
例,XRL A,#0FH; 则 (A) = 95H
(A)? 1001 1010
#0FH? 0000 1111
95H? 1001 0101
,单片微机原理及应用,教学课件逻辑运算及移位类指令 (续) P.64
累加器移位操作,( RL,RLC,RR,RRC——4条)
RL A 左环移累加器 A
累加器 ACy
累加器 ACy
累加器 A
RRC A 带进位位 右环移
RR A 右 环移
RLC A 带进位位 左环移
,单片微机原理及应用,教学课件
(四 )控制转移类指令 ( 4种 /17条) P.65
此类指令 改变程序的执行顺序 —— 改变当前 PC值无条件转移:
( LJMP,AJMP,SJMP,JMP——4条)
条件转移(判断跳转):
( JZ,JNZ,CJNE,DJNZ——8条)
子程序调用及返回:
( LCALL,ACALL,RET,RETI——4条)
空操作,( NOP——1条)
,耗时,一个机器周期。 do nothing!
,单片微机原理及应用,教学课件控制转移类指令 (续) P.65-67
无条件转移,LJMP,AJMP,SJMP,JMP——4条
LJMP addr16 长跳转指令
—— 可在 64K范围内跳转
AJMP addr11 绝对跳转指令
—— 可在 指令所在的 2K范围内跳转
SJMP rel 相对跳转指令
—— 可在当前 PC-128与 +127范围内跳转
JMP @A+DPTR 间接长跳转指令
—— 可在以 DPTR为基址 + A为偏移量之和所指向的 64K程序范围内跳转
,单片微机原理及应用,教学课件控制转移类指令 (续) P.67-69
条件转移,JZ,JNZ,CJNE,DJNZ—— 8条
JZ rel
JNZ rel
—— 根据 Acc的内容 是否为 0决定是否跳转
DJNZ direct,rel
DJNZ Rn,rel
—— 将 direct(或 Rn)里的内容减 1,结果不等于 0就跳转;等于 0则不跳转 继续往下走。
,单片微机原理及应用,教学课件条件转移 (续)
CJNE A,#data,rel
CJNE A,direct,rel
CJNE @Ri,#data,rel
CJNE Rn,#data,rel
—— 将 A(或 @Ri,或 Rn)与 #data(或 direct)相比较,其值 不相等就跳转;相等则不跳转,继续往下走。
,单片微机原理及应用,教学课件控制转移类指令 (续) P.70
LCALL addr16 子程序长调用指令
—— 可在 64K范围内调用子程序子程序调用及返回:
( LCALL,ACALL,RET,RETI——4条)
ACALL addr11 子程序绝对调用指令
—— 可在指令所在的 2K范围内调用子程序
RET 子程序返回指令
—— 子程序结束并返回调用的 下一条 指令
RETI 中断服务子程序返回指令
—— 中断结束 /返回被打断处的下一条指令
,单片微机原理及应用,教学课件
(五 )位操作类指令 ( 17条) P.71
位操作类指令 以位为单位进行逻辑运算及操作,
可分为 4种:
位传送,( MOV——2条)
位清零 /置位,( CLR,SETB——4条)
位逻辑与 /或 /非运算:( ANL,ORL,CPL——6条)
位条件转移,( JC,JNC,JB,JNB,JBC——5条)
,单片微机原理及应用,教学课件位操作类指令 (续) P.72
位传送指令( 2条):
MOV C,bit ——( C)?( bit)
MOV bit,C ——( bit)?( C)
注,bit表示位地址位清零 /置位指令( 4条):
CLR bit(或 C) —— ( bit或 C)?,0”
SETB bit(或 C) —— ( bit或 C)?,1”
位逻辑与 /或 /非指令( 6条):
ANL C,bit(或 /bit)
ORL C,bit(或 /bit)
CPL bit (或 C)
注,“/bit” 表示对 bit位先取反然后再参加运算
,单片微机原理及应用,教学课件位操作类指令 (续) P.74
判位 条件转移 指令 ( 5条):
JC rel—— ( Cy) =“1” 就跳转;否则不跳转
JNC rel—— ( Cy)?,1” 就跳转;否则不跳转
JB bit,rel
—— ( bit) =“1” 就跳转;否则不跳转
JNB bit,rel
—— ( bit)?,1” 就跳转;否则不跳转
JBC bit,rel
—— ( bit) =“1” 就 先将其清零 再跳转;
否则,不动此位也不跳转。
,单片微机原理及应用,教学课件任务一:控制一盏灯点亮任务二:红灯周期性地亮 /灭
JOB3,CLR P1.1 ; P1.1清,0‖,亮绿灯
REDO,SETB P1.3 ;将 P1.3置,1‖
CHECK:JNB P1.3,CHECK ;检测 传感器是否被阻断
LOOP,………… ;有入侵者,报警!
AJMP REDO ;再跳回去检测
JOB1,CLR P1.0 ;P1.0清,0‖,亮红灯
HERE,AJMP HERE ;原地等待,不做别的事
JOB2,CPL P1.0 ;对 P1.0取反,红灯亮 /灭
ACALL DELAY ;延时 1秒
AJMP JOB2 ;重复任务三:红外防盗报警前面的简单测控实例中的程序,位操作指令
,单片微机原理及应用,教学课件任务一:控制一盏灯点亮任务二:红灯周期性地亮 /灭
JOB3,CLR P1.1 ; P1.1清,0‖,亮绿灯
REDO,SETB P1.3 ;将 P1.3置,1‖
CHECK:JNB P1.3,CHECK ;检测传感器是否被阻断
LOOP,………… ;有入侵者,报警!
AJMP REDO ;再跳回去检测
JOB1,CLR P1.0 ;P1.0清,0‖,亮红灯
HERE,AJMP HERE ;原地等待,不做别的事
JOB2,CPL P1.0 ;对 P1.0取反:红灯亮 /灭
ACALL DELAY ;延时 1秒
AJMP JOB2 ;重复任务三:红外防盗报警跳转指令前面的简单测控实例中的程序,
,单片微机原理及应用,教学课件小结,MCS-51指令集 (五大类功能)
数据 传送 类指令 ( 29条 )
算术 运算类指令 ( 24条 )
逻辑 运算及移位类指令 ( 24条 )
控制 转移 类指令 ( 17条 )
位 操作 (布尔操作 )类指令 ( 17条 )
小结
,单片微机原理及应用,教学课件内部存储器间传送,( MOV——16条)
外部数据存储器 RAM与累加器间传送,
( MOVX——4条)
程序存储器 ROM向累加器传送:
( MOVC——2条)
数据交换:( XCH,XCHD,SWAP——5条)
堆栈操作,( PUSH,POP——2条)
(一 )数据传送类指令 ( 5种 /29条)小结
,单片微机原理及应用,教学课件
(二 )算术运算类指令 ( 6种 /24条)
加法运算 (ADD——4条 )
带进位加法运算 (ADDC——4条 )
带借位减法运算 (SUBB——4条 )
加 1/减 1操作 (INC,DEC——9条 )
单字节乘 /除法运算 (MUL,DIV——2条 )
十进制调整 (DA A——1条 )
小结
,单片微机原理及应用,教学课件
(三 )逻辑运算及移位指令 ( 5种 /24条)
逻辑与运算,( ANL——6条)
逻辑或运算,( ORL——6条)
逻辑异或运算,( XRL——6条)
累加器清零 /取反,( CLR,CPL——2条)
累加器移位操作,( RL,RLC,RR,RRC—4条)
小结
,单片微机原理及应用,教学课件
(四 )控制转移类指令 ( 4种 /17条)
无条件转移,
( LJMP,AJMP,SJMP,JMP——4条)
条件转移(判断跳转):
( JZ,JNZ,CJNE,DJNZ——8条)
子程序调用及返回:
( LCALL,ACALL,RET,RETI——4条)
空操作,( NOP——1条)
小结
,单片微机原理及应用,教学课件
(五 )位操作类指令 ( 4种 17条)
位传送,( MOV——2条)
位清零 /置位,( CLR,SETB——4条)
位逻辑与 /或 /非运算:
( ANL,ORL,CPL——6条)
位条件转移,
( JC,JNC,JB,JNB,JBC——5条)
小结
,单片微机原理及应用,教学课件汇编语言与简单程序设计
,单片微机原理及应用,教学课件汇编语言程序设计中的 数计算机 只能 识别二进制数 ——机器指令,它原本是不认识 常用的 十六进制数 和 十进制数 的。
机器指令 /目标代码:
由 0/1代码组成的操作码与操作数。
十六进制数,便于读写记忆的二进制数的简写形式。
( 0~ 9,A~ F 后缀,H/h)
BCD码,用二进制数表达的十进制数。
( 0~ 9表示为,0000~ 1001B 后缀,B/b,H/h)
二进制数,由 0/1组成、“逢 2进 1” 的数制。
如,01011110B ( 0~ 1 后缀,B/b)
,单片微机原理及应用,教学课件汇编语言编程 基本规则汇编语言,用助记符描述的指令的集合 。
√ 指令中以 A—F 开头的十六进制数前必须添一个
,0‖。
√ 二进制数 必须 带后缀,B‖或,b‖;十六进制数 必须 带后缀,H‖或,h‖;十进制数的后缀是,D‖或
,d‖或 无,
[标号,]操作码 [目的操作数 ][,源操作数 ][;注释 ]
汇编程序,汇编语言编写的程序借助 编译工具编译 成为 目标代码,计算机才能识别。这个编译工具称为汇编程序。
,单片微机原理及应用,教学课件汇编程序的 伪指令汇编程序 → 软件 → 工具 → 工具软件,
将程序员 用汇编语言编写的程序 翻译成机器码
(真 )指令,告诉 计算机 如何操作以及做何种操作用汇编语言编写的程序 在此被称为 应用程序伪指令,告诉 汇编程序 在翻译应用程序时 有何具体约定 。 伪指令不进行具体的操作,那是真指令的事。
比如,从何处开始,何处结束,某些编程者自己规定的表述代表什么意思 ……
,单片微机原理及应用,教学课件汇编程序的 常用伪指令
ORG addr16——ASM51程序中一定要写!
规定编译后的机器代码存放的 起始位置 。
END ——ASM51程序中一定要写!
表示翻译到此 结束,其后的任何内容不予理睬。
符号名称 EQU 表达式将表达式的值赋予符号名称。程序中凡出现该 符号名称 就 等同于 该 表达式 。
$ ——,当前 PC值,也叫 位置计数器代表正在执行的指令所在位置。
,单片微机原理及应用,教学课件汇编程序的 常用伪指令 (续 )
符号名称 BIT 位地址将位地址的值赋予符号名称。程序中凡出现该符号名称 就 代表 该 位地址 。
DW 双字节数据 [或双字节数据组 ]
将 双字节数据 [或双字节数据组 ]顺序 存放在 此后的 存储单元中 。占据相应存储空间。
DB 8位数据 [或 8位数据组 ]
将 8位数据 [或 8位数据组 ]顺序 存放在 此后的 存储单元中 。占相应数量的存储空间。
,单片微机原理及应用,教学课件程序的 顺序 /分支 /循环三种基本结构
ORG 2000H
BCD2B,MOV A,R2 ;取入口数据
ANL A,#0F0H ;取出十位
SWAP A ;高 4位 低 4位
MOV B,#0AH
MUL AB ;十位乘 10
MOV R3,A ;积 暂存 进 R3
MOV A,R2;再取入口数据
ANL A,#0FH ;取出个位
ADD A,R3
MOV R2,A ;结果 R2
RET ;若不是子程序可用 END
例 P.82—1:
将 R2中 BCD码数转为 二进制数存进 R2
(此子程序在下一例中还要用到)
,单片微机原理及应用,教学课件编程要点:
两字节 BCD码数范围为,0000H—9999H
相应 2进制 /16进制数为,0000H—270FH
调用 BCD2B子程序 实现,千位,百位,转为二进制,
并乘 100;
再调 BCD2B子程序 实现,十位,个位,转为二进制 ;
最后,对位相加。
例 P.82—2,将 R5R4中的 双字节 BCD码 数转为 二进制 数存于 R5R4中 。
程序的 顺序 /分支 /循环三种基本结构
,单片微机原理及应用,教学课件例 P.82—2:
将 R5R4中的 两字节 BCD码 数转为 二进制 数存于 R5R4中 X 100
千 百 十 个二进制
+
Cy+
(R5) (R4)
(R5) (R4)
(R6) (A)(R5)
(A)
二进制二进制 二进制二进制二进制调 BCD2B
调 BCD2B
程序的 顺序 /分支 /循环三种基本结构
,单片微机原理及应用,教学课件
ORG 2000H
VAR EQU 30H ;定义缓存单元
FUNC EQU 31H ;书中缺此二句
BR1,MOV A,VAR ;取出变量,X‖
JZ COMP ;若 =0,就 赋 0
JNB ACC.7,POS1 ;判断 = 正?
MOV A,#0FFH ;(-1 = +1取反加 1)
SJMP COMP ;输出 -1
POS1,MOV A,#01H ;输出 +1
COMP,MOV FUNC,A ;赋给函数,Y‖
HERE,AJMP HERE
END
P.83例 3:
1 (X>0)
0 (X=0)
–1(X<0)
Y=
程序的 顺序 /分支 /循环三种基本结构
,单片微机原理及应用,教学课件任务一,控制一盏灯点亮任务二,红灯周期性亮 /灭任务三,红外防盗报警
0RG 0000H
AJMP MAIN
ORG 0003H
RL A
ACALL DELAY
RETI
MAIN,MOV A,#80H
SETB EX0
SETB EA
WAIT:JB ACC.0,JOB1
JB ACC.1,JOB2
JB ACC.2,JOB3
AJMP WAIT
JOB1,CLR P1.0 ;亮红灯
HERE,AJMP HERE
JOB2,CPL P1.0 ;亮 /灭
ACALL DELAY ;延时 1秒
AJMP JOB2 ;重复
JOB3,CLR P1.1 ;亮绿灯
REDO,SETB P1.3
CHECK:JNB P1.3,CHECK
LOOP,………… ;报警!
AJMP REDO ;再检测程序的 顺序 /分支 /循环三种基本结构
,单片微机原理及应用,教学课件
ORG 1000H
DELAY,MOV R6,#200 ; 1Tm
LOOP1:MOV R7,#248 ; 1Tm
NOP ; 1Tm
LOOP2:DJNZ R7,LOOP2 ; 2Tm
DJNZ R6,LOOP1 ; 2Tm
RET ; 1Tm
例 P.85—86:软件循环延时 100mS(晶振 12MHz)
☆ 1Tm =1uS 100mS = 100000 uS
☆ MOV Rn #data 和 NOP 是 单机器周期 指令
☆ DJNZ Rn,rel 是 双机器周期 指令
☆ 200 = 0C8H ; 248 = 0F8H
1+1+
248x
2
=498
(498+2
)x200
程序 的顺序 /分支 /循环 三种基本结构
,单片微机原理及应用,教学课件
ORG 1000H
DL1S,MOV R7,#10
DL1,MOV R6,#200
DL2,MOV R5,#250
DL3,DJNZ R5,DL3
DJNZ R6,DL2
DJNZ R7,DL1
RET
例,软件循环延时 1S(晶振 12MHz)
☆ 1Tm =1uS 1S = 1000000 uS
☆ MOV Rn #data 是 单机器周期 指令
☆ DJNZ Rn,rel 是 双机器周期 指令
1+
250x2
1+
[(1+250x2)
+2)]x200
1+
[(1+250x2+2)
x200+2]x10
程序 的顺序 /分支 /循环 三种基本结构
,单片微机原理及应用,教学课件
ORG 2000H
H2ASC,MOV A,R2 ;取待转换的数据 (入口 )
ADD A,#0F6H ;判此数是否 ≥ 10?
若 ≥ 10,则 C=1;< 10,则 C=0
MOV A,R2 ;重取待转换的数据
JNC AD30H ;小于 10就跳去加 30H
ADD A,#07H ;≥10 就先加 7 再去加 30H
AD30H,ADD A,#30H
MOV R2,A ;存结果 (出口 )
RET
P.88例 1:16进制数 (00H—0FH)转 ASCII码 子程序算法,凡 ≥ 10的十六进制数加 37H;凡< 10的十六进制数加 30H。 (参见 P.333 ASCII码表 )
ie,0~ 9 → 30H~ 39H,A~ F → 41H~ 46H
,单片微机原理及应用,教学课件
TABL,DW 050FH,0E89H,0A695H,1EAAH,0D9BH,7F93H
DW 0373H,26D7H,2710H,9E3FH,1A66H,22E3H
DW 1174H,16EFH,33E4H,6CA0H
P.95例 6,根据 16个双字节数的 序号查表 找出对应数据表地址 #TABL #TABL+1 #TABL+2 #TABL+3 …… #TABL+30 #TABL+31
数据 Y Y0高 Y0低 Y1高 Y1低 …… Y15高 Y15低序号 X 00H 01H …… 0FH
编程思路,以表格 首地址 (TABL)为基址,以序号
(的 2倍 )为偏移量,查找对应的数据
,单片微机原理及应用,教学课件
ORG 2000H (先改动 P.96程序中的 4条语句 )
STA1,MOV A,R2 ;取待查数据的序号 X (入口 )
RL A ;每数占 2个单元,序号要乘 2
MOV R4,A ;R4 ← 序号 x2 (即 偏移量 )
MOV DPTR,#TABL ;DPTR ← 表格首地址
MOVC A,@A+DPTR ;(A)← 查到数据高 8位
XCH A,R4 ;数据高 8位存进 R4(出口 );同时取出 偏移量 到 A
INC DPTR ;DPTR指向下一个单元
MOVC A,@A+DPTR ;再查到数据低 8位
MOV R3,A ;将数据低 8位存进 R3(出口 )
RET
TABL,DW …………… ;表格数据见前页
END
,单片微机原理及应用,教学课件
OVER !