2.8 请说出8051和8052中SFR的个数,并分别写出可位寻址的个数和名称。 8031/8051 ——21个 8032/8052 ——26个
可位寻址有11:B、ACC、PSW、IP、P3、IE、P2、SCON、P1、TCON、P0。
2.10 请简述8051的主要组成部分。 8051的主要组成部分:
1)CPU结构: ALU——算术/逻辑运算 定时控制部件——OSC和IR 专用寄存器组——PC、A、BPSW、SP和DPTR等 2)存储器结构: 片内ROM——0000H-0FFFH(4KB) 片外ROM——000H-FFFFH(最多64KB) 片内RAM——00H-7FH(128B) 片外RAM——0000H-FFFFH(64KB) SFR——21个 3)I/O端口 并行口——P0、P1、P2和P3 串行口——串行发送/接受
4)定时/计数器:T0/T1(2X16)有定时和计数两种模式 5)中断系统(5级):T0、T1、INT0、INT1和串口中断
3-3:请按下列要求传送数据: (1) 将R2中的数据传送到R3; (2) 将立即数30H传送到40H;
(3) 将立即数30H传送到以R0中内容为地质的存储单元中; (4) 将30H中的数据传送到以R0中内容为地址的存储单元中; (5) 将R1中的数据传送到以R0中内容为地址的存储单元中。 (1) MOV A, R2 : A<-(R2)
MOV R3, A : R3<-(A) (2) MOV 40H, #30H :40H<-30H (3) MOV @R0, #30H :(R0)<-30H (4) MOV @R0, 30H :(R0)<-(30H) (5) MOV A, R1 :A<-(R1)
MOV @R0, A :(R0)<-(A)
3-4:已知片内RAM(20H)=60H,(30H)=10H,(40H)=20H,(50H)=40H,试写出执行以下程序段后有关单元的内容。
MOV
R0,#30H
MOV MOV MOV MOV MOV
@R0,40H A,50H R1,30H B,@R0 PSW,@R1
MOV R0,#30H :(R0)=30H MOV @R0,40H :(30H)=20H MOV A,50H :(A)=40H MOV R1,30H :(R1)=20H MOV B,@R0 :(B)=20H MOV PSW,@R1 :(PSW)=60H
3-5:请按下列要求传送数据,并写出每一条指令执行后的结果,设片内RAM(20H)=ABH,片外RAM(4000H)=CDH,ROM(4000H)=EFH。
(1) 片内RAM 20H单元数据送片外RAM 20H单元; (2) 片内RAM 20H单元数据送片外RAM 2020H单元; (3) 片外RAM 4000H单元数据送片内RAM 20H单元; (4) 片外RAM 4000H单元数据送片外RAM 1000H单元; (5) ROM 4000H单元数据送片外RAM 20H单元; (6) ROM 4000H单元数据送片内RAM 20H单元。
(1) 片内数据向片外RAM传送,不能直接进行传送,需要使用累加器A和间址寄存器。由于片外地址小于256B,
所以间址寄存器可以使用R0或R1。 MOV A,20H MOV R0,#20H MOVX @R0,A
(2) 由于片外RAM地址大于256B,所以间址寄存器必须使用DPTR。
MOV A,20H MOV DPTR,#2020H MOVX @DPTR,A
(3) 本题与上题类似,只是传输方向不同
MOV DPTR,#4000H MOVX A,@DPTR MOV 20H,A
(4) 片外 RAM向片外RAM传送数据,必须先使用片外数据传送命令将片外需要传送的数据读入片外A中,然后
再由A向片外的目标地址内传送。由于两次片外地址都大于256B,所以间址寄存器需使用DPTR,这里需要注
意的是间址寄存器中存放的地址的变化。 MOV DPTR,#4000H MOVX A,@DPTR MOV DPTR,#1000H MOV @DPTR,A
(5) ROM中的数据不能直接读出,需要使用查表的方式,然后再使用外部传送命令将数据传送到片外RAM。
MOV DPTR,#4000H MOV A,#00H
MOVC A,@A+DPTR MOV R0,#20H MOVX @R0,A
(6) 本题与上题类似,只是本题中将ROM中的数据传送至片内直接地址单元。
MOV DPTR,#4000H MOV A,#00H MOVC A,@A+DPTR MOV 20H,A
3-6:下列传送指令中哪些是合法指令,哪些是非法指令,并说明原因。 (1)MOV R5,R2;
(2)MOV @R2,#60H;
(4)MOV SBUF,@R1;
(3)MOV @R0,ACC;
(5)MOV DPTR,#30H; (7)MOVX @R0,ACC; (9)MOVC A,@DPTR;
(6)MOVX @R0,PSW;
(8)MOVC A,@R0; (10)MOVC
A,@A+PC。
合法指令有(3)、(4)、(10),使用如下: 第3条中ACC是作为直接地址使用;
第4条中R1作为间址寄存器,向SBUF中传送数据;
第10条中MOVC为查表指令,用PC的值作为基址,A中的内容作为变址,查找出数据表中的数据传送给A。 非法指令有(1)、(2)、(5)、(6)、(7)、(8)、(9)条,说明如下: 第1条中工作寄存器之间不能直接传送数据; 第2条中R2不能用作间址寄存器;
第5条中DPTR是16位数据指针,不能存入8位数据; 第6条中写片外RAM指令必须由累加器A作为源操作数;
第7条中写片外RAM指令必须由累加器A作为源操作数,不应是直接地址ACC,正确的写法是MOVX @R0,A; 第8条中MOVC为查表指令,源操作数应为变址寻址方式。由A作为变址,PC或DPTR作为基址,而不能使用工作寄存器;
第9条中读取ROM中数据必须采用变址寻址。正确的写法是MOVC A,@A+DPTR。
3-7:试求下列程序依次连续运行后有关单元中的内容。已知片内RAM(20H)=24H,(24H)=BCH,(SP)=1FH,(1FH)=39H,(39H)=67H,片外RAM(1000H)=10H,ROM(1010H)=FFH。
MOV MOV XCH
A,1FH R0,20H
A,39H
PUSH ACC MOV
DPTR,#1000H
MOVX A,@DPTR MOVC A,@A+DPTR XCHD A,@R0 POP
1FH
运行结果:(A)=FCH, (R0)=24H, (1FH)=67H, (20H)=67H, (24H)=BFH, (39H)=39H,其余不变。
3-9:若(R0)=40H,(40H)=79H,(41H)=1FH,(DPTR)=1FDFH,ROM(2000H)=ABH,(CY)=1,将依次执行下列指令后的结果写在注释区。
MOV
A,41H
ADDC A,#00H INC
DPTR
MOVC A,@A+DPTR