三、问答题(每题10分,共20分)
1、简述什么是堆栈?堆栈中入栈、出栈的过程?(10分)
堆栈是在内部RAM中按“后进先出”的规则组织的一片存储区。
入栈操作时,先将SP的内容加1,然后将指令指定的直接地址单元的内容存入SP指向的单元;出栈操作时,先将SP指向的单元内容传送到指令指定的直接地址单元,然后SP的内容减1
2、列举出80C51单片机的5种寻址方式,写出每一种方式相应的一条指令?(10分)
第一、寄存器寻址,MOV A,R0
第二、直接寻址,MOV A,50H
第三、寄存器间接寻址,MOV A,@R0
第四、立即寻址,MOV A,#50H
第五、变址寻址,MOV A,@A+DPTR
第六、相对寻址,JC 50H
第七、位寻址,CLR ACC.0
四、程序阅读题(15分)
1、 设(A)=38H,R0=28H,(28H)=18H,执行下列程序后,((A))=__E7H______。(5分)
ORL A,#27H
ANL A,28H
XCHD A,@R0
CPL A
2、阅读下列程序段,写出每条指令执行后的结果,并说明此程序段完成什么功能?(10分) MOV R1,#30H; (R1)=___30H_____,
MOV A,#64H; ((A))=___64H____,
ADD A,#47H; ((A))=___ABH____,(CY)=____0____,(AC) =____0____,
DA A ; ((A))=___11H____,(CY)=_____1___,(AC) =___1_____,
MOV @R1,A; (R1)=____30H___,(30H)=___11H_____。
五、计算题(10分)
若要求定时器T0工作方式1,定时时间为1ms,当晶振为6MHz时,求送入TH0和TL0的计数器初值各为多少?
解:由于晶振为6MHz,所以机器周期Tcy=112=2μs。 -6610
N=t/Tcy=110-3/210-6=500
X=216-N=65536-500=65036=FE0CH
即应将FEH送入TH0中,0CH送入TL0中。
所以,TH0和TL0的计数器初值各为FEH和0CH。 六、编程题(25分)
1、若单片机的晶振频率为12MHz,试用循环转移指令编写延时100ms的延时子程序。(10分)
答:分析:一个机器周期=12个晶振周期=1μs,执行一条DJNZ指令需要2个机器周期,即2μs。采用循环计数法实现延时,循环次数可以通过计算获得,并选择先执行后判断的循环程序。
汇编程序如下:
DEL: MOV R7,#400 ;1μs
DEL1: MOV R6,#123 ;1μs
NOP ;1μs
DEL2: DJNZ R6,DEL2 ;2μs,共(2*123)μs
μs, DJNZ R7,DEL1 ;2μs,共((2*123+2+2)*400+1)即100.01ms
2、有一变量存放在片内RAM的30H单元,其取值范围为00H~04H。要求编制一段程序,根据变量值求其平方值,并存入片内RAM的31H单元。(15分)
程序如下:
ORG 1000H
START: MOV DPTR,#2000H
MOV A,30H
MOVC A,@A+DPTR
MOV 31H,A
SJMP $
ORG 2000H
TABLE: DB 00,01,04,09,16