|
单片机学习笔记
一、 单片机的指令系统
1,指令长度可分为:单字节,双字节,三字节。
2,指令的格式: 标号: 操作码 操作数或操作数地址;注释
3,试列 DELAY: MOV R3,#0FFH ;一段延时程序
二、 寻找操作数
注:以逗号后面寻找操作数的方式来确定是什么寻址方式
1,立即数寻址:立即找到操作数,例:MOV A , #55H
例:MOV Rn, #01H
Rn:工作寄存器00H——1FH
MOV DPTR, #1FFFH
DPTR:特殊功能寄存器两个8位DPH,DPL唯一一条16位传输指令
MOV 70H(direct), #88H
Direct:一个通用单片内部RAM地址,且只能是8位地址,要具体写地址某个单元
ADD A, #55H
将A的内容加上后面这个立即数,得到的值还要送去累加器A
SUB A, #01
将A的内容减去后面这个立即数,得到的差值还要送给累加器A
关键字符:“#”带这个字符说明就是一个数据。
2,直接寻址:已知一个操作数的地址单元,可根据这个地址找到这个操作数,直接给出单元的地址。
例:MOV A, 20H
将20H这个地址单元里的操作数送到累加器A
MOV Rn, 30H
Rn:工作寄存器
MOV @Ri, 30H
ADD A, 30H
SUB A, 30H
3,寄存器寻址:以寻找已知寄存器地址的方式寻找。
例:MOV P1, A
把A寄存器里的值附到P1口
MOV P1, R4
将R4里面的内容送P1口
CLR A
清除寄存器A里的值
4,寄存器间接寻址:先找到一个寄存器里存放操作数的内部RAM地址再找到这个地址才能找到操作数。
例:MOV A, @R0
将R0寄存器的内容作为地址,这个地址所确定的单元的内容送到累加器A
MOVX A, @DPTR
在外部寄存器DPTR里找到内容作为地址,以这个地址找到所对应的单元里的内容送再到累加器A
注:间接寄存器寻址只能在R0、R1、DPTR,里寻址
5,变址寻址:将两个寄存器(A、DPTR、PC)相加所得到的值作为程序存储区的地址来找到程序存储区里的操作数
例:MOVC A,@A+DPTR
将寄存器A和DPTR两个值相加所得到的值作为单元地址再寻找程序存储区里的操作数
MOVC A,@A+PC
将寄存器A里的内容与下一条将要执行的地址相加所得到的值作为单元地址在程序存储区寻找操作数
6,相对寻址:相对寻址不需要操作数,只是PC当前执行地址的一个转移值,将PC转移到指定的地方再执行程序
例:SJMP 03H
将当前PC所执行的地址加03H所得到的值作为执行地址
7,位寻址:查找单元里某位的值
位寻址区20H—2FH。
例:SETB 3DH
将3DH里的值改成1
CLR 3DH
将3DH里的值改0
三、 *指令系统
1、 数据传送指令(29条)
1)MOV <目的操作数>,<源操作数>8位传送指令(15条)
2)16位数据传送指令(1条)
MOV DPTR,#date16
3)外部数据传递指令(4条)
MOVX <目的操作数>,<源操作数>
取数
送数
3)MOVC单片机与ROM之间的数据传送
MOVC A,@A+DPTR
MOVC A,@A+PC
4)交换类指令(5条)
字节交换指令(3条)
XCH
低半字节交换指令(1条)低4位进行交换
XCHD A ,@Ri 这里假设i=0
高半字节交换指令===高4位交换
SWAP A
交换他自己的高4位和低4位
5)堆栈操作指令(2条)
PUSH direct POP direct(压入和弹出)复位后SP=07H
压 保护现场
PUSH 33H
PUSH 34H
弹
POP 恢复现场
堆栈原则:后进先出
2、 算术运算类指令(24条)
ADD A ,
ADDC A, A+Rn+Cy
Cy:是一个进位标志
SUBB A,
——BCD码 调整指令(1条)
DA A
含义:以二进制的形式来描述十进制数。
进行ADD或ADDC加法运算的后面
8421:BCD码
乘法指令(条)
MUL AB
将A和B里的内容相乘
A中存放结果的低8位
B中存放结果的高8位
例:MOV A, #02H
MOV B, #03H
MUL AB
A(06H) B(00H)
MOV A, #20(14H)
MOV B, #20
MUL AB
A(90) B(01)
除法指令(1条)
DIV AB
例MOV A, #25
MOV B, #03
DIV AB;
A(08H) B(01H)
A中存放商 B中存放余数
逻辑运算指令(24条)
逻辑与指令(6条)
定义:和0相与都为0,和1相与原值不变
逻辑或指令(6条)
定义:与1相或都是1,与0相或原值不变
逻辑异或指令(6条)
定义:相同取0,和1相异或取反,和0异或保留原值
累加器A清0和取反指令(非运算)
CLR A 清0
CPL A 取反
控制转移指令(17条)
——循环移位指令
RL A 向左移 < < < < < < < 小循环
RR A 向右移 > > > > > > >
RLC A Cy < < < < < 大循环
RRC A Cy > > > > >
应用:跑马灯
例:MOV A, #01H 8个灯循环点亮
MOV P1, A
RL A
MOV P1, A
*——无条件转移指令(4条)
无条件/有条件
1)长转移指令:LJMP AAAAH; AAAAH >PC
该指令可以转移在64KB程序存储区里
2)绝对转移指令:AJMP addr11; addr11 >PC.10----PC.0
转移范围为2KB/页地址(现在不常用)
3)相对转移指令(短转移指令):SJMP 03H
转移范围 -128—+127字节内
补码:正数的补码就是其原码本身,负数的补码是将原码取反再加1(符号位不变)
4)散转指令:JMP @A+DPTR
将DPTR中的内容作为基地址,通过修改A的内容实现散转
—条件转移指令(8条)
1)累加器A判0指令(2条)
2)判别位标志CY状态指令(2条)
3)判别某位Bit状态指令(3条)
4)减1非0转移指令(2条)
5)比较转移指令(4条)
条件转移类指令范例(一)
将00H—0FH这16个数顺序地置入片内RAM 20H—2FH单元中 。
MOV R0, #20H
MOV R7, #0FH
CLR A
LOOP: MOV @R0, A
INC A
INC R0
DJNZ R7, LOOP
SJMP $
条件转移类指令范例(二)
MOV R0, #20
MOV R7, #0FH ;这句话不用写改为10H
CLR A
LOOP: MOV @R0, A
INC A
INC R0
CJNE A, #0FH, LOOP ;这里也要改成10H
SJMP $
——调用和返回指令(8条)
1) 绝对调用指令(1条)
2)长调用指令(1条)
3)返回指令
这种程序常常叫作子程序。子程序最后要
位操作指令(17条)
1、 位传送指令
2、 位置位和位清0指令
3、 位运算指令
例:逻辑电路 L=D(E+F)+/G
MOV C, E
ORL C, F
ANL C, D
ORL C, /G
MOV 20H, C
常用伪指令(17)