单⽚机复习资料
⼀、填空题
1、单⽚微型计算机由cpu,存储器,io接⼝电路三部分组成。
2、80c51的机器指令按指令字节数分为三种格式:单字节指令,双字节指令,3字节指令。3、在变寻址⽅式中,以A 作为变址寄存器,以pc或DPTR 作为基址寄存器。
4、利⽤串⾏⼝接受发送数据,须执⾏对寄存器sbuf的读写指令。接受发送数据的指令分别是:MOV A, sbuf ,MOV sbuf, A。
5、在访问⽚外存储器时,p0⼝分时复⽤为:低8位地址,和数据传递。6、80c51单⽚机中,⼀个机器周期由12 个时钟周期组成。
7、汇编起始地址伪指令为ORG ;汇编结束指令为END ;赋值伪指令为EQU 。8、80c51单⽚机数据存储器中的当前⼯作寄存器组是由特殊功能寄存器中的RS1 ,和RS0 来选择的。
9、I-C总线通过SCL 来选通扩展器件,SPI则是通过CS 来选通扩展器件。10、定时器T1 在⽅式 2 时可作为串⾏⼝⽅式1、3的波特率发⽣器。11、三态门的三态分别是0态,1态,⾼阻态。
12、80C51的机器指令按指令字节数分为三种格式:单字节指令,双字节指令,3字节指令。13、指令寄存器的作⽤是存放当前指令。
14、假定⼀个寄存器有4096个存储单元,每个单元8位,其⾸地址为0000H,则末地址为:0FFFH 。
15、80C51单⽚机⽚内数据存储器中,其位地址访问区的字节地址⾸地址是:20H ;末字节地址是:2FH ,共16 字节。16、80C51单⽚机中,⼀个机器周期由 6 个状态周期组成。
17、80C51单⽚机复位后,SP寄存器的值是,07H ,P0-P3⼝的值是0FFH 。
18、80C51单⽚机数据存储器中的当前⼯作寄存器组地址在10H-17H,则PSW寄存器中RS1\\RS0两个状态位的值分别为:和0 。
19、在中断允许寄存器IE中,当I----N----T----0----,T0和T1中断允许时,IE的⼗六进制值是8AH 。(说明,数据的D6和D5位为0值。
20、定时器能够实现⾃动重新加载计数初始值的⼯作⽅式为:⽅式2 。21、IO
22、TCON控制寄存器中TR0
23、串⾏⼝缓冲寄存器SBUF的作⽤是缓存数据。
24、定时器T0定时10ms,采⽤⽅式1其定时初值是55536 。25、定时器T0采⽤⽅式2,⼯作于定时⽅式,其TMOD值是02H 。⼆、简答题
1、80C51单⽚机存储器分那⼏个地址空间?如何区别不同的空间寻址?
1答:mcs51的存储器分为两⼤块:rom:程序存储器;ram:数据存储器。rom⽤来存储代码以及以及常数,⽤movc来调⽤,⽤基址变址寻址⽅式。ram主要分为⼏⼤块:1、寄存器(4组r0-r7以及功能寄存器);2、直接寻址区(0x20-0x7f);3、间接寻址区(0x80-0xff (52系列));4、外部寻址(外接的ram),⽤movx来调⽤;5、还有⼀个特殊的位寻址区(0x20-0x3f以及⼀些功能寄存器(地址可以被8整除));其中1、2可以直接寻址,2也⽀持间接寻址;3只⽀持间接寻址;4只能使⽤外部寻址;⽽5呢,只能使⽤直接寻址。
值得注意的是,对于位操作指令⽽⾔,5的地址值可以0x00-0x7f总共128个地址空间(0x80-0xff属于寄存器使⽤,难以计算,不建议使⽤),实际上就是对应于(0x3f-0x20)*8=0x80个地址空间,0x00对应于0x20.0,0x7f对应于0x3f.7,⽽对于⼀些既可以字节操作也可以为操作的指令⽽⾔,只能使⽤0x20.0这种⽅式进⾏操作,⽐如mov指令。2、使单⽚机系统复位有哪⼏种⽅法?复位后特殊功能寄存器初始状态如何?答:单⽚机系统复位有两种⽅法:上电⾃动复位,按键⼿动复位。复位后SP 为07H, P0-P3为0FFH,其它特殊寄存器都为0。
3、80C51访问内部RAM单元可以采⽤哪些寻址⽅式?访问外部RAM单元可以采⽤哪些寻址⽅式?访问外部程序存储器可以采⽤哪些寻址⽅式?
答:(1)直接寻址、寄存器间接寻址和位寻址⽅式。(2)寄存器间接寻址。(3)⽴即寻址、变址寻址和相对寻址⽅式。4、80C51单⽚机外部中断源有哪⼏种触发⽅式?有什么要求?怎样设定?
答:(1)两种,(2)采⽤电平⽅式触发时,外部中断源必须保持低电平,直到中断被CUP 响应,同时在该中断服务程序执⾏完之前,外部中断源必须撤除,否则其中断标志位IEi⼀直为1,将触发下⼀次中断;采⽤边沿⽅式触发时,IEi由外部引脚上信号的下降沿位置,引发中断请求。(3)ITi=0低电平触发,ITi=1边沿(下降沿)触发。
5、决定程序执⾏顺序的寄存器是哪个?它的作⽤是什么?它是多少位寄存器?它是否是特殊功能寄存器?
答:决定执⾏程序执⾏顺序的是PC;决定顺序的时能中转的指令(包括长跳,短跳,中断和中断返回等),与寄存器⽆关,如果没有跳转指令,将按顺序执⾏代码;16位,PC不是特殊功能寄存器。
6、简述MCS-51单⽚机堆栈的进栈和出栈操作的过程。若设置堆栈指针SP的值为30H后调⽤⼀个⼦程序,这时SP的值变为多少?从⼦程序中返回后SP的值⼜为多少?
答:PUSH ACC, SP+1→SP, ACC→(SP), POP ACC, SP→ACC, SP-1→SPSP+1→SP, PC0-7→(SP), SP+1→SP, PC8-15→(SP) SP值为32H(SP)→P,C8-15 SP-1→SP, SP→PC0-7, SP→PC0-7 SP值为30H
7、80C51单⽚机存储器的组织采⽤何种结构?⽚内数据存储器地址空间以字节为单位如何划分?各地址空间的地址范围和容量如何?在使⽤上有何特点?
0-1FH直接访问 20-2FH位寻址 30H-7FH直接和间接。
8、如果80C51单⽚机的晶振频率为12MHZ,时钟周期和机器周期各为多少?若有⼀个双周期指令,所⽤时间为多少?(注:写出计算过程)答:T 时钟=1/F 晶振, T 机=12T 时钟, 2微秒
9、串⾏⼝波特率为9600,定时器T1⼯作于⽅式2 ,单⽚机时钟频率11.0592mhz 计算出T1的定时初值,并写出其初始化过程。
答:9600=)1*32/(2mod ft s ft1=(9600*32)/)32*9600/(22mod mod s sFt 机=f 晶/12 T 机=1/ft 机=12/f 晶 N=T1/T 机 X=256-NMOV TMOD ,20HMOV TH1, 0E8HMOV TL1,0E8HSET TR1
10、试写出中断允许寄存器的各中断位的含义及在IE 寄存器的位置分布。
答:EA:CPU 中断总开放标志。(EA )=1,开放中断;(EA )=0,屏蔽所有中断。 ES:串⼝中断允许位。ET1:定时器T1中断允许位。EX1:外部中断1中断允许位。ET0:定时器T0中断允许位。EX0:外部中断0中断允许位。中断允许寄存器IE 的格式
位地址:AFH AEH ADH ACH ABH AAH A9H A8H位符号:EA / / ES ET1 EX1 ET0 EX0三、阅读程序,分析结果
1、已知⽚内RAM,⽚外ROM ,⽚内RAM 单元存储器内容如图所⽰,分析如下程序段执⾏结果。44H 04H 4004H 39H 4004H 44H43H 03H 4003H 42H 4003H 43H42H 02H 4002H 40H 4002H 42H41H 01H 4001H 41H 4001H 40H40H 00H 4000H 43H 4000H 41HMOV DPTR,#4002HMOVX A,@DPTR; (A)= 42HMOV R0,#12H
MOV A,@R0; (A)= 02H MOVC A,@A+DPTR; (A)= 39H2、若(50H )=40H,可执⾏如下程序段:MOV A,50HMOV R0,AMOV A,#00HMOV @R0,AMOV A,#3BHMOV 41H,AMOV 42H,41H
试分析:(A )= 3BH ,(R0)= 40H ,(40H)= 00H ,(41H)= 3BH ,(42H)= 3BH 。
3、假设⼀个有符号⼆进制数0BAH存⼊⽚内30H单元中,执⾏如下程序段:EQU 30HEQU 32HMOV A, X
JNB ACC.7,ZHENGCPL AADD A, #01HZHENG: MOV Y, A试分析:(32H)= 46H ;
该程序段的功能为:30H单元的绝对值,再将绝对值结果放⼊32H 。4、阅读程序段LEN EQU 10SUM EQU 21HBLOCK EQU 22HCLR A
MOV R7,#LENMOV R0,#BLOCKLOOP: ADD A, @0INC R0
DJNZ R7,LOOPMOV SUM, AEND
该程序段的功能是:从22H单元的10个数据求和并放⼊21H中。
5、有⼀变量存放在⽚内RAM的20H单元,其值为4,阅读下列程序,写结果:ORG 1000HSTART: MOV DPTR, #2000HMOV A, 20HMOVC A, @A+DPTRMOV 21H, ASJMP $ORG 2000H
TABLE: DB 00,01,04,09,16,25END(21H)= 10H
6、阅读下列程序并写结果:ORG 0100HAJMP MAIN
ORG 0200H
MAIN; MOV R4,#100MOV 40H, #00HMOV 41H, #00HMOV A, #0LP: ADDC A, R4JNC NEXTINC 41H
NEXT: DJNZ R4,LPMOV 40H, ASJMP $END
(40H)= 0BAH ,(41H)= 13H 。
该程序段的功能为:求从1加到100的和。7、阅读程序段
设在内部RAM的addr1和addr1+1单元存有⼀个双字节数(⾼为字节存于⾼地址单元)经过处理后,其结果分别存⼊ADDR2和ADDR2+1单元,阅读下列程序:START MOV R0,#ADDR1MOV R1, #ADDR2MOV A, @R0CPL AINC AMOV @R1,AINC R0INC R1JZ ZEROMOV A, @R0CPL AMOV @R1,ASJMP LOOP1ZERO: MOV A, @R0CPL AINC AMOV @R1,ALOOP1:SJMP $END
程序段的功能是:对该16位数取相反数并存在ADDR2和ADDR2+1单元中。四、设计题
1、编写程序,把外部RAM中2100H-2130H的内容传送到内部RAM的20H-50H中。(1)ORG 0000HAJMP MAINORG 0120H
MAIN: MOV R2,#31HMOV R0,#20HMOV DPTR,#2100HLPP: MOVX A,@DPTRMOV @R0,AINC R0INC DPTRDJNZ R2,LPP
2、⽤三种⽅法分别实现将累加器A中的⽆符号数乘以2。
(1)RL A (2) MOV 30H, A; ADD A,30H (3)MOV B, #02H; MUL AB (4)MOV 30H, A; CPL A; INC A; MOV 31H, A; MOV A, 30H;SUBB A, 31H。
3、⽐较两个ASCLL字符串是否相等,字符串的长度为12,第⼀字符串的⾸地址为40H,第⼆个字符串的⾸地址为50H,如果两个字符串相等,则把B 置1,否则置0。org 0000hajmp mainorg 0100hmain:mov r2,#0chloop:mov r0,#40hmov r1,#50hmov a,@r0orl a,@r1cjne a,#0h,loop1mov b,#1hinc r0inc r1djnz r2,loop2ljmp looploop1:mov b,#0hloop2:ajmp $end
4、有⼗六位⼆进制数,其中加数存放在内部RAM的20H,21H单元,被加数存放在22H,23H 单元,低字节放低8位,⾼字节放⾼8位数,若要求和存放在24H,25H中,试编写出16位数相加的程序。
MOV A, 22H; MOV R1,#20H; ADD A, @R1; MOV 24H, A; JC LOOP; MOV A, 23H; MOV R0,#21H; ADD A, @R0; MOV25H, A; LJMP LOOP1; LOOP: MOV A, 23H; MOV R0,#21H; ADD A, @R0; INC A; MOV 25H, A; LOOP1:AJMP $; END6、将长度为20H 的字符串从⽚内RAM的输⼊缓冲区innerbuf向⽚外RAM的输出缓冲区outbuf传送,⼀直进⾏到回车符或整个字符串传送完毕为⽌,并在⽚外最后⼀个字符之后写⼊回车符,其中回车符的ASCLL码值为0AH。
ORG 0030H; MOV R0,#inbuf; MOV R1,#outbuf; MOV R4,#20H; LOOP:MOV A,@ R0 ; CJNE A,#0DH,LL ; SJMP STOP ; LL:MOVX @R1,A ; INC R0; INC R1; DJNZ R4,LL; MOV A,#0AH; MOV @DPTR,A; STOP: SJMP $; END7、⽤三种⽅法分别实现将累加器A和R0中的数据进⾏交换。
(1)XCH A, R0; (2)MOV 40H, A; MOV A, R0; MOV R0,40H; (3)PUSH ACC;
PUSH R0; POP ACC; POP R0; (4)ADD A, R0; MOV 40H, A; SUBB A, R0; MOV R0,A; MOV A, 40H; SUBB A, R0;8、编写程序,求内部RAM中50H-59H⼗个单元内容的平均值,并存放在5AH单元(注:⼗个数的加和不超过255)
MOV R7,#0AH; MOV R0,#50H; MOV B, #0AH; CLR C; CLR A; LOOP:ADDC A,@R0;INC R0; DJNZ R7,LOOP;DIV AB;MOV 5AH,A;
9、设f=6MHZ请每秒钟在P1.0上输出⼀个机器周期的负脉冲,其它为正脉冲,试编程实现。MOV TMOD,#01H; MOV
TH0,#3CH; MOV TL0,#0B0H; SET TR0;LOOP: MOV A,#00H; SET P1.0; LOOP1:JNB TF0,$; MOV TF0,#00H; MOVTH0,#3CH; MOV TL0,#0B0H; INC A; CJNE A,#09H,LOOP1; JNB TF0,$; CLR TF0; MOV TH0,#3CH; MOV
TL0,#0B0H; LOOP2:MOV A,TH0; CJNE A,#0FFH,LOOP2; LOOP3:MOV A,TL0; CJNE A,#0FFH,LOOP3; CLR P1.0;JNB TF0,$; CLR TF0, MOV TH0,#3CH; MOV TL0,#0B0H; LJMP LOOP;
10、在内部RAM中BYTE单元存放了⼀个8位⼆进制数,请把该数的各位⽤ASCLL码表⽰,并把结果存放到外部RAM以BUF开始的存储单元中。
MOV A,BYTE; MOV R2,#8H; MOV R0 #BUF; CLR C; LOOP1:RLC A; MOV 40H,A; MOV A,#30H; ADDC A,#00H; MOV@R0,A; MOV A,40H; INC R0; DJNZ R2,LOOP1; AJMP $; END;