器发光。
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
ORG 500H MOV A,#0 MOV B,#0 MOV R0,#30H MOV DPTR,#TAB
SUBB A,@R1 POP ACC
JC L4 (升序改为JNC) INC R0 INC R1
CJNE R1,#36H,L3 AJMP L5 XCH A,@R1 INC R0 INC R1 AJMP L3
←ASCTAB
MOV A, R0 ; A←项数 ANL A, #0FH ; 屏蔽高4位 MOVC A, @A+DPTR ; A←结果
MOV R0, A ; 送回R0
SJMP $
ASCTAB: DB ‘0’, ‘1’ ?, ‘9’ END
2)采用PC作基址
ORG 1000H
MOV A, R0 ; A←项数
L1: CLR A
MOVC A,@A+DPTR MOV @R0,A
MOV R0,#30H INC DPTR INC R0
CJNE R0,#40H,L1
L4:
MOV @R0,A DB ‘A’, ‘B’ ? , ‘F’
CLR A L2: ADD A,@R0 PUSH ACC CLR A ADDC A,#0 MOV 42H,A POP ACC INC R0
CJNE R0,#40H,L2 MOV 40H,A
MOV R0,40H MOV R1,42H
MOV A,40H MOV B,#3 DIV AB
END 3. 排序(降序) AJMP 100H
ORG 30H
TAB: DB 4,3,6,5,9,1
ORG 100H MOV R0,#30H
MOV DPTR,#TAB L1: CLR A
MOVC A,@A+DPTR MOV @R0,A INC R0 INC DPTR
CJNE R0,#36H,L1
MOV R3,#0 L2: MOV R0,#30H MOV R1,#31H L3: MOV A,@R0
PUSH ACC
L5: INC R3 CJNE R3,#6,L2
END
4. 求最大值: AJMP 100H
ORG 30H LEN EQU 30H+6
BLOCK: DB 41,6,3,10,7,255 ORG 100H MOV R0,#30H
MOV DPTR,#BLOCK
L1: CLR A
MOVC A,@A+DPTR MOV @R0,A INC R0 INC DPTR
CJNE R0,#LEN,L1
MOV R0,#30H
MOV R1,#0 L2: MOV A,R1 SUBB A,@R0 JNC MAX(求最小值改为JC MIN) MOV A,@R0 MOV R1,A INC R0
CJNE R0,#LEN,L2
MAX(MIN): INC R0 CJNE R0,#LEN,L2
L3: NOP END
例:已知R0中有1个0-F的数,编程将其变换成ASCII码。
求解:(1)采用DPTR作基址 ORG 3000H
MOV DPTR, #ASCTAB ; DPTR
ANL A, #0FH ; 屏蔽高4位
ADD A, #data ; A←A+data
MOVC A, @A+PC ; 查表
MOV R0, A ; 存结果 SJMP $
ASCTAB: DB ‘0’, ‘1’ ?, ‘9’
DB ‘A’, ‘B’ ? , ‘F’ END
注意:data=查表指令和表始址间的指令字节数=03H 2.子程序设计
·子程序始址应以子程序任务定名 例如:延时程序可用 DELAY ·参数传递
入口参数:子程序所需的原始数据,如SIN(X)中的X
出口参数:子程序执行后的结果数据,如SIN(0.5)的值
·主程序中的CALL指令自动把断点压入堆栈,
子程序中的RET指令自动把断点地址从堆栈中恢复到PC;
·子程序中应使用相对转移指令,以生成浮动代码
例:已知 MDA=a 和 MDB=b,编程求C=a2+b2,并送回MDC
求解:利用累加器A传送参数。 ORG 1000H MDA DATA 20H MDB DATA
21H
MDC DATA 22H MOV A, MDA ; A←a(入参)
ACALL SQR ; 求a2 MOV R1, A ; R1← a2
MOV A, MDB ; A←b ACALL SQR ; 求b2 ADD A, R1 ; A←a2+b2
MOV MDC, A ; 存入MDC SJMP $
SQR: ADD A, #01H ; 修正A
MOVC A, @A+PC ; 查表RET
SQRTAB: DB 0, 1, 4, 9, 16
DB 25, 36, 49, 64, 81 END
第2单元 结构和原理
P3.0,1——RXD,TXD(串行输入,输出口) 0000H-0002H单元:上电时,程序计数器PC所指向的单元; P3.2,3——INT0,1(外部中断0,1) 0003H-000AH单元:外部中断/INT0的入口地址; P3.4,5——T0,T1(定时器0外部输入) (两个16位可编程000BH-0012H单元:定时器T0的溢出中断入口地址; 定时/计数器,分别由两个8位寄存器拼装而成。最大计数值为0013H-001AH单元:外部中断/INT1的入口地址; 216-1,即65535。) 001BH-0022H单元:定时器T1的溢出中断入口地址; P3.6,7——WR,RD(外部数据存储器写、读控制) 0023H-002AH单元:串行口接收、传送的中断入口地址。 XTAL1,2(19,18) :振荡器输入,出端(单片机内部反向放大器注:中断响应后,由硬件控制PC自动转到各中断区的首地址。的输入,出端) 但每个中断区只有8个单元,无法放置完整的中断处理子程序,ALE/PROG (30):外部存储器地址锁存允许/编程线访问外部存储器,CPU在P0口输出片外存储器低8位地址的同时,在该线上输出一个高电平脉冲,其下降沿用于控制地址锁存;不访问片外存储器时,CPU自动在该线上输出可用作外部时钟源的脉冲序列,频率为振荡器频率的1/6。 EA/VPP(31) :允许访问片外程序存储器/编程电源线 EA接高电位,访问内部程序存储器 PSEN(29) :片外ROM选通线。RST/VPD(9): 复位/备用电源线。 另外:复位时高电位有效。
程序状态寄存器:PSW 是一个8位标志寄存器,用来存放指
令执行后的有关状态。
PSW的格式:CY AC F0 RS1 RS0 OV 空 P P——奇偶标志位(1个数为双P=0) F0 ——用户标志位(用户根据程序执行的需要通过传送指令确定) RS1 RS0——寄存器选择位(用于决定8051的8个8位工作寄存器R0~R7在RAM中的实际物理地址) RS1 RS0对工作寄存器的选择00对应00-07H以此类推 IP——中断优先级寄存器 IE——中断允许寄存器 TMOD——计数器方式寄存器 TCON——计数器控制寄存器 SCON——串行口控制寄存器 SBUF——串行口数据缓冲器 PCON——电源控制寄存器 存储器分类 程序存储器:
内部(/EA=1,)4K;外部(/EA=0),/PSEN=0,60K; 地址:0000H—FFFFH,64K单元;使用MOVC指令 数据存储器:
内部RAM(00H—7FH, 低128B; 80H—FFH, 高128B) 外部RAM(0000H——FFFFH,64K单元) 控制信号:/RD或/WR有效(=0) 使用计数器:DPTR 使用指令:内部RAM用MOV;外部RAM用MOVX
程序存储器和数据存储器使用独立的两个地址空间。由/PSEN和/RD(/WR)区分。 程序存储器ROM
存放程序代码和表格数据,64KB,地址指针是16位PC。注意6个特殊的单元:
编程时必须在中断入口区放置一条无条件转移指令,将程序引导到真正的中断处理程序的实际入口位置。 复位操作 复位的主要功能:把PC初始化为0000H,使CPU从0000H单元开始执行程序;解除锁死和错误;复位不影响内部RAM状态。 复位后的内部寄存器状态 SP=07H P0-P3=FFH ;其余全置零。 P0(39~32),8位双向三态I/O口,有较大的负载能力。①8051不带片外存储器时,为通用I/O口,传送输入/输出数据。②带片外存储器并访问时,先传送低8位地址后传送数据。 P1(1~8),8位准双向I/O口,用于传送输入/输出数据。8位准双向I/O口。 P2(21~28),①8051不带片外存储器时,为通用I/O口,传送输入/输出数据。 ②带片外存储器并访问时,传送高8位地址。P3(10~17),8位准双向I/O口。可作普通I/O口和专用口。 二、选择题 1.PC的值是_3_
1当前指令前一条指令的地址○2当前正在执行指令的地址○3下一条指令的地址 ○
4控制器中指令寄存器的地址 ○
2.下列指令中正确的是_2_
1PUSH A○2MOV A,@R1○3MOVC A,@DPTR○4MOVX 20H,@RO ○
3.8031单片机的串行口的中断程序入口地址为__2__ 1001BH○20023H○3000BH○40013H ○
4.下列有关MCS-51中断优先级控制过程的叙述中,错误的是__4__ 1低优先级的中断不能中断高优先级的中断处理 ○
2同级中断不能嵌套 ○
3同级中断请求按时间先后顺序响应 ○
4同时间级的多中断请求将形成阻塞,系统无法响应 ○
5.进行系统扩展时,为使PO口实现数据和低8位地址信号的复用,应使用_1__ 1地址锁存器○2地址寄存器○3地址缓冲器○4地址译码器 ○
6.以下有关PC和DPTR的说法错误的是_3__
1DPTR是可以访问的,而PC不能访问○2它们都是16位系统 ○
3它们都具有自动加一功能○4DPTR可以分为2个8位寄存器使用而PC不能 ○
一、 填空题: 5. 为实现内/外程序存储器地址的衔接,单片机EA引1. 是单片机(8051)复位有上电复位和手动按键复位脚必接_高_电平。 两种方法,复位后CPU使用第_00_组工作寄存器6. ADC 0809中,既可作位差查询的状态标志,又可作(r0-r7),他们分别对应的内存地址为__00H___至为中断请求信号使用的信号是_EOC ___07H__,若要求使用第二组工作寄存器,RS1和7. MCS-51系列单片机P0口主要以分时放式传送__地RS0应设置为_10_. 址__和__数据__信号,传送高八位地址信号是通过2. MCS-51系列单片机片内和片外数据存储器的寻址__P2__口实现的。 空间分别为__128B___、___64K__. 8. 在单片机时序中,每一个机器周期有__6__个状态,3. MCS-51系列单片机数据指针是__DPTR_;堆栈指针有_6_个时钟周期。 是_SP_;访问外部存储器用_MOVX_(填助记符)指9. 复位后,单片机内部状态,内部RAM内容为__不变令。 __,寄存器SP内容为_07H_,其他寄存器的内容为4. 在定时器工作方式0下,计时器的宽度为13位,如__00H___. 果系统振荡频率为3MHZ,则最大的定时时间为___2^13*12/3M
有六组无符号数4字节数,被加数和加数分别存在FIRST 和SECOND(低字节在前) .求和,并存在sum开始的空间中: ORG 0100H MOV R5, #03H MOV @R0,A ST:MOV R0,#SUM LOOP:MOV A,@R1 POP R1 MOV R1,#FIRST PUSH R1 INC R1 MOV R2,#SECOND MOV R1,R2 INC R2 MOV R4,#06H ADD A ,@R1 INC R0
DEC R4
LOOP1: MOV A,@R1 PUSH R1 MOV R1,R2 ADDC A , @R1 MOV @R0,A
POP R1 INC R1 INC R2 INC R0
DJNZ R5 LOOP1 CLR A ADDC A
MOV @R0,A INC R0
DJNZ R4, LOOP EXIT:SJMP $ END
例题2.在内部RAM从30H开始的单元中,存有16个单字节无符号数。求其和(2字节)及平均值,分别存于40H单元和42单元。 ORG 0000H LOOP:INC R0; SWAP A; AJMP MAIN MOV A,@R0; ANL A, #0FH; ORG 0030H ADD A,41H; MOV R7,A MAIN:MOV 40H,#00H; MOV 41H,A; MOV A, 40H MOV 41H,#00H; CLR A; SWAP A MOV 42H,#00H; ADDC A,40H; ADD A, R7 MOV 43H,#00H; MOV 40H,A; MOV 42H, A MOV R0,#30H; CJNE R0,#3FH,LOOP; SJMP $ MOV 41H,30H; MOV A, 41H; END 移位法
下面是某一电路的地址译码部分,某输出端地址应为C008H但电路设计有错误。请指出错误并改正,画出正确的电路图,并写出输出端T0—T5的各自输出范围。 错误原因:原接法最低地址:1000 0000 0000 0000B 最高地址:1001 1111 1111 1111B
这当中没有包含地址:C008H(C008H=1100 0000 0000 1000B) 改正方法:在P2.6后面加一个非门