第3章 80C51单片机指令系统
考试知识点:
1、寻址方式
(1)立即寻址(#data,#data16)例:MOV A,#00H
(2)直接寻址(direct)内部RAM:00~7FH、特殊功能寄存器 例:MOV A,00H
(3)寄存器寻址(A、B、Rn、DPTR)
(4)寄存器间接寻址(@Ri、@DPTR)例:MOVX A,@DPTR
(5)变址寻址(@A+DPTR,@A+PC)例:MOVC A,@A+DPTR
(6)位寻址(bit)20~2FH:00~7FH、特殊功能寄存器 例:MOV C,00H
(7)相对寻址(rel)例:JZ rel
2、数据传送类指令
(1)内部RAM数据传送指令
MOV 目的,源;目的→源
交换指令:
XCH A,direct/Rn/@Ri;A和源交换
XCHD A,@Ri;只换低4位
SWAP A;A的高低4位交换
注意:A作目的操作数会影响P。
PUSH direct
POP direct
(2)外部RAM数据传送指令
MOVX A,@Ri/@DPTR;外部地址内容→A
MOVX@Ri/@DPTR,A;A→外部地址内容
(3)ROM数据传送指令
MOVC A,@A+DPTR/@A+PC;查表指令
3、算术运算指令
(1)加法指令
ADD/ADDC A,#data/ direct/ Rn/@Ri;会影响CY、AC、OV、P
INC A/ direct/ Rn/@Ri/DPTR;加1,P
DA A;十进制调整,大于9加6
(2)减法指令
SUBB A,#data/ direct/ Rn/@Ri;会影响CY、AC、OV、P
DEC A/ direct/ Rn/@Ri;减1
(3)乘除指令
MUL AB;(A)*(B)→BA,会影响CY=0,OV,P
DIV AB;(A)/(B)的商→A,余数→B
4、逻辑运算及移动指令
(1)逻辑运算指令
ANL/ORL/XRL A,#data/ direct/ Rn/@Ri
ANL/ORL/XRL direct,A/#data
与→清0,或→置1,异或→取反
CLR/CPL A;清0和取反
(2)移位指令
RL/RR/RLC/RRC A
注意:每左移一位相当于乘2,每右移一位相当于除2,带进位的移会影响CY和P。
5、控制转移类指令
(1)无条件转移指令
LJMP addr16;addr16→PC,64KB
AJMP addr11;(PC)+2→PC,addr11→PC10~0,2KB
SJMP rel;(PC)+2+rel→PC,256B
JMP @A+DPTR;(A)+(DPTR)→PC,64KB
(2)条件转移指令
累加器A判0转移指令
JZ rel;A为0
JNZ rel;A不为0
比较不相等转移指令
CJNE A/Rn/@Ri,#data,rel
CJNE A,direct,rel
注意:第一操作数和第二操作数不相等,程序转移,若第一大于第二,CY=0,第一小于第二,CY=1。第一操作数和第二操作数相等,程序顺序执行,CY=0。
减1不为0转移指令
DJNZ Rn/direct,rel;(Rn/direct)-1不为0,程序转移。
(3)调用和返回指令
LCALL addr16;(PC)+3→PC,先入低8位,再入高8位,addr16→PC
ACALL addr11;(PC)+2→PC,先入低8位,再入高8位,addr11→PC10~0
RET;先出高8位,再出低8位
6、位操作类指令
(1)位传送指令
MOV C,bit
MOV bit,C
(2)位赋值指令
CLR C/bit
SETB C/bit
(3)位逻辑运算指令
ANL/ORL C,bit或/bit
CPL C/bit
注意:实现逻辑表达式
(4)位控制转移指令
JC rel;(CY)=1
JNC rel;(CY)=0
JB bit,rel;(bit)=1
JNB bit,rel;(bit)=0
JBC bit,rel;(bit)=1,转移,清0
第4章 80C51单片机汇编语言程序设计
考试知识点:
1、汇编语言的语句格式
【标号:】 操作码 【操作数】 【;注释】
标号:语句地址的标志符号。
操作码:语句执行的操作内容,用指令助记符表示。
操作数:为指令操作提供数据。
注释:对语句的解释说明。
2、伪指令
起始地址ORG、结束END、赋值EQU、字节DB、字DW、空DS、位BIT
3、汇编语言程序的基本结构形式
(1)顺序结构
(2)分支结构
(3)循环结构:数据传送问题、求和问题
4、定时程序
例:延时100ms的子程序,设晶振频率6MHZ。
DELAY:MOV R5,#250
LOOP2:MOV R4,#49
LOOP1:NOP
NOP
DJNZ R4,LOOP1
DJNZ R5,LOOP2
RET
5、查表程序
(1)要查找的数据在表中的位置给A
(2)表的首地址给DPTR
(3)MOVC A,@A+DPTR
(4)数据表
第5章 80C51单片机的中断与定时
考试知识点:
1、中断源和中断请求标志位
中断名称 | 中断请求标志 | 中断向量 |
外部中断0 | IE0 | 0003H |
T0中断 | TF0 | 000BH |
外部中断1 | IE1 | 0013H |
T1中断 | TF1 | 001BH |
串行发送中断 | TI | 0023H |
串行接收中断 | RI | 0023H |
2、和中断相关的寄存器的设置
(1)定时器控制寄存器TCON
格式如下:
位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
TCON | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
位地址 | 8F | 8E | 8D | 8C | 8B | 8A | 89 | 88 |
IT0=0,为电平触发方式。 低电平有效。
IT0=1,为边沿触发方式。 输入脚上电平由高到低的负跳变有效。
IE0=1,说明有中断请求,否则IE0=0。
(2)中断允许控制寄存器IE
其各位的定义如下:
位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
代号 | EA | — | — | ES | ET1 | EX1 | ET0 | EX0 |
EA: 开放或禁止所有中断。ES:开放或禁止串行通道中断。ET1:开放或禁止定时/计数器T1溢出中断。EX1:开放或禁止外部中断源1。ET0:开放或禁止定时/计数器T0溢出中断。EX0:开放或禁止外部中断源0。
(3)中断优先级控制寄存器IP
各位的定义如下:
位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
代号 | — | — | — | PS | PT1 | PX1 | PT0 | PX0 |
1为高优先级、0为低优先级。如果同级的多个中断请求同时出现,则按CPU查询次序确定哪个中断请求被响应。查询次序为:外部中断0、T0中断、外部中断1、T1中断、串行中断。
3、响应中断的必要条件
(1)有中断源发出中断请求。
(2)中断允许寄存器IE相应位置“1”,CPU中断开放(EA=1)。
(3)无同级或高级中断正在服务。
(4)现行指令执行到最后一个机器周期且已结束。若现行指令为RETI或需访问特殊功能寄存器IE或IP的指令时,执行完该指令且其紧接着的指令也已执行完。
中断响应的主要内容是由硬件自动生成一条长调用指令,指令格式为“LCALL addr16”。这里的addr16就是程序存储器中断区中相应中断的入口地址。
4、中断程序设计
(1)在0000H处存放一条无条件转移指令转到主程序。
(2)在入口地址处存放一条无条件转移指令转到中断服务子程序。
(3)设置触发方式(IT0/IT1)
(4)设置IE和IP。
(5)设置SP。
(6)原地踏步。
(7)中断服务子程序。最后RETI。
5、定时计数的基本原理
(1)定时功能:每个机器周期计数器加1。
(2)计数功能:T0(P3.4)和T1(P3.5)输入计数脉冲,每一来一个脉冲计数器加1。
6、用于定时计数的寄存器的设置
(1)定时器控制寄存器TCON
格式如下:
位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
TCON | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
位地址 | 8F | 8E | 8D | 8C | 8B | 8A | 89 | 88 |
TF1、TF0——计数溢出标志位。当计数器产生计数溢出时,由硬件置1。采用查询方式,它是供查询的状态位。采用中断方式,作为中断请求信号。
TR1、TR0——计数运行控制位。为1时,启动定时器/计数器工作;为0时,停止定时器/计数器工作。
(2)工作方式控制寄存器TMOD
其格式如下:
GATE:门控位。当GATE=1时,同时INTx为高电平,且TRx置位时,启动定时器,外部启动。当GATE=0时,每当TRx置位时,就启动定时器,是内部启动方式。
C/T:选择定时器功能还是计数器功能。该位置位时选择计数器功能;该位清零时选择定时器功能。
M1M0:这两位指定定时/计数器的工作方式,可形成四种编码,对应四种工作方式:
M1 | M0 | 方式 | 说明 |
0 | 0 | 0 | TLx低5位与THx中8位构成13位计数器 |
0 | 1 | 1 | TLx与THx构成16位计数器 |
1 | 0 | 2 | 可自动再装入的8位计数器,当TLx计数溢出时,THx内容自动装入TLx。 |
1 | 1 | 3 | 对定时器0,分成两个8位的计数器;对定时器1,停止计数。 |
7、各种工作方式计数初值计算公式
方式0:
定时时间T=(8192-计数初值)×机器周期
计数次数C=8192-X
方式1:
定时时间T=(65536-计数初值)×机器周期
计数次数C=65536-X
方式2:
定时时间T=(256-计数初值)×机器周期
计数次数C=256-X
8、定时器程序设计
查询方式:
(1)在0000H处存放一条无条件转移指令,转到主程序。
(2)设置工作方式TMOD。
(3)设置计数初值。
(4)启动定时计数。
(5)等待时间到或计数计满。
LOOP:JBC TF0/TF1,LOOP1
SJMP LOOP
LOOP1:……
(6)重新设置计数初值(除方式2),再转第5步。
中断方式:
(1)在0000H处存放一条无条件转移指令,转到主程序。
(2)在入口地址处存放一条无条件转移指令转到中断服务子程序。
(3)设置工作方式TMOD。
(4)设置计数初值。
(5)启动定时计数。
(6)设置IE和IP。
(7)设置SP。
(8)原地踏步。
(9)中断服务子程序。重新设置计数初值(除方式2),最后RETI。
例 选用定时器/计数器T1工作方式0产生500µS定时,在P1.1输出周期为1ms的方波,设晶振频率=6MHZ。
(1)根据定时器/计数器1的工作方式,对TMOD进行初始化。
按题意可设:GATE=0(用TR1位控制定时的启动和停止), C/T =0(置定时功能),M1M0=00(置方式0),因定时器/计数器T0不用,可将其置为方式0(不能置为工作方式3),这样可将TMOD的低4位置0,所以(TMOD)=00H。
(2)计算定时初值
( - X)×2=500
X=7942D=1111100000110B
将低5位送TL1,高8位送TH1得:(TH1)=F8H,(TL1)=06H
(3) 编制程序(查询方式)
ORG 0000H
LJMP MAIN
ORG 0300H
MAIN: MOV TMOD,#00H ;TMOD初始化
MOV TH1,#0F8H ;设置计数初值
MOV TL1,#06H
SETB TR1 ;启动定时
LOOP: JBC TF1,LOOP1 ;查询计数溢出
AJMP LOOP
LOOP1:CPL P1.1 ;输出取反
MOV TL1,#06H ;重新置计数初值
MOV TH1,#0F8H
AJMP LOOP ;重复循环
END
例 用定时器/计数器T1以工作方式2计数,要求每计满100次进行累加器加1操作。
(1)TMOD初始化
M1M0=10(方式2),C/T =1(计数功能),GATE=0(TR1启动和停止),因此(TMOD)=60H。
(2)计算计数初值
2^8 -100=156D=9CH 所以 TH1=9CH
(3)编制程序(中断方式)
ORG 0000H
AJMP MAIN ;跳转到主程序
ORG 001BH ;定时/计数器1中断服务程序入口地址
AJMP INSERT1
ORG 0030H
MAIN:MOV TMOD #60H ;TMOD初始化
MOV TL1,#9CH ;首次计数初值
MOV TH1,#9CH ;装入循环计数初值
SETB TR1 ;启动定时/计数器1
SETB EA ;开中断
SETB ET1
SETB PT1 ;T1为高优先级
MOV SP,#40H
SJMP ﹩ ;等待中断
INSERT1:INC A
RETI
END