620 likes | 758 Views
第三章. 3-1 已知 A=7AH , R0=30H(30H=A5H) , PSW=80H , SP=65H ,试分析下面每条指令的执行结果及对标志位的影响。 ( 1 ) ADD A , @R0 ; 01111010+10100101=1,00011111 , ( A ) =1FH , Cy=1 , AC=0 , OV=0 , P=1 ( 2 ) ADD A , #30H ; 01111010+00110000=10101010 , ( A ) =AAH , Cy=0 , AC=0 , OV=1 , P=0
E N D
第三章 3-1 已知A=7AH,R0=30H(30H=A5H),PSW=80H,SP=65H,试分析下面每条指令的执行结果及对标志位的影响。 (1)ADD A,@R0; 01111010+10100101=1,00011111, (A)=1FH,Cy=1 ,AC=0,OV=0,P=1 (2)ADD A,#30H;01111010+00110000=10101010, (A)=AAH,Cy=0,AC=0,OV=1,P=0 (3)ADDC A,30H;01111010+10100101+1=1,00100000 (A)=20H,Cy=1,AC=1,OV=0,P=1 (4)SUBB A,@R0;01111010-10100101-1=1,11010100, (A)=D4H,Cy=1,AC=0,OV=1,P=0
(5)DA A;01111010+00000110=10000000, (A)=80H,Cy=0,其它无影响 (6)RLC A;(A)=11110101B=F5H,Cy=0, AC=0,OV=0,P=0 (7)RR A;(A)=00111101B=3DH,Cy=1, AC=0,OV=0,P=1 (8)PUSH 30H;SP=66H,(66H)=A5H (9)POP B;SP=64H,(B)=(65H) (10)XCH A,@R0;(A)=A5H,(30H)=7AH, Cy=1,OV=0,AC=0,P=0
3-3 已知片内RAM中(30H)=64H,(50H)=04H,片外RAM中(1000H)=0FFH,(2004H)=00H,并且TAB=2000H,试分析顺序执行每条指令的结果。 (1)MOV R0,#30H;(R0)=30H (2)MOV A,@R0;(A)=64H (3)MOV DPTR,#1000H;(DPTR)=1000H (4)MOVX @DPTR,A;(1000H)=64H (5)MOV A,50H;(A)=04H (6)MOV DPTR,#TAB;(DPTR)=2000H (7)MOVC A,@A+DPTR;(A)=00H (8)MOV P1,A;(P1)=00H
3-4 试分析在执行完下面的程序段后,A,R0,R1,R7,SP以及片内RAM的一些单元中内容各是什么? MOV SP,#65H MOV R7,#5 MOV R0,#30H MOV R1,#40H LOOP:MOV A,@R1 PUSH ACC MOV A,@R0 MOV @R1,A INC R0 INC R1 DJNZ R7,LOOP
结果:(A)=(34H), (R0)=34H,(R1)=44H,(R7)=0, SP=70H ,(70H)=(44H),(30H)=(40H),…(34H)=(44H)。 3-5 已知SP=62H,(62H)=50H,(61H)=30H,问执行指令RET后,PC=?,SP=?并解释。 答:执行指令RET,从堆栈中弹出地址值给PC,栈指针减2,(62H),(61H)中的内容分别弹出PC=5030H,SP=60H 3-7 试编程求出片外RAM从2000H开始的连续20个单元的平均值,并将结果存入内部RAM20H单元。 MOV DPTR,#2000H ACALL AVG
子程序名:AVG 子程序功能:求20个无符号数平均值子程序 子程序入口:(DPTR)=数据区首地址指针 子程序出口:(R3)(R4)=均值 AVG:MOV R2,#20 MOV R3,#00H;部分和高位字节单元清零 MOV R4,#00H;部分和低位字节单元清零 ACALL D-ADD;调用累加和子程序 ACALL D-DIV;调用除以20的子程序 求多字节累加和子程序 子程序名:D-ADD
子程序功能:多字节累加和子程序 子程序入口:(DPTR)=数据区首地址指针 子程序出口:(R3)(R4)=累加和,R3中内容为和高字节,R4中内容为和低字节 D-ADD:CLR C LOOP:MOVX A,@DPTR ADD A,R4 MOV R4,A CLR A ADDC A,R3 MOV R3,A INC DPTR DJNZ R2,LOOP RET
双字节除以20的子程序 子程序名:D-DIV 子程序功能:除以20的子程序 子程序入口:(R3)(R4)=被除数 子程序出口:(R3)(R4)=商 D-DIV: MOV R7,#08H;置计数初值 DV1: CLR C MOV A,R4;将(R3)(R4)左移1位 RLC A MOV R4,A MOV A,R3 RLC A MOV 00H,C;将移出的标志位送00H
CLR C SUBB A,R2;余数高位减除数 JB 00H,GOU;标志位为1够减 JNC GOU;无借位,也说明够减 ADD A,R2,不够减,恢复余数 AJMP DV2 GOU:INC R4;够减,商上1 DV2: MOV R3,A DJNZ R7,DV1;减完?没完继续 MOV 20H,R3;转存20H MOV 21H,R4;转存21H RET
MOV 21H,R4;转存21H RET 商数 除数 被除数 -除数 作减法,够减商上1 余数 -除数 再作减法,不够减商为0,并恢复减法前的余数 余数 -除数 再作减法,直至最后
3-9 在外部数据存储区首地址为TABLE的数据表中存有10B的数据,编程将每个字节的最高位置1,并送回原来的单元。 ORG 0030H MOV DPTR,#TABLE MOV R2,#10 LOOP:MOVX A,@DPTR SETB ACC.7 MOVX @DPTR,A INC DPTR DJNZ R2,LOOP END
3-10 编写能延时1s的子程序,设晶振频率为12MHz。 DELAY1S:MOV R6,#4 ;1T DL1: MOV R5,#251 ;1T DL2: MOV R4,#248;1T DL3: NOP ;1T NOP ;1T DJNZ R4,DL3 ;2T DJNZ R5,DL2;2T DJNZ R6,DL1;2T RET ;2T 延时时间:((248 × 4+1+2)× 251+1+2)×4+1+2=998995㎲
3-12 编程实现:将30H,31H中的双字节二进制数转换为3B压缩BCD码,并存放到40H开始的空间中。 因为(a15a14…a1a0)=(…(0×2+a15) ×2+a14) ×2+…+a0),所以将二进制从最高位逐次左移入BCD码寄存器的最低位,并且每次都实现(…)×2+ai的运算。 双字节16位二进制数存于(R2R3)中,(R4R5R6)为转换完毕的压缩BCD码。 MOV A,30H MOV R2,A MOV A,31H MOV R3,A
ACALL BINBCD2 MOV R0,#40H MOV A,R4 MOV @R0,A INC R0 MOV A,R5 MOV @R0,A INC R0 MOV A,R6 MOV @R0,A BINBCD2:CLR A MOV R4,A
MOV R5,A MOV R6,A MOV R7,#16 LOOP:CLR C MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV A,R6 ADDC A,R6 DA A
MOV R6,A MOV A,R5 ADDC A,R5 DA A MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A DJNZ R7,LOOP RET
3-13 试编写一个查表程序,求X2(设X≤50)。X已存于50H单元,X2存入51H和52H单元。 MOV DPTR,#TABLE MOV A,50H MOV R1,A CJNE A,#15,$+3 JNC GO;大于15则转 MOVC A,@A+DPTR;查表 MOV 51H,A MOV 52H,#00H AJMP DONE GO: CLR C MOV A,R1 SUBB A,#15
ADD A,DPL MOV DPL,A CLR A ADDC A,DPH MOV A,R1 MOVC A,@A+DPTR MOV 52H,A DEC DPTR MOVC A,@A+DPTR MOV 51H,A DONE:RET 3-14 从P1口输入50个带符号数,编程统计其中正数、负数和零的个数,结果分别存入片内RAM30H、31H、32H单元。
ORG 0030H MOV 30H,#00H MOV 31H,#00H MOV 32H,#00H MOV R5,#50 LOOP:ORL P1,#0FFH MOV A,P1 JZ NEXT1 JB ACC.7 NEXT2 INC 30H SJMP DONE NEXT1:INC 32H SJMP DONE NEXT2:INC 31H DONE:DJNZ R5,LOOP SJMP $
3-17 设计带有两个按键和2个LED显示器的系统,每当按一下S1键,则使LED1点亮、LED2暗,若按一下S2键,则使LED2点亮、LED1暗。绘出相应的电路示意图,并编写相应的程序。 ORG 0030H ORL P1,#0FH LOOP1:JNB P1.2,NEXT1 JNB P1.3,NEXT2 AJMP LOOP1 NEXT1:LCALL DL10ms JB P1.2,LOOP1
JNB P1.2,$ MOV P1,#FEH AJMP LOOP1 NEXT2:LCALL DL10ms JB P1.3,LOOP1 JNB P1.3,$ MOV P1,#FDH AJMP LOOP1 RET DL10ms: ┇ RET
第四章 4-1 MCS-51单片机内部有几个定时/计数器?定时/计数器是由哪些专用寄存器组成的? 答:有T0和T1两个定时/计数器;工作方式寄存器TMOD,用于定义T0和T1的工作模式、选择定时/计数工作方式以及启动方式等;控制寄存器TCON,主要用于定时/计数器T0或T1的启停控制,标志定时/计数器的溢出和中断情况。 4-3 定时/计数器有哪几种工作方式?各有什么特点?适用于什么应用场合? 答:有四种工作方式,方式0,13位定时/计数器;方式1,16位定时/计数器;方式2,8位定时/计数器,初值自动重装;方式3,T0运行,而T1停止工作,8位定时/计数器。方式0,1,3需要重装初值,使得定时的时间产生误差,方式2自动重装初值,可精确定时。
4-5 设某单片机的晶振频率为12MHz,定时/计数器T0工作于定时方式1,定时时间为20μs;定时/计数器T1工作于计数方式2,计数长度为100,请计算T0,T1的初始值,并写出其控制字。 答:T0的初始值 X=2M-fosc×t/12=216-12×106×20×10-6/12=65536-20=65516=0FFECH T1的初始值 X=2M-N=28-100=256-100=156=9CH 控制字为01100001B=61H MOV TMOD,#61H MOV TH0,#0FFH MOV TL0,#0ECH MOV TH1,#09CH MOV TL1,#09CH
4-7 试用定时/计数器T1对外部事件计数,要求每计数100,就将T1改成定时方式,控制从P1.1输出一个脉宽为10ms的正脉冲,然后又转为计数方式,如此反复循环。设系统晶振频率为12MHz。 解: (1)T1设置为工作方式1计数,由软件启动 (2)T1计数方式控制字TMOD=01010000=50H,X1=216-100=65436=FF9CH,TH1=FFH,TL1=9CH T1定时方式控制字TMOD=0001000=10H,X2=216-12×106×5×10-3/12=65536-5000=60536=111011001000B=0EC78H ORG 0000H SJMP MAIN ORG 0030H
MAIN:MOV TMOD,#50H MOV TH1,#0FFH MOV TL1,#9CH SETB TR1 STA1:JBC TF1,NEXT1 SJMP STA1 NEXT1:MOV TMOD,#10H MOV TH1,#0ECH MOV TL1,#78H SETB P1.1
LP:JBC TF1,NEXT2 SJMP LP NEXT2: MOV TH1,#0ECH MOV TL1,#78H CPL P1.1 NEXT3:JBC TF1,MAIN SJMP NEXT3 RET
4-9 利用单片机内部定时/计数器T1产生定时时钟,由P1口输出信号控制8个LED指示灯,试编程使8个指示灯依次轮流闪动,闪动频率10Hz。Fosc=12MHz。 解:T=1/10=0.1s=100ms,因此T1定时50ms,方式1 TMOD=00010000B=10H X=216-50×103/1=65536-50000=15536=0011110001111000=3C78H ORG 0000H SJMP STAR ORG 001BH;T1溢出中断 AJMP DVT1 ORG 0030H
STAR:MOV TMOD,#10H MOV TH1,#3CH MOV TL1,#78H SETB ET1 SETB EA SETB TR1 MOV A,#0FFH MOV P1,A CLR C SJMP $ DVT1:MOV TH1,#3CH MOV TL1,#78H
RLC A MOV P1,A RETI 4-10利用定时/计数器测量某正脉冲宽度,已知此脉冲宽度小于10ms,系统晶振频率为12MHz。试编程测量脉宽,并把结果存入内部RAM的50H和51H单元。 解:12MHz,采用例4-6可测量脉冲宽度65.535ms,程序参考例4-6
第五章 5-1什么是异步串行通信,它有何特点? 答:异步串行通信是按数据或字符一帧一帧传送的,前面有一个起始位(0),后面有一个停止位(1),这是一种起止式的通信方式,字符之间没有固定的间隔长度。其优点是数据传送的可靠性较高﹑能及时发现错误,缺点是通信效率比较低。 5-2 MCS-51单片机的串行口由哪些功能部件组成?各有什么作用? 答: MCS-51单片机的串行口是一个全双工的异步串行通信接口,可同时发送和接收数据。串行口内部有数据接收缓冲器
和数据发送缓冲器。数据接收缓冲器只能读出不能写入,数据发送缓冲器只能写入不能读出,这两个数据缓冲器都用符号SBUF来表示,地址是99H。和数据发送缓冲器。数据接收缓冲器只能读出不能写入,数据发送缓冲器只能写入不能读出,这两个数据缓冲器都用符号SBUF来表示,地址是99H。 特殊功能寄存器SCON存放串行口的控制和状态信息,串行口用定时器T1或T2作为波特率发生器,特殊功能寄存器PCON的最高位SMOD为串行口波特率的倍率控制位。 5-3简述串行口接收和发送数据的过程。 答:串行口的接收和发送是同一地址(99H)两个物理空间的特殊功能寄存器SBUF进行读或写的。当向SBUF发“写”命令时(执行“MOV SBUF,A”指令),即向发送缓冲器SBUF装载并开始由TXD引脚向外发送一帧数据,发送完中断标志位TI=1。
在满足RI=0的条件下,置允许接收REN=1,就会接收一帧数据进入移位寄存器,并装载到接收SBUF中,同时使RI=1。当发读SBUF命令时(执行“MOV A, SBUF”指令),便由接收缓冲器SBUF取出信息通过内部总线送CPU。 5-4 MCS-51串行口有几种工作方式?有几种帧格式?各工作方式的波特率如何确定? 答:有4种工作方式: 方式0(8位同步移位寄存器),方式1(10位异步收发),方式2(11位异步收发),方式3(11位异步收发)。 有2种帧格式:10位和11位。
方式0:波特率=fosc/12 方式2:波特率=2SMOD×fosc/64 方式1和方式3:波特率=2SMOD×fosc/32/12(256-x) 定时器T1用作波特率发生器时通常选用工作模式2。 5-6设计一个8051单片机的双机通信系统,并编写程序将甲机片内RAM30H~5FH单元的数据块,通过串行口传送到乙机片外RAM3030H~305FH单元中去。
第六章 6-3 MCS-51单片机系统采用6264扩展数据存储器,用译码法扩展数据存储器在16根地址线内最多可扩展几片?此时数据存储器的容量是多少? 答: 最多可扩展8片, 此时数据存储器的容量是64KB。 6-5MCS-51单片机的控制线有哪些信号线?它们的作用是什么? 答:控制信号线有: 使用ALE作为地址锁存的选通信号,以实现低8位地址的锁存。 以PSEN信号作为扩展程序存储器的读选通信号 以EA信号作为内外程序存储器的选择信号 以RD和WR作为扩展数据存储器和I/O端口的读写选通信号,执行MOVX指令时,这两个信号分别自动有效。
6-6 MCS-51单片机P0口作地址线时为什么用锁存器? 答:由P0口提供低8位地址线,由于P0口分时复用为地址数据总线,所以为保持地址信息,在访问存储器期间一直有效,需外加地址锁存器锁存低8位地址,用ALE正脉冲信号的下降沿进行锁存。 6-7E2PROM的“写”操作和RAM的“写”操作有什么异同? 答:“写”操作都是WR信号有效,与RAM相比,E2PROM的“写”操作速度是很慢的,E2PROM“写”的数据能长期保存,而RAM“写”的数据掉电后消失。
6-9设某RAM芯片具有1MB(20根地址线),按32个32KB设计6-9设某RAM芯片具有1MB(20根地址线),按32个32KB设计 (1)画出MCS-51单片机与RAM的连接图 (2)确定RAM的地址 (3)系统能否再扩展其他接口芯片?说明原因。 解:(1)MCS-51单片机与RAM的连接图如下
单片机信号 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 A14 A13 …A0 28SF040 A19 A18 A17 A16 A15 A14 A13 …A0 页面0 0 0 0 0 0 0 0 0000H~7FFFH … … … … 页面15 0 0 0 1 1 1 1 0000H~7FFFH 页面16 0 0 1 0 0 0 0 0000H~7FFFH … … … … 页面31 0 0 1 1 1 1 1 0000H~7FFFH (2)RAM的地址
通过译码器还能扩展RAM,另外通过PSEN可扩展程序存储器。通过译码器还能扩展RAM,另外通过PSEN可扩展程序存储器。 6-12某8255A工作在PB口选通输入﹑PC口高四位输出,试确定8255A的方式控制字。 答:控制字可为10100010B=A2H 第七章 7-1什么是单片机I/O接口?I/O接口应具备有哪些功能? 答:I/O接口是单片机与外部设备交换信息的桥梁,是指CPU和外存储器﹑外部设备或两种机器之间通过系统总线进行连接的逻辑部件(或电路)。
主要功能:实现和不同外设的速度匹配;输出数据锁存;输入数据三态缓冲。主要功能:实现和不同外设的速度匹配;输出数据锁存;输入数据三态缓冲。 7-3什么是接口电路中的端口? 答:I/O端口简称I/O口,常指I/O接口电路中具有端口地址的寄存器或缓冲器。 7-5单片机与I/O设备之间,通常包括哪些传送的信息? 答:数据信息﹑状态信息和控制信息。 7-6在单片机中,使用哪三种控制方式实现数据的I/O传送?试说明各种方式的特点。 答:无条件传送﹑查询传送和中断传送方式。 7-7键盘接口必须解决的问题有哪些?
答:是否有键按下;有键按下,判定是哪一个;确定被按键的含义;去抖动;等答:是否有键按下;有键按下,判定是哪一个;确定被按键的含义;去抖动;等 7-9单片机应用系统中有哪些常用的显示器?显示器有哪些显示方式? 答:有LED发光二极管显示器﹑LCD液晶显示器 显示方式静态显示和动态显示 7-15简述LCD液晶显示器件的特点和使用场合。 答:特点:体积小﹑重量轻﹑功耗低﹑抗干扰能力强 使用场合:仪器仪表和控制系统中。 7-17对于大多数并行打印机接口,需要哪些信号满足时序关系,即可控制打印机正常打印?
答:4种信号线CPU先查看BUSY信号,为低时,数据送上DATA线后,发出STB信号通知打印机,打印机接到STB后,BUSY为高,数据接收好并存入内部打印缓冲器后,打印机送出ACK信号,并撤消BUSY信号。答:4种信号线CPU先查看BUSY信号,为低时,数据送上DATA线后,发出STB信号通知打印机,打印机接到STB后,BUSY为高,数据接收好并存入内部打印缓冲器后,打印机送出ACK信号,并撤消BUSY信号。 7-19为什么说使用RS-485网络可以有效地防止噪声干扰? 答:RS-485与RS-232比,信号的幅值低,另外RS-485采用差动信道,发送回路和接收回路分别提供独立的地线,因此RS-485网络可以有效地防止噪声干扰。
第八章 8-2试画出三种可能使DAC0832工作于单缓冲方式的硬件连线图。 答:两个寄存器任一个直通,另一个 受控锁存或两个同步受控。
8-5在例8-5中,用8255A作接口,则应如何将ADC0809与8255A连接?试画出其连接示意图。用查询方式读取转换结果,写出相应的采集程序。8-5在例8-5中,用8255A作接口,则应如何将ADC0809与8255A连接?试画出其连接示意图。用查询方式读取转换结果,写出相应的采集程序。 解:ADC0809各通道地址为7FF0H~7FF7H 8255A的4个地址分别为:PA口岸FF1FH,PB口FF3FH,PC口FF5FH,控制字寄存器地址FF7FH。
第九章 9-1单片机应用系统设计包括哪些内容? 答:硬件设计,软件设计和抗干扰设计 9-2AT89C2051单片机与MCS51单片机有什么区别? 答:AT89C2051单片机与MCS51单片机相比,没有如下 信号: 没有P0,P2口, 没有地址锁存信号线ALE 没有外部程序存储器读选通信号PSEN 没有读信号RE和写信号WR
9-3电子钟是利用定时器T1产生时间基值,试问电子钟是否有时间误差?9-3电子钟是利用定时器T1产生时间基值,试问电子钟是否有时间误差? 答:T1采用工作方式1,因此需要重装初值,电子钟是有时间误差。 9-4定时器T1的中断响应时间是多少?它与时间的误差是否有关? 答:中断响应时间是指从查询中断请求标志位到转向中断服务程序如口地址所需的机器周期数,一般是3~8个机器周期,与时间误差有关,一般情况下中断响应可以不考虑,精确定时场合应进行调整。
9-5中断服务程序的执行时间大约是多少?它与时间的误差是否有关?9-5中断服务程序的执行时间大约是多少?它与时间的误差是否有关? 答:由中断服务程序可知中断服务程序的执行时间,其中重装初值语句影响时间的误差。 9-6读取正在运行中TH1﹑TL1的值,是否会产生误差?它与时间的误差是否有关? 答:CPU不能在同一时刻读取THX和TLX的内容,比如,先读(TLX),后读(THX),由于定时器在不断运行,读(THX)前,恰好出现TLX溢出向THX进位的情况,则读得的(TLX)值就完全不对了。用样先读(THX)再读(TLX)也可能出错。
解决的办法:先读(THX)后读(TLX),再读(THX)。如2次读得的(THX)相同,则可确定读得的内容是正确的。如2次读得的(THX)不相同,则再重复上述过程。解决的办法:先读(THX)后读(TLX),再读(THX)。如2次读得的(THX)相同,则可确定读得的内容是正确的。如2次读得的(THX)不相同,则再重复上述过程。 对定时器没影响,因此对时间的误差没影响。
1.填空题 1)如不使用MCS-51片内存储器引脚EA必须接地。 2)微处理器由寄存器堆﹑控制器和运算器三部分组成。 3)当MCS-51引脚ALE信号有效时,表示从P0口稳定地送出了低8位地址。 4)MCS-51有4个并行I/O口,其中P0~P3是准双向口,所以由输出转输入时必须先写入“1”。 5)MCS-51系统中,当PSEN信号有效时,表示CPU要从程序存储器读取数据。 6)MCS-51特殊功能寄存器只能采用直接寻址方式。 7)如用传送指令访问MCS-51的程序存储器,它的操作码助记符应为MOVC。