(4)已知要求的定时时间t,则定时器的初值为:
8
x=2-t×fosc/12=256-t×fosc/12
求得初值以后,应将x分配到TL0和TH0(两者相同):
方式3(M1 M0=1 1)仅限于T0 前3种工作方式,对两个定时器的设置和使用时完全相同。方式3下,z则是不同的。 方式3下的定时器0
方式3只适用于定时器T0。定时器0在方式3下被拆成两个独立的8位计数器TL0和TH0。其中T0既可计数使用,又可定时使用。TL0使用原T0的各控制位和引脚信号,其功能和操作方式与方式0和方
第5章 中断系统
M1 M0 0 0 0 1 1 0 式1基本相同。 TH0只可以用作简单的内部定时,占用原定时器T1的控制位TR1和TF1,还占用T1的中断源,其关闭和启动只受TR1的控制。 方式3下的定时器1
定时器T1只能用作方式0、方式1和方式2。由于TR1、TF1和T1的中断源已被定时器T0占用。此时只有控制位C/T切换控制定时和计数工作方式,且计数溢出时,只能将输出送入串行口。将定时器T1用作串行口的波特率发生器。
当设置好工作方式时,T1便开始运行;如要停止运行,只需送入一个设置定时器T1为方式3的方式控制字即可。因为定时器T1不能在方式3下使用,如果硬把它设置为方式3,就停止工作。
工作方式 方式0 方式1 方式2 功能说明 13位计数器 16位计数器 自动重新装入初值的8位计数器 T0:分成两个8位计数器; T1:停止计数 1 1 方式3 外部中断的应用-举例
例1:用一个按钮控制8个发光二极管,每按动一次按钮,是发光二极管按L1 →L2 →?. →L8 →L1的顺序循环移动点亮一位。
解:如图所示。在P1.0-P1.7外部连接8个发光二极管L1-L8,当P1.X输出低电平时,对应的发光二极管被点亮;当P1.X输出为高电平时,对应的发光2
极管熄灭。
在/INT1引脚上外接一个按钮。当按钮按下时,/INT1为低电平;按钮释放时,/INT1为高电平。 1. 用中断方式实现
单片机复位以后PC的值为0000H,外部中断1的矢量地址是0013H,而外部中断1的子程序必须放置在从0013H开始的8个存贮单元,无法实现。
考虑到从0000H到0013H只有19个单元空间,不可能放置完整的主程序,因此在0000H处放置一条转移指令,将主程序引
到别的位置;
不同的中断矢量地址之间,只有8个存储单元,无法放置完整的终端服务程序,因此在中断入口处也放置一条转移指令,以便将程序引到真正的中断程序的开始位置。一般习惯将中断程序放置在主程序之后。
用按钮控制发光二极管 ORG 0000H ;PC复位地址 AJMP MAIN ;MAIN为主程序入口地址
ORG 0013H ;外部中断1的矢量地址
AJMP INT_1 ;INT_1为外部中断1服务程序入口地址 ORG 0100H ;真正的主程序开始
MAIN: MOV SP, #60H ;堆栈初始化 MOV A, #11111110B MOV P1, A ;点亮二极管L1 SETB IT1 ;将外部中断1设置为下降沿触发方式 SETB EA ;CPU开中断
SETB EX1 ;外部中断1开中断 SJMP $ ;等待中断 ORG 0200H ;真正的外部中断1服务程序 INT_1: JB P3.3, EXIT RL A ;修改灯的状态 MOV P1, A EXIT: RETI ;中断返回 END 2.用查询方式实现 所谓查询,就是周期性的对按钮的状态进行访问,当查询到按钮为有效电平时就采用相应的处理。 ORG 0000H SETB P3.3 ;将P3.3设置为输入状态 MOV A, #0FEH ;设置为L1~L8的初始状态 LOOP: MOV P1, A JB P3.3, $ ;若按钮未动作,则原地等待
JNB P3.3, $ ;等待按钮释放,保证按动一次发光二极管只移动一位
RL A SJMP LOOP END ADC A,R3 例:双字节加法:设被加数在R0, R1中,加 MOV R5, A 数在R2, R3中,和存在R4, R5, R6中。 MOV A,#00H
ADC A, #00H DADD:MOV A,R0
CLR C MOV R6, A
, R2 RET ADD A
MOV R4,A MOV A,R1
2.MCS-51单片机内RAM的通用寄存器区共有32个单元,分为4组寄存器,每组8个单元,以R0 ~ R7作为寄存器名称。
4.MCS-51单片机的存储器分为4个物理上相互独立的存储空间,即片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器,按其逻辑关系可分为3个逻辑上相互独立的存储器空间。
5.MCS-51单片机片内和片外数据存储器的寻址空间可分为00H~FFH、0000H~FFFFH。
6.MCS-51系列单片机片包括很多机型,其中8031单片机内有0B的程序存储器。8051单片机有4kB的程序存储器。
7.MCS-51单片机所能使用的外晶振的频率为1.2M至12MHz。如果8031单片机的时钟频率为12MHz,则一个机器周期是1μs。机器周期:时钟周期:振荡周期=12:2:1
1.CPU的指令系统就是该CPU所能执行的指令集合。
2.MCS-51单片机的指令系统共有111条指令,按指令所占用的字节数分,有单字节指令,双字节指令,三字节指令。 3. MCS-51单片机的指令系统有7种寻址方式。立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、基址+变址寄存器间接寻址、相对寻址、位寻址
4.寄存器寻址方式的寄存器的内容是直接以寄存器形式给出的操作数,可用于寄存器寻址的寄存器有R0~R7、A、B、AB、DPTR等。 5.在寄存器间接寻址方式中,其“间接”体现在寄存器的内容不是操作数本身,而是操作数所在RAM单元的地址,可用于寄存器间接寻址的寄存器有SP、R0、R1、DPTR等。
6. 特殊功能寄存器按字节访问时,只能采用直接寻址方式。
7.在变址寻址方式中,可把DPTR或CP作为基址寄存器,而把A中的地址作为变址寄存器,变址寻址方式是专用于访问程序存储器一种寻址方式。
1. 编写子程序和中断服务程序时,必须注意现场的保护和恢复。 2. 计算机(微处理器)能够唯一识别的语言时机器语言。
1. 中断技术是解决资源竞争的有效方法,因此可以说中断技术实质上是一个资源共享技术。 2. 中断采样用于判断是否由中断请求信号,但MCS-51中只有外部中断才存在中断采样问题。
3.响应中断后,系统会自动产生一条长调用指令(LCALL ****H),以外中断为例,执行该指令的过程包括:首先将断点地址的内容压栈,以保存断点。然后把长调用指令指定的16位目标地址送PC,使程序转向该中断入口地址,执行中断服务程序。
1. 8031内部有2个16位的加1定时/计数器,其中T0有4种工作方式,T1有3种工作方式。
2. 当定时计数器产生溢出中断时,把定时器控制寄存器的TF0或TF1位置1。对计数溢出的处理,在中断方式时,该位作为中断请求标志位使用;在查询方式时,该位作为查询状态位使用。
1.单片机内部为单总线结构,而扩展存储器又要求系统必须提供三总线。为此,可用单片机的P0口提供数据总线,用P2口提供地址总线,P3.6和P3.7可提供控制输出线和控制输入线。WR RD
2. MCS-51可扩展程序存储器最大容量为64KB,数据存储器最大容量为64KB。 3.为实现内/外程序存储器地址的衔接,单片机EA引脚必须接高电平。
4.单片机的外部数据存储器与外部I/O口之间采用统一编制方式;内部程序存储器与外部程序存储器之间采用独立编址方式。 5. 从单片机角度上看,连接数据总线的输出口应具有锁存功能,连接到数据总线上的输入接口应具有三态缓冲功能。 3.对三态缓冲电路,除了数据输入线和数据输出线以外,还应有一个三态控制信号线。 1.在多位LED显示接口电路的控制信号中,必不可少的是段选控制信号和位选控制信号。
2.对于4位的LED显示器,如果采用静态显示方式,则同一时刻有4位显示器通电发光,如果动态显示,则同一时刻有1位显示
器发光。
1.D/A转换电路之前必须设置数据锁存器,这是因为D/A转换是需要一定时间的,在这段时间内待转换的数字量应保持稳定。 2.使用双缓冲的D/A转换器,可以实现多路模拟信号的同步输出。
3.A/D转换器暗转换原理可分为计数式、双积分、主次逼近式、并行式。
4.ADC0809中,既可作为查询的状态标志,又可作为中断请求信号使用的信号是EOC。 1.异步串行通信的帧格式由起始位、数据位、奇偶校验位和停止位组成。 2.串行通信有单工制式、半双工制式、全双工制式三种通信模式。
3.定时器1作波特率发生器使用时,通常是选用自动重载方式,即工作方式2. 4.发送MOV SBUF,A 接收MOV A,SBUF 5.定时器注意12分频
第3章 指令系统
寻址方式 直接寻址:
片内
(4)带Cy减法指令 SUBB
立即寻址:·立即数同操作码一起存放在程序存储器中
寄存器寻址:操作数在R7-R0,A,B,AB,DPTR中,指令码中含有该操作数的寄存器号;操作数位于片内RAM中
MOV A, Rn ; (A)← (Rn) 寄存器间接寻址:
@R0,@R1用于对片内RAM和外部RAM (0000H~00FFH)寻址,@DPTR的寻址范围是片外ROM/RAM的全部64KB区域;寄存器间址指令不能用于寻址SFR 变址寻址:
指令码中隐含有作为基地址寄存器用的数据指针DPTR或程序计数器PC(存放基地址);指令码中也隐含有累加器A(A中存放地址偏移量,00H~FFH范围内的无符号数);寻址空间是程序存储器。
MOVC A, @A+PC ; A ← (A+PC) 相对寻址:
·相对转移指令的指令码中含有相对地址偏移量;
·相对转移指令分为:短转移指令和长转移指令(分别为双字节和三字节);
·PC的当前值 + 相对地址偏移量rel = 下一条要执行指令的地址;SJMP rel ; PC ← PC+2+rel
5、位寻址:·位寻址区:片内RAM位寻址区20H~2FH和11个SFR;
数据传送指令(28条) (1)立即寻址型传送指令
(2)直接寻址型传送指令:指令操作码中至少含有一个操作数的直接地址。
MOV A, direct ; MOV direct ,A ; 注:目的存储单元有累加器A、工作寄存器和
RAM单元(包括SFR的字节地址)。
(3)寄存器寻址型传送指令(4)寄存器间址型传送指令
外部数据传送指令(外部RAM/ROM)(13条) (5)16位数传送指令
MOV DPTR,#data16 ; DPTR ← data16 16位立即数是外部RAM/ROM的地址,其高8位送入DPH,低8位送入DPL。
(6)外部ROM的字节传送指令(查表指令) MOVC A, @A+DPTR ; A ←(A+DPTR) 远程查表
MOVC A,@A+PC ; PC ← PC+1, A ←(A+PC) 近程查表
(7)外部RAM的字节传送指令:实现外部RAM和累加器A之间的数据传送。
MOVX A, @Ri; MOVX @Ri, A ; MOVX A, @DPTR ; MOVX @DPTR, A ;
注:前两外部RAM:0000H~00FFH后两0000H~FFFFH
(8)堆栈操作指令 PUSH+1再送入,POP弹出再-1
堆栈操作指令是直接寻址指令,书写格式为: 注:弹出指令不会改变堆栈区存储器单元中的内容。
(9)数据交换指令
XCH A,Rn ; A← Rn XCHD A, @Ri ; A3~0←(Ri)3~0 注:只是将累加器A中的内容和片内RAM单元内容相互交换。 2、算术运算指令(24条) ·加法指令( 13条)
(1)不带Cy加法指令 ADD (2) 带 ADDC (3) 加1指令:只影响奇偶校验标志位 ·减法指令( 8条)
减1指令:只影响奇偶校验标志位 DEC (6)十进制调整指令( 1条)
DA A ;若AC=1或A3~A0>9,则A ←A+06H
若Cy=1或A7~A4>9,则A ←A+60H
(7)乘法、除法指令( 2条)
MUL AB ;A×B=BA, 形成标志 对标志位的影响:Cy=0;
若B不等于0,则OV=1,否则OV=0; P由A中1的奇偶性确定。 DIV AB ; A÷B=A?B, 形成标志对标志位的影响:Cy=0; 若发现B等于0,则OV=1; P由A中1的奇偶性确定。 3、逻辑运算指令(25条) (1)逻辑与运算指令
ANL 用来清零
(2)逻辑或运算指令 ORL 置一 (3)逻辑异或运算指令 XRL 求反 (4)累加器A清零(CLR)和取反(CPL)指令
(5)移位指 不CY RL/RR 带CY RLC/RRC 交换SWAP
4、控制转移指令(17条) (1)无条件转移指令LJMP addr16 ; PC
← addr16
长转移指令:64K范围内转移指令 AJMP addr11 ; PC ← PC+2,PC10~PC0
← addr11
绝对转移指令:2K范围内转移指令 SJMP rel ; PC ← PC+2, PC
← PC+rel
短转移指令:-126-129范围内转移指令, rel的取值范围-128-127 JMP @A+DPTR ; PC ← A+DPTR (2)条件转移指令
累加器A判零转移指令(双字节)
JZ rel ; 若A=0,则 PC ← PC+2+rel,
否则JNZ rel;
(3)比较不相等转移指令 (三字节)
CJNE A,#data,rel;若A=data,则PC←PC+3 若A不等于data,则PC←PC+3+rel,形成Cy标志。
注意:指令的相对转移范围为-125 ~ +130 ·位置位指令(置1) SET C; SETB bit; ·位复位指令(清0)CLR
(3)位逻辑运算指令 ANL与;ORL或;CPL非
ANL C, bit
ORL C, bit CPL C
步骤:(1)A ←所查表的项数 #data
其中,data=查表指令到表始址间的指令字节数 (3)执行查表指令 例子:
(2)查表指令前应放如下指令:ADD A,
(4)位条件转移指令
PC ← PC+2 ·累加器 cy状态判断转移指令
JC rel
JNC rel
;若Cy=1,则(PC)+2+rel→PC ;若Cy=0,则(PC)+2→PC ;若Cy=0,则(PC)+2+rel→PC ;若Cy=1,则(PC)+2→PC
1. 多字节加法
已知,在内部RAM中,共有6组无符号4字节被加数和加数分别存放在以FIRST和SUCOND为起始地址的区域(低字节在前,高字节在后)。请编程序和(设和也为4字节),并把和存于以SUM开始的区域 ·位状态判断转移指令
JB bit, rel ;若(bit)=1,则(PC)+3+rel→PC (4)减1非零转移指令(两字节)
DJNZ Rn,rel;若Rn-1不等于0,则PC←PC+2+rel
若Rn-1=0,则PC←PC+2 注意:条件转移指令均为相对转移指令,因此指令的转移范围十分有限。 (5)短调用指令
ACALL addr11 ; PC←PC+2
SP←SP+1,(SP)← PC7~PC0
SP←SP+1,(SP)← PC15~PC8
PC10~0←addr11 注意:(1)短调用指令也称为绝对调用指令; (2)本调用指令应与被调用子程序起始地址在 同一个2KB范围内。 (6)长调用指令
LCALL addr16 ; PC ← PC+3
SP ← SP+1,(SP) ← PC7~PC0 SP ← SP+1,(SP) ← PC15~PC8 PC15~0 ← addr16
注意:本调用指令是一个64KB范围内调用指令。
(7)一般子程序返回指令
RET; PC15~PC8 ← (SP), SP ← SP-1, PC7~PC0 ← (SP), SP ← SP-1 (8)中断子程序返回指令 RETI同上
在返回断点的同时,释放中断逻辑,接受新的中断请求。
(9)空操作指令:NOP ; PC ← PC+1
5、布尔变量操作指令(17条) (1)位传送指令 MOV C , bit MOV bit , C
其中:C为PSW中的Cy;bit为布尔变量的位地址。
这组指令的其中一个操作数必须是进位标志C,另一个可以是位地址。 (2)位置位和复位指令
;若(bit)=0,则(PC)+3→PC JNB bit, rel ;若(bit)=0,则(PC)+3+rel→PC
;若(bit)=1,则(PC)+3→PC
JBC bit, rel ;若(bit)=1,则 (PC)+3+rel→PC,0
→bit
;若(bit)=0,则 (PC)+3→PC
6、伪指令——是在机器汇编时供汇编程序识别和执行的命令,用于对汇编的过程进行控制。 ORG 指令代码存储起始地址ORG 2000H
EQU 等值(赋值)语句 先定义后使用 DAPORT EQU 0C010H DATA 数据地址赋值语句
字符名称 DATA 表达式AA DATA 35H 注:表达式可为数据或地址,也可包含已定义的“字符名称”,但不能是汇编符号。 DB:定义字节 [标号:] DB 项或项表 DW:定义双字节数(字)(高8位放低地址单元)
[标号:] DW 项或项表 DB:定义存储空间
[标号:] DS 表达式 预留一定数量内存单元
BIT:位地址赋值 字符名称 BIT 位地址
汇编语言程序设计 1.查表程序设计
DPTR作基址的查表指令
MOVC A, @A+DPTR ; A ←(A+DPTR ) 步骤:(1)DPTR←所查表的始址 (2)A←所查表的项数 (3)执行查表指令 PC作基址的查表指令
MOVC A, @A+PC ; A ←(A+PC )
ORG 0900H MOV R0,#FIRST first送R0 MOV R1,#SECOND second送R1 MOV PSW,#08H 进1#工作区 MOV R0,#SUM SUM送r0 CLR PSW.3 返0#工作区 MOV R2,#06H 组数送r2 LOOP2:CLR C MOV R3,#04H 字节数送r3 LOOP1:MOV A,@R0 求和
ADDC A,@R1 SETB PSW.3 进入1#工作区 MOV @R0,A 存和 INC R0 CLR PSW.3 返回0#工作区 INC R0 修改源指针 INC R1 修改源指针 DJNZ R3,LOOP1 本组未完LOOP1 DJNZ R2, LOOP2 6组未完 LOOP2 SJMP $ END
2. 求和、求平均:
在内部RAM从30H开始的单元中,存有16个单字节无符号数。求其和(2字节)
及平均值,分别存于40H单元和42单元。
AJMP 500H
ORG 30H
TAB: DB 9,10,11,12,13,14,15,16,
17,18,19,20,21,22,23,24