单片机答案 何桥主编_第1页
单片机答案 何桥主编_第2页
单片机答案 何桥主编_第3页
单片机答案 何桥主编_第4页
单片机答案 何桥主编_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章作业参考答案1. MCS-51单片机共有4个工作寄存器组。当前寄存器组由程序状态寄存器PSW中RS1、RS0位的状态组合来决定。 2. MCS-51的EA信号功能是:控制访问外部程序存储器。当EA为低电平时,对ROM的读操作限定在外部程序存储器;当EA为高电平时,对ROM的读操作是从内部程序存储器开始的(PC值小于4K时),当PC值大于4K时,CPU自动转向外部程序存储器。 在使用8031时EA信号引脚应该接地,以便从外部扩展EPROM中取指令。 3. 以下信号需要芯片引脚以第二功能的方式提供: (1)P3端口线的第二功能:RxD,串行数据接收;TxD,串行数据发送;INT0,外部中断0

2、申请;INT1,外部中断1申请;T0,定时器/计数器0计数输入;T1,定时器/计数器1计数输入;WR,外部RAM写选通;RD,外部RAM读选通。 (2)EPROM存储器程序固化所需要的信号:PROG,编程脉冲信号;VPP,编程电压信号; (3)备用电压:VPD 。 4. 作用:程序状态字PSW是一个8特殊功能寄存器,它的各位包含了程序运行的状态信息,以供程序查询和判断。 常用的状态位及作用: Cy,进位标志位。 Ac,辅助进位标志位。 F0&F1,用户标志位。 RS1&RS0,工作寄存器组选择位。 OV,溢出标志位。 P,奇偶标志位。 5. 开机复位后,PSW为“00H”,则R

3、S0和RS1两位均为0,对应第0组工作寄存器,所以此时CPU使用的是第0组工作寄存器,它们的地址是00H07H。 6. SP表示堆栈指针,有8位,作用是指示栈顶地址,复位后SP的内容是07H。 7. RAM低128单元划分为工作寄存器区、位寻址区和用户RAM区3个区域,各个区域作用分别为: (1)工作寄存器区,常用于存放操作数及中间结果等。 (2)位寻址区,其中每一个单元既可以作为一般RAM单元使用,进行字节操作,也可以对单元中的每一位进行位操作。 (3)用户RAM区,一般用于存放用户数据及做堆栈区使用。 8. 使单片机复位有两种方式:上电自动复位和按键手动复位。复位后,PC初始化为0000H

4、,使单片机从0000H单元开始执行程序。 第三章4. (1) MOV R2, R7 不合乎规定。以Rn为目的操作数的数据传送指令的源操作数只能是A, direct, #data。 (2) MOV A,R2 不合乎规定。寄存器间接寻址中的间址寄存器只能是R0或者R1。 (3) DEC DPTR 不合乎规定。规定减1指令DEC与DPTR无法连用,但加1指令INC可与DPTR连用。 (4) CPL 2FH 合乎规定。因为此处的2FH表示的是位地址。 (5) MOV 20H.7, F0 不合乎规定。因为位寻址是在片内RAM的位寻址区和可以位寻址的专用寄存器间进行的位操作。 (6) PUSH DPTR

5、不合乎规定。因为DPTR为16位,而PUSH只能处理8位。 (7) MOV PC, #2000H 不合乎规定。因为只能通过转移、调用、返回指令来使PC值自动改变。 5. 原题目需进行部分修改,修改后程序如下: ORG 2000H 指定汇编的起始地址 MOV SP, #40H 设堆栈指针SP为40H MOV A, #30H 将30H复制给累加器A LCALL 2400H 调用2400H开始处的子程序,原PC值入栈保护,故SP加2变为 ;42H,PC值变为2400H, ADD A, #20H 累加器A的内容30H加上20H,变为50H MOV B, A 将累加器A的值也赋给累加器B,即累加器B的内

6、容也变为50H ZY: SJMP ZY 程序结束 ORG 2400H 指定子程序起始地址 MOV DPTR, #200AH 将200AH赋值给DPTR PUSH DPL 将低位的0AH入栈保护,SP加1变为43H PUSH DPH 将高位的20H入栈保护,SP加1变为44H RET 返回指令,原PC值出栈,故SP减2变为42H 由以上程序分析,可知 SP=42H A=50H B=50H 6. (1)1230H AJMP 1620H 未超出。1230H+2=1232H,G故高五位为00010,而1620H高五位也为00010。所以转移目标地址与AJMP下一条指令的第一个字节在同一2KB范围内。

7、(2)2780H AJMP 2830H 超出。2780H+2=2782H,G故高五位为00100,而2830H高五位为00101。所以转移目标地址与AJMP下一条指令的第一个字节不在同一2KB范围内。 (3)1230H LJMP 8FFFH 未超出。LJMP指令转移的目标地址可以在64KB程序存储器地址空间的任何地方。 (4)1750H ACALL 1A00H 超出。1750H+2=1752H,G故高五位为00010,而1A00H高五位为00011。所以所调用的子程序地址与ACALL下一条指令的第一个字节不在同一2KB范围内。 (5)2330H SJMP 2340H 未超出。2340H-233

8、0H=0010H=+16(-128,+127) (6)2800H SJMP 27FAH 未超出。27FAH-2800H=-0006H=-6(-128,+127) (7)3FEEH SJMP 3730H 超出。3730H-3FEEH=-00CEH=-206(-128,+127) 8. 执行ACALL 3A00H以后, (PC)=(PC+2)=3800H 入栈保护,SP两次加1变为62H。且先存PC的低8位,再存PC的高8位,即堆栈中存储情况如下: 11 ONE DATA 1CH TWO DATA 1DH THREE DATA 1EH MOV R0,#20H ;数据块首地址 MOV R1,1FH

9、;取数据块长度到R1 MOV A,R1 JZ FINISH ;长度为0则结束 CLR A MOV ONE,A ;计数单元清0 MOV TWO,A MOV THREE,A LOOP: MOV A,R0 ;取数 INC R0 ;修改地址指针 JZ NEXT2 ;A=0,转向NEXT2 JB ACC.7,NEXT3 A<0,转向NEXT3 INC ONE ;A>0,ONE单元加1 SJMP NEXT1 NEXT3: INC THREE ; A<0,THREE单元加1 SJMP NEXT1 NEXT2: INC TWO ;A=0,TWO单元加1 NEXT1: DJNZ R1,LOOP

10、 ;长度减1不为0则返回 FINISH: SJMP $ END 12.12MHZ,则一个机器周期T为1us。 (1)2ms,此处采用双重循环来实现,设外层循环为10次,则2000us÷10÷1us÷(1+1+2)=50=32H,则程序如下: ORG 1000H MOV R6, #0AH ;1T DL2: MOV R7, #32H ;1T DL1: NOP ;1T NOP ;1T DJNZ R7, DL1 ;2T DJNZ R6, DL2 ;2T RET ;2T (2)1s,此处采用三重循环来实现,设外层循环为100次(64H),中间循环也为100次(64H),则1

11、000000us÷ 100 ÷100÷1us÷(1+1+2)=25=19H,则程序如下: ORG 1000H MOV R5,#64H ;1T DL3: MOV R6, #64H ;1T DL2: MOV R7, #19H ;1T DL1: NOP ;1T NOP ;1T DJNZ R7, DL1 ;2T DJNZ R6, DL2 ;2T DJNZ R5, DL3 ;2T RET ;2T 15. MOV R2,#20H ; 源数据区地址高8位 MOV R3,#28H ; 目的数据区地址高8位 MOV R7,#81H 存放数据块数据个数 MOV DPL,#0

12、0H ; 数据区地址低8位 LOOP: MOV DPH,R2 ; 形成源地址 MOVX A ,DPTR 取一个数 PUSH A A入栈保护 12.12MHZ,则一个机器周期T为1us。 (1)2ms,此处采用双重循环来实现,设外层循环为10次,则2000us÷10÷1us÷(1+1+2)=50=32H,则程序如下: ORG 1000H MOV R6, #0AH ;1T DL2: MOV R7, #32H ;1T DL1: NOP ;1T NOP ;1T DJNZ R7, DL1 ;2T DJNZ R6, DL2 ;2T RET ;2T (2)1s,此处采用三重循环

13、来实现,设外层循环为100次(64H),中间循环也为100次(64H),则1000000us÷ 100 ÷100÷1us÷(1+1+2)=25=19H,则程序如下: ORG 1000H MOV R5,#64H ;1T DL3: MOV R6, #64H ;1T DL2: MOV R7, #19H ;1T DL1: NOP ;1T NOP ;1T DJNZ R7, DL1 ;2T DJNZ R6, DL2 ;2T DJNZ R5, DL3 ;2T RET ;2T 15. MOV R2,#20H ; 源数据区地址高8位 MOV R3,#28H ; 目的数据区

14、地址高8位 MOV R7,#81H 存放数据块数据个数 MOV DPL,#00H ; 数据区地址低8位 LOOP: MOV DPH,R2 ; 形成源地址 MOVX A ,DPTR 取一个数 PUSH A A入栈保护 CLR A MOVX DPTR,A 把原数据块中的区域清0 POP A A出栈 MOV DPH,R3 ; 形成目的地址 MOVX DPTR,A 传送一个数 INC DPL ; 修改低8位地址 CJNE R7, #81H, LOOP SJMP $ END 18. SOURCE DATA 3000H MOV DPTR,#SOURCE 源数据块首地址 MOV NUM,#00H NUM初始

15、值为0 LOOP: MOVX A,DPTR 取一个数据 INC DPTR 修改地址指针 CJNE A,#24H,NEXT 不为结束符$,则判断是否为结尾符00H INC NUM 为结束符$则NUM值加1 NEXT: CJNE A,#00H,LOOP 不为结尾符00H,则循环,取下一个数据继续判断 SJMP $ 结束 END 第四章作业参考答案 5.MCS-51系列单片机的中断矢量地址分别为: 中断源中断矢量地址外部中断00003H定时器T0溢出中断000BH外部中断10013H定时器T1溢出中断001BH串行口中断0023H中断源及其对应的矢量地址 6.中断响应过程: 单片机一旦响应中断,首先

16、置位相应的优先级有效触发器,然后执行一个硬件子程序调用,把断点地址压入堆栈保护,然后将对应的中断人口地址装入程序计数器PC,使程序转向该中断入口地址,以执行中断服务程序。 7.(1)保护断点:由CPU自动执行的。相应中断后,CPU会执行一个硬件子程序调用,把断点地址压入堆栈保护。当执行中断返回指令RETI后,将断点弹出送回PC,使程序回到原来被中断的主程序继续执行。 (2)保护现场:由用户编写程序执行。现场有PSW、工作寄存器、专用寄存器等,如果在中断服务程序中要用到这些寄存器,则用户必须编写程序使得在进入中断服务之前将他们的内容包含起来。同时用户必须在中断结束执行RETI之前编写程序恢复之前

17、的现场。 8.CPU响应中断的条件: (1)有中断源发出中断请求; (2)中断总允许位EA=1,即CPU开中断; (3)申请中断的中断源的中断允许位为1。 9. MCS-51扩充中断源可采用的方法: (1)用定时器扩充外部中断; (2)中断与查询相结合; (3)用Intel 8259可编程中断控制器扩展外部中断。 第五章作业参考答案 5.解:设定时25ms的计数初值为X,则: (216-X)*(12/6)*10-6=25*10-3 解得:X=53036 将X用十六进制表示为:CF2CH TH0=0CFH TL0=2CH 程序设计如下: ORG 2000H MOV TMOD, #01H ;写入方

18、式控制字 MOV TL0, #2CH ;计数初值写入 MOV TH0, #0CFH SETB TR0 ;启动T0 LOOP: JBC TFO,PE AJMP LOOP PE: MOV TL0, #2CH ;重装计数初值 MOV TH0, #0CFH AJMP LOOP END 6.答:1)8051做定时时其计数脉冲由内部提供。采用晶体脉冲的十二分频信号作为计数信号,即使对机器周期进行计数。 2)8051做计数时其计数脉冲来自外部引脚T0或T1。 7.答:门控信号设置为1时,定时器/计数器的启动要由外部中断引脚INTi和TRi位共同提供。只有INT0(或INT1)引脚为高电平,TR0或TR1置“

19、1”才能启动定时器/计数器。 8.解:因为方波周期为2ms,故采用定时器T1定时1ms, 设定时1ms的计数初值为X,则: (213-X)*(12/12)*10-6=1*10-3 解得:X=7192 将X用十六进制表示为:1C18H TH0=1CH TL0=18H 程序设计如下: ORG 2000H MOV TMOD, #00H ;写入方式控制字 MOV TL1, #18H ;计数初值写入 MOV TH1, #1CH SETB TR1 ;启动T1 LOOP: JBC TF1,PE AJMP LOOP PE: MOV TL1, #18H ;重装计数初值 MOV TH1, #1CH CPL P1.

20、0 SJMP LOOP ;P1.0取反 END 9.解:定时100us和200us,应用T0方式3。 定时100us计数初值,则: (28-X1)*(12/6)*10-6=100*10-6 X1=206=0CEH 定时200us计数初值,则: (28-X2)* (12/6)*10-6=200*10-6 X2=156=9CH 程序设计如下: ORG 2000H START: AJMP MAIN ORG 000BH AJMP PIT0 ;转T0中断处理入口 ORG 001BH ;转T1中断处理入口 AJMP PIT1 ORG 2100H MAIN: MOV SP, #60H MOV TMOD, #

21、03H ;置方式3 MOV TL0,#0CEH ;定时100us计数初值 MOV TH0,#9CH ;定时200us计数初值 MOV TCON, #50H ;启动TL0、TH0计数 MOV IE,#8AH ;中断允许T0、T1开发中断 LOOP: AJMP LOOP ;等待中断 PIT0: MOV TL0,#0CEH ;T0中断处理程序 CPL P1.0 RETI PIT1: MOV TH0, #9CH ;T1中断处理程序 CPL P1.1 RETI 第六章作业参考答案 1.答:不会发生冲突的原因是因为控制信号不同。程序存储器选用PSEN做选通信号,而数据存储器选用WR或者RD做选通信号。 2

22、.答:在进行系统扩展时,P0口还用做数据线,因此需采用分时复用技术,对地址和数据进行分离。为此在构造地址总线时要增加一个8位锁存器,先把这低8位地址送锁存器暂存,由地址锁存器为系统提供低8位地址,然后把P0口作为数据线使用。而P2口只用作地址线。 3.答:因为在访问外部ROM或者大于256B的RAM时,P2口作为扩展存储器的高8位地址。当访问这些部分时,P2必须要输出一个稳定不变的地址。 5.解:将8031芯片扩展扩展一片27256 EPROM组成最小系统,因为27256为32KB*8bit型芯片,32KB=215,所以需要15根地址线,又因为8bit,所以需要8根数据线。 图略,可参照教材上

23、P91图6-8来设计。地址范围根据具体图而定。 6.解:扩展16KB的程序存储器和32KB的数据存储器,方法很多,比如可选用1片27128和2片62128。 图略,可参照教材上P91图6-8和P95图6-14来设计。 第七章作业参考答案 5.解:用中断方式编写串行口方式3下的发送程序。此处采用定时器1方式2做波特率发生器,根据发送的波特率为4800b/s,取SMOD=0,通过下式计算得到TH1和TL1的时间常数初值X为: X=256-11.059*106*20/ (384+4800)=250=0FAH 程序设计如下: ORG 0000H AJMP START ORG 0023H AJMP SP

24、IN ORG 1000H START: MOV SP, #70H MOV TMOD, #20H MOV TH1, #0FAH MOV TL1, #0FAH SETB TR1 MOV DPTR,TTAB MOV R2, #30 MOV PCON, #00H MOV SCON, #0C0H SETB EA SETB ES STOP: SJMP STOP ORG 2000H D01: CLR TI MOV A,DPTR MOV C, PSW.0 CPL C MOV ACC.7,C MOV SBUF, A INC DPTR DJNZ R2, RIGH CLR ES RIGH: RETI 6.解:用中断

25、方式编写串行口方式3下的接收程序。此处采用定时器1方式2做波特率发生器,根据接收的波特率为4800b/s,取SMOD=0,通过下式计算得到TH1和TL1的时间常数初值X为: X=256-11.059*106*20/ (384+4800)=250=0FAH 程序设计如下: ORG 0000H AJMP START ORG 0023H AJMP SPIN ORG 1000H START: MOV SP, #70H MOV TMOD, #20H MOV TH1, #0FAH MOV TL1, #0FAH SETB TR1 MOV DPTR,RTAB MOV R2, #30 MOV PCON, #00H MOV SCON, #0D0H SETB EA SETB ES STOP: SJMP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论