资源描述
第二章
第三章
1.在MCS-51单片机中,寻址方式有几种?其中对片内RAM可以用哪几种寻址方式?对片外RAM可以用哪几种寻址方式?
答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址。片内RAM寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。片外RAM寻址有:寄存器间接寻址方式。
2.在对片外RAM单元寻址中,用Ri间接寻址与用DPTR间接寻址有什么区别?
答:片外数据存储器寻址中,用Ri间接寻址只能访问低端的256字节单元,而用DPTR作指针间接访问可访问整个64K字节。
3.在位处理中,位地址的表示方式有哪几种?
答:1.直接位地址(00H~0FFH)。例如:20H
2.字节地址带位号。例如:20H.3表示20H单元的3位。
3.特殊功能寄存器名带位号。例如:P0.1表示P0口的1位。
4.位符号地址。例如:TR0是定时/计数器T0的启动位。
4.写出完成下列操作的指令。
(1)R0的内容送到R1中。
MOV A,R0
MOV R1,A
(2)片内RAM的20H单元内容送到片内RAM的40H单元中。
MOV 40H,20H
(3)片内RAM的30H单元内容送到片外RAM的50H单元中。
MOV A,30H
MOV R0,#50H
MOVX @R0,A
(4)片内RAM的50H单元内容送到片外RAM的3000H单元中。
MOV A,50H
MOV DPTR,#3000H
MOVX @DPTR,A
(5)片外RAM的2000H单元内容送到片内RAM的20H单元中。
MOV DPTR,#2000H
MOVX A,@DPTR
MOV 20H,A
(6)片外RAM的1000H单元内容送到片外RAM的4000H单元中。
MOV DPTR,#1000H
MOVX A,@DPTR
MOV DPTR,#4000H
MOV @DPTR,A
(7)ROM的1000H单元内容送到片内RAM的50H单元中。
MOV A,#0
MOV DPTR,#1000H
MOVC A,@A+DPTR
MOV 50H,A
(8)ROM的1000H单元内容送到片外RAM的1000H单元中。
MOV A,#0
MOV DPTR,#1000H
MOVC A,@A+DPTR
MOVX @DPTR,A
5.区分下列指令有什么不同?
(1)MOV A,20H和MOV A,#20H
答:前者源操作数是直接寻址,后者源操作数立即寻址。
(2)MOV A,@R1和MOVX A,@R1
答:前者源操作数是访问片内数据存储器,后者源操作数访问片外数据存储器低256字节。
(3)MOV A,R1和MOV A,@R1
答:前者源操作数是寄存器寻址,后者源操作数寄存器间接寻址。
(4)MOVX A,@R1和MOVX A,@DPTR
答:前者源操作数是访问片外数据存储器低256字节,后者源操作数访问片外数据存储器整个64K字节。
(5)MOVX A,@DPTR和MOVC A,@A+DPTR
答:前者源操作数是访问片外数据存储器,后者源操作数访问程序数据存储器。
6.设片内RAM的(20H)=40H,(40H)=10H,(10H)=50H,(P1)=0CAH。分析下列指令执行后片内RAM的20H、40H、10H单元以及P1、P2中的内容。
MOV R0,#20H ;R0=20H
MOV A,@R0 ;A=40H
MOV R1,A ;R1=40H
MOV A,@R1 ;A=10H
MOV @R0,P1 ;(40H)=0CAH
MOV P2,P1 ;P2=0CAH
MOV 10H,A ;(10H)=10H
MOV 20H,10H ;(20H)=10H
结果:(20H)=10H、(10H)=10H、(40H)=0CAH、P2=0CAH和P1=0CAH
7.已知(A)=02H,(R1)=7FH,(DPTR)=2FFCH,片内RAM(7FH)=70H,片外RAM(2FFEH)=11H,ROM(2FFEH)=64H,试分别写出以下各条指令执行后目标单元的内容。
(1)MOV A,@R1 结果:累加器A等于70H
(2)MOVX @DPTR,A 结果:片外RAM(2FFCH)单元等于02H
(3)MOVC A,@A+DPTR 结果: 累加器A等于64H
(4)XCHD A,@R1 结果:累加器A等于00H,片内RAM(7FH)单元等于72H
8.已知:(A)=78H,(R1)=78H,(B)=04H,CY=1,片内RAM(78H)=0DDH,(80H)=6CH,试分别写出下列指令执行后目标单元的结果和相应标志位的值。
(1)ADD A,@R1 ;累加器A等于55H,CY等于1
(2)SUBB A,#77H ;累加器A等于00H,CY等于0
(3)MUL AB ;累加器A等于E0H,B寄存器等于01H,CY等于1,OV等于0
(4)DIV AB ;累加器A等于1EH,B寄存器等于00H,CY、OV等于0
(5)ANL 78H,#78H ;片内RAM(78H)单元等于58H
(6)ORL A,#0FH ;累加器A等于7FH
(7)XRL 80H,A ;片内RAM(80H)等于14H
9.设(A)=83H,(R0)=17H,(17H)=34H,分析当执行完下面指令段后累加器A、R0、17H单元的内容。
ANL A,#17H ;A=03H
ORL 17H,A ;(17H)=37H
XRL A,@R0 ;A=34H
CPL A ;A=CBH
结果:A=CBH,(R0)=17H,(17H)=37H
10.写出完成下列要求的指令。
(1)累加器A的低2位清零,其余位不变。
ANL A,#11111100B
(2)累加器A的高2位置“1”,其余位不变。
ORL A,#11000000B
(3)累加器的高4位取反,其余位不变。
XRL A,#11110000B
(4)累加器第0位、2位、4位、6位取反,其余位不变。
XRL A,#01010101B
11.说明LJMP指令与AJMP指令的区别?
答:LJMP指令后面提供的是16位目标地址,所以可以转移到64KB程序存储器的任意位置,缺点是:执行时间长,字节数多。
AJMP指令后带的是11位直接地址,执行时,先将程序指针PC的值加2(该指令长度为2字节),然后把指令中的11位地址addr11送给程序指针PC的低11位,而程序指针的高5位不变,只能在当前2K范围内转移。
12.设当前指令CJNE A,#12H,10H的地址是0FFEH,若累加器A的值为10H,则该指令执行后的PC值为多少?若累加器A的值为12H呢?
答:指令执行后的PC值为1011H,若累加器A的值为12H,则指令执行后的PC值为1001H。
13.用位处理指令实现P1.4=P1.0Ù(P1.1ÚP1.2)Ú/P1.3的逻辑功能。
程序:
MOV C,P1.1
ORL C,P1.2
ANL C,P1.0
ORL C,/P1.3
MOV P1.4,C
14.下列程序段汇编后,从1000H单元开始的单元内容是什么?
ORG 1000H
TAB: DB 12H,34H
DS 3
DW 5567H,87H
答:(1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=00,(1004H)=00,(1005H)=67H,(1006H)=55H,(1007H)=87H,(1008H)=00H
15.试编一段程序,将片内RAM的20H、21H、22H单元的内容依次存入片外RAM的20H、21H、22H中。
程序:
MOV R0,#20H
MOV R2,#03H
LOOP:MOV A,@R0
MOVX @R0,A
INC R0
DJNZ R2,LOOP
SJMP $
16.编程实现将片外RAM的2000H~2030H单元的内容,全部搬到片内RAM的20H单元开始位置,并将源位置清零。
程序:
MOV R0,#20H
MOV DPTR,#2000H
MOV R2,#31H
LOOP: MOVX A,@DPTR
MOV @R0,A
MOV A,#00
MOVX @DPTR,A
INC DPTR
INC R0
DJNZ R2,LOOP
SJMP $
17.编程将片外RAM的1000H单元开始的100个字节数据相加,结果放于R7R6中。
程序:
MOV DPTR,#1000H
MOV R2,#100
MOV R7,#00
MOV R6,#00
LOOP: MOVX A,@DPTR
ADD A,R6
MOV R6,A
MOV A,R7
ADDC A,#0
MOV R7,A
INC DPTR
DJNZ R2,LOOP
SJMP $
18.编程实现R4R3´R2,结果放于R7R6R5中。
程序:
ORG 0100H
MUL1:MOV A,R2
MOV B,R3
MUL AB ;R2´R3,结果的低字节直接存入积的R5
MOV R5,A ;结果的高字节存入R6中暂存起来
MOV R6,B
MUL2:MOV A,R2
MOV B,R4
MUL AB ;R2´R4,结果的低字节与R6相加后,再存入R6中
ADD A,R6
MOV R6,A
MOV A,B ;结果的高字节加上进位位后存入R7中
ADDC A,#00
MOV R7,A
SJMP $
19.编程实现把片内RAM的20H单元的0位、1位,21H单元的2位、3位,22H单元的4位、5位,23H单元的6位、7位,按原位置关系拼装在一起放于R2中。
程序:
MOV C,20H.0
MOV A.0,C
MOV C,20H.1
MOV A.1,C
MOV C,21H.2
MOV A.2,C
MOV C,21H.3
MOV A.3,C
MOV C,22H.4
MOV A.4,C
MOV C,22H.5
MOV A.5,C
MOV C,23H.6
MOV A.6,C
MOV C,23H.7
MOV A.7,C
MOV R2,A
20.用查表的方法实现一位十六进制数转换成ASCII。
程序:(设一位十六进制数放在R2中,轮换的ASCII也放于R2中)
C16STASC:MOV DPTR,#TAB
MOV A,R2
MOVC A,@A+DPTR
MOV R2,A
RET
TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H
DB 38H,391H,41H,42H,43H,44H,45H,46H
21.编程统计从片外RAM2000H开始的100个单元中“0”的个数放于R2中。
程序:
MOV DPTR,#2000H
MOV R3,#100
MOV R2,#00
LOOP: MOVX A,@DPTR
JNZ NEXT
INC R2
NEXT:INC DPTR
DJNZ R3,LOOP
SJMP $
第六章
1. 何为“准双向I/O接口”?在MCS-51单片机的四个并口中,哪些是“准双向I/O接口”?
答:准双向I/O接口是能实现输入输出功能,但在使用时只能从输入和输出中选择一个。MCS-51单片机的四个并口中P1、P2、P3是准双向I/O接口。
2. 80C51单片机内部有几个定时/计数器?它们由哪些功能寄存器组成?怎样实现定时功能和计数功能?
答:80C51单片机内部有两个16位的可编程定时/计数器,由TH0,TL0,TH1,TL1,TMOD和TCON功能寄存器组成。通过TMOD中的C/T位选择对机器周期计数实现计数功能,选择对外部脉冲计数实现计数功能。
3. 定时/计数器T0有几种工作方式?各自的特点是什么?
答:有四种工作方式,特点见下表:
M1
M0
工作方式
方式说明
0
0
0
13位定时/计数器
0
1
1
16位定时/计数器
1
0
2
8位自动重置定时/计数器
1
1
3
两个8位定时/计数器(只有T0有)
4. 定时/计数器的四种工作方式各自的计数范围是多少?如果要计10个单位,不同的方式初值应为多少?
答:有四种方式。方式0计数范围:1~8192;方式1计数范围:1~65536;方式2计数范围:1~256;方式3计数范围:1~256。
如果计10个单位,方式0初值为:8192-10=8182;方式1初值为:65536-10=65526;方式2初值为:256-10=246;方式2初值为:256-10=246。
5. 设振荡频率为12MHz,如果用定时/计数器T0产生周期为100ms的方波,可以选择哪几种方式,其初值分别设为多少?
答:只能选择方式1,初值为65536-50000=15536。
6. 何为同步通信?何为异步通信?各自的特点是什么?
答:异步通信方式的特点是数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。特点是对发送时钟和接收时钟的要求相对不高,线路简单,但传送速度较慢。
同步通信方式的特点是数据在线路上传送时以字符块为单位,一次传送多个字符,传送时须在前面加上一个或两个同步字符,后面加上校验字符。特点是对发送时钟和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂,传送速度快。
7. 单工、半双工和全双工有什么区别?
答:单工方式只有一根数据线,信息只能单向传送;半双工方式也只有一根数据线,但信息可以分时双向传送;全双工方式有两根数据线,在同一个时刻能够实现数据双向传送。
8. 设某异步通信接口,每帧信息格式为10位,当接口每秒传送1000个字符时,其波特率为多少?
答:10000波特
9. 串行口数据寄存器SBUF有什么特点?
答:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器),执行MOV SBUF,A发送时为发送数据寄存器,执行MOV A, SBUF接收时为接收数据寄存器。
10. MCS-51单片机串行口有几种工作方式?各自特点是什么?
答:有四种工作方式,分别是方式0、方式1、方式2和方式3。其中:
方式0,称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。
方式1,称为8位的异步通信方式,通常用于双机通信。
方式2和方式3,称为9位的异步通信方式,通常用于多机通信。
11. 说明SM2在方式2和方式3对数据接收有何影响。
答:通过SM2对方式2和方式3数据接收进行控制, SM2=1,那么只有接收的第9位为“1”才接收有效。如SM2=0,接收的第9位无论为1还是0都接收有效。
12. 怎样来实现利用串行口扩展并行输入/输出口?
答:利用串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口;当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。
13. 什么是中断、中断允许和中断屏蔽?
答:在计算机中,由于计算机内外部的原因或软硬件的原因,使CPU从当前正在执行的程序中暂停下来,而自动转去执行预先安排好的为处理该原因所对应的服务程序。执行完服务程序后,再返回被暂停的位置继续执行原来的程序,这个过程称为中断,实现中断的硬件系统和软件系统称为中断系统。中断允许是允许中断请求送CPU产生中断,中断屏蔽是禁止中断请求信号送CPU产生中断。
14. 8051有几个中断源?中断请求如何提出?
答:MCS-51单片机提供5个硬件中断源:两个外部中断源(P3.2)和(P3.3),两个定时/计数器T0和T1中断;1个串行口中断。
外部中断源和的中断请求信号从外部引脚P3.2和P3.3输入;两个定时/计数器T0和T1的溢出中断TF0和TF1定时/计数器T0(或T1)溢出时提出;串行口中断由发送中断标志T1和接收中断标志R1产生。
15. 8051的中断源中,哪些中断请求信号在中断响应时可以自动清除?哪些不能自动清除?应如何处理?
答:工作在边沿触发方式下的两个外部中断源和两个定时/计数器中断中断请求信号在中断响应时可以自动清除,工作在电平触发方式下的两个外部中断源和串行口中断不能自动清除。工作在电平触发方式下的两个外部中断源的中断请求信号通过外加硬件和加软件的方式清除,串行口中断标志T1和标志R1完全由软件清除。
16. 8051的中断优先级有几级?在形成中断嵌套时各级有何规定?
答:8051的中断优先级有两级;形成中断嵌套时规定(1) 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,CPU才响应新的中断请求。
(2) 正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现两级中断嵌套。
(3) CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。
17. 设8051的P1中各位接发光二极管,分别用汇编语言和C语言编程实现逐个轮流点亮二极管,并循环显示。
18. 8051系统中,已知振荡频率为12MHz,用定时/计数器T0,实现从P1.0产生周期为2ms的方波。要求分别用汇编语言和C语言进行编程。
解:分析:从P1.0输出周期为2ms的方波,只须P1.0每1ms取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式1时,最大的定时时间为65.536ms,满足1ms的定时要求,方式控制字应设定为00000001B(01H)。定时1ms,计数值N为1000,初值X=65536-1000=64536,则TH0=FCH,TL0=18H。
采用中断处理方式:
程序如下:
ORG 0000H
LJMP MAIN
ORG 000BH ;中断处理程序
MOV TH0,#0FCH
MOV TL0,#18H
CPL P1.0
RETI
ORG 0100H ;主程序
MAIN: MOV TMOD,#01H
MOV TH0,#0FCH
MOV TL0,#18H
SETB EA
SETB ET0
SETB TR0
SJMP $
END
19. 8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生周期为2s的方波。要求分别用汇编语言和C语言进行编程。
解:
从P1.1产生2s的方波,应产生500ms的周期性的定时,定时到对P1.1取反就可实现。由于定时时间较长,一个定时/计数器T1不能直接实现,采用定时/计数器T1产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数100次来实现。系统时钟为12MHZ,定时/计数器T1定时10ms,计数值N为10000,只能选方式1,方式控制字为00010000B(10H),初值X:
X=65536-10000=55536=1101100011110000B
则TH1=11011000B=D8H,TL1=11110000B=F0H。
定时/计数器T1采用中断处理方式。
汇编程序:
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP INTT1
ORG 0100H
MAIN: MOV TMOD,#10H
MOV TH1,#0D8H
MOV TL1,#0F0H
MOV R2,#00H
SETB EA
SETB ET1
SETB TR1
SJMP $
INTT1: MOV TH1,#0D8H
MOV TL1,#0F0H
INC R2
CJNE R2,#64H,NEXT
CPL P1.1
MOV R2,#00H
NEXT: RETI
END
20. 8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生高电平宽度为10ms,低电平宽度为20ms的矩形波。要求分别用汇编语言和C语言进行编程。
解:
本题处理方式有多种,这里采用对定时/计数器T1形成10ms周期定时,用R2对10ms计数,当计到1,则对P1.1置1,当计到2和3,则对P1.1置0来实现。用定时/计数器T1形成10ms周期定时见上题。
程序如下:
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP INTT1
ORG 0100H
MAIN: MOV TMOD,#10H
MOV TH1,#0D8H
MOV TL1,#0F0H
MOV R2,#00H
SETB EA
SETB ET1
SETB TR1
SJMP $
INTT1: MOV TH1,#0D8H
MOV TL1,#0F0H
INC R2
CJNE R2,#01H,NEXT
SETB P1.1
SJMP EXIT
NEXT: CJNE R2,#02H,NEXT1
CLR P1.1
SJMP EXIT
NEXT1:CJNE R2,#03H,NEXT
SETB P1.1
MOV R2,#00
EXIT: RETI
END
21. 用8051单片机的串行口扩展并行I/O接口,控制16个发光二极管依次发光,画出电路图,用汇编语言和C语言分别编写相应的程序。
解:
采用在串口连接两个CD4094来实现,电路图如下:
8051
RXD
TXD
P1.0
DATA
CLK
STB
DATA
CLK
STB
程序如下;
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV SCON,#00H
MOV R4,#10H
MOV R3,#00H
MOV R2,#01H
CLR P1.0
START:MOV A,R3
MOV SBUF,A
LOOP: JNB TI,LOOP
MOV A,R2
LOOP1:JNB TI,LOOP1
SETB P1.0
ACALL DELAY
CLR TI
CLR C
MOV A,R2
RLC A
MOV R2,A
MOV A,R3
RLC A
MOV R3,A
CLR P1.0
DJNZ R4,START1
SJMP MAIN
DELAY:MOV R7,#05H
LOOP2:MOV R6,#0FFH
LOOP1:DJNZ R6,LOOP1
DJNZ R7,LOOP2
RET
END
22. 用汇编语言编程设计一个8051双机通信系统,将A机的片内RAM中30H~3FH的数据块通过串行口传送到B机的片内RAM的40H~4FH中,并画出电路图。
解:线路连接如图所示。
分析:甲、乙两机都选择方式1即8位异步通信方式,最高位用作奇偶校验,波特率为1200bps,甲机发送,乙机接收,因此甲机的串口控制字为40H,乙机的串口控制字为50H。
由于选择的是方式1,波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定,则需对定时/计数器T1初始化。
设SMOD=0,甲、乙两机的振荡频率为12MHz,由于波特率为1200bps。定时/计数器T1选择为方式2,则初值如下。
初值=256 - fosc×2SMOD /(12×波特率×32)
=256-12000000/(12×1200×32)≈230=E6H
根据要求,定时/计数器T1的方式控制字为20H。
甲机的发送程序:
TSTART: MOV TMOD,#2H
MOV TL1,#0E6H
MOV TH1,#0E6H
MOV PCON,#00H
MOV SCON,#40H
MOV R0,#30H
MOV R7,#10H
SETB TR1
LOOP: MOV A,@R0
MOV C,P
MOV ACC.7,C
MOV SBUF,A
WAIT: JNB TI,WAIT
CLR TI
INC R0
DJNZ R7,LOOP
RET
乙机的接收程序:
RSTART: MOV TMOD,#2H
MOV TL1,#0E6H
MOV TH1,#0E6H
MOV PCON,#00H
MOV R0,#40H
MOV R7,#10H
SETB TR1
WAIT: JNB RI,WAIT
MOV A,SBUF
MOV C,P
JC ERROR
ANL A,#7FH
MOV @R0,A
INC R0
DJNZ R7,LOOP
RET
展开阅读全文