单片机部分习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

$INCLUDE(C8051F020.INC) org 0000h mov dptr,#1000h mov EMIOCN,#25H mov r2,#0H mov r0,#00H loop:movx a,@dptr movx @r0,a inc dptr inc r0 djnz r2,loop sjmp $ end
第 2 章: 2、CIP-51 有哪些存储空间?各个存储空间的功能及寻址范围是什么? 有程序存储器、内部数据存储器、外部数据存储器、特殊功能寄存器和位寻址区五个独立的地址空间。 程序存储器:存放程序和常数,容量为 64KB,地址范围 0000H-0FFFFH 内部数据存储器:用于通用寄存器和存放数据的临时存储器,容量为 256B,地址范围 00H-0FFH 外部数据存储器:用于存放数据,容量为 64KB(有 4KB 在芯片内部),地址为 0000-0FFFFH 特殊功能寄存器(SFR):提供对片内资源和外设的访问和控制,以及与外设的数据交换,C8051F020 有 122 个,离散分布在地址 80H-0FFH 中。 位地址空间:存放位变量,进行布尔运算,容量为 256 位,有内部 RAM 的 20H-2FH(16 字节,128 位)和 部分 SFR(字节地址可以被 8 整除的)组成,地址范围为 00H-0FFH 3、CIP-51 的内部 RAM 空间有多少字节?它们在应用中有什么专门用途?堆栈一般应设置在什么位置? 内部 RAM 有 256 字节 低 128B 中的 00H-1FH 用于通用寄存器,20H-2FH 既可以字节寻址也可以位寻址,30H-7FH 作一般存储器 用;高 128B 因为与 SFR 地址重叠,故只能间接寻址,也作一般存储器用 理论上堆栈可以设在内部数据存储器的任何位置,复位时堆栈指针 SP 为 07H,但为了避开通用寄存器和位地 址空间,一般设在 30H-0FFH。 5、读写内部 RAM 与外部 RAM 的数据时,使用的指令有什么区别?读程序存储器的数据的指令又有什么不同? 读写内部 RAM 用 MOV 指令;读写外部 RAM 用 MOVX 指令;读程序存储器用 MOVC 指令,写程序存储器用 MOVX 指令,但为与写外部 RAM 相区分,需要对相应 SFR 的相关位进行设置。 6、若(PSW)=0x10,则当前的 R0~R7 在内部 RAM 中有哪些单元? 由 (PSW) =0x10 可知 RS1RS0=10, 故通用寄存器 R0-R7 在内部 RAM 的 0x10-0x17 单元。 (PSW 的格式 P22) 第一次作业存在的问题: 第一题:5 个存储空间,有的同学写的不全,漏 SFR 和位寻址区;有的同学对位寻址区的寻址范围写的不对,应为 0x00-0xff 而非 0x20-0x2f。 第三题:内部 RAM 每一部分的专门作用,尤其低 128B 要再分类说明;片内 XRAM 不算片内 RAM;堆栈一般在 0x30-0xff,而非 0x30-0x7f。 第六题:部分同学不会做;要查询 PSW 的格式,RS1RS0 的作用,P22 表 2-2 8、请叙述中断的响应过程。一个中断请求从提出到 CPU 响应最短要多长时间?如果 CPU 响应中断的条件全部具 备,响应中断最长的时间是多少?在什么样的情况下会出现这个响应时间? C8051F 的每个系统时钟周期对中断标志采样并对优先级译码,如果允许中断响应,则置位相应的优先级状态触发 器,然后执行一条硬件长调用指令,控制转移到相应的入口,清相应中断请求标志(有些需要在中断服务程序中清 除,如 RI、TI),接着 PC 压栈(但不保护 PSW),将中断服务程序的入口地址送给 PC,完成中断响应。 最快需要 5 个系统时钟周期:1 个中断检测周期,4 个对 ISR 的调用周期(LCALL)。最慢发生在 CPU 正在执行 RETI 指令的时候,需要再执行一条指令才能进入中断服务程序,而最慢的指令是 DIV 需要 8 个系统时钟周期。因 此,最慢需要 18 个系统时钟周期:1 个中断检测周期,5 个执行 RETI 的周期,8 个执行 DIV 指令的周期,4 个对 ISR 的调用周期(LCALL)。
ORG 0000H SJMP MAIN ORG 0100H MAIN:MOV R4,#0 MOV DPL,#0 NEXT:MOV DPH,#10H MOVX A,@DPTR MOV DPH,#25 MOVX @DPTR,A INC DPL DJNZ R4,NEXT ( CJNE DPL,#0,NEXT) SJMP $ END;若两个区域的低 8 位地址不同,该方法不可以
WDTCN=0xDE; 第三章:
WDTCN=0xAD;
EA=1;
//允许中断
1、片外 RAM 从 1000H~10FFH 单元有一数据块,用汇编语言编写程序将其传送到片外 RAM 的 2500H 单元开 始的区域中。 $INCLUDE(C8051F020.INC) org 0000h mov dptr,#1000h mov r2,#256(mov r2,#0) mov r3,#25h mov r4,#00h loop:movx a,@dptr push dph push dpl mov dph,r3 mov dpl,r4 movx @dptr,A pop dpl pop dph inc dptr inc r4 djnz r2,loop sjmp $ end 3、用汇编语言编写将累加器 A 的一位十六进制数(A 的高 4 位为 0)转换为 ASCII 码的程序,转换结果仍存放 在累加器 A 中,要求用查表和非查表两种方式实现。 ADD A,#30H CJNE A,#3AH,CONT CONT:JNC ADD7 JMP EXIT ADD7:ADD A,#7 EXIT:SJMP $ END 4、用汇编语言编程实现函数,设 x 的值存放在片内 RAM 的 35H 单元,y 的值存放在片内 RAM 的 36H 单元。 y =x+1 ,x>10;0,5<=x<=10;-1,x<5 MOV A,35H ;取 x ;与 11 比较,不等于 11,转 NEXT1 ;大于等于 11,转 NEXT2 ;小于 11,再与 5 比较,不等于 5 转 NEXT3 或者
CJNE A,#11,NEXT1 NEXT1:JNC NEXT2 CJNE A,#5,NEXT3
NEXT3:JNC NEXT4 MOV A,#-1 AJMP NEXT5 NEXT4:MOV A,#0 AJMP NEXT5 NEXT2: ADD A,#1 NEXT5:MOV 36H,A SJMP $ END 或(同学作业): X EQU 35H Y EQU 36H ORG 0000H AJMP START ORG 0100H START:MOV A,X CLR C SUBB A,#05H JNC NEXT MOV Y,#0FFH AJMP DONE NEXT:MOV A,X CLR C SUBB A,#0BH JNC NEXT1 MOV Y,#00H AJMP DONE NEXT1:MOV A,X INC A MOV Y,A DONE:SJMP DONE END
; 无借位(大于等于 5),转 NEXT4 ;小于 5
Fra Baidu bibliotek
;5 到 10 之间
补充:符号函数 MOV A,35H JZ DONE JNB ACC.7,POSI MOV A,#-1(0FFH) SJMP DONE POSI: MOV A,#1 DONE: MOV 36H,A SJMP $ END 或 MOV A,35H JZ DONE MOV R0,#0FFH JB ACC.7,NEG MOV R0,#01H NEG: MOV A,R0 SJMP $ END DONE: MOV 36H,A
9、C8051F020 单片机的外部 RAM 有片内和片外之分,如何实现片外的 RAM?复用与非复用方式的外部 RAM
是什么意思?数据总线和地址总线是如何连接的? 通过外部数据存储器接口 EMIF 实现片外数据存储器,用并行口 P0-P3 或 P4-P7 实现数据总线和地址总线,数据 线和地址线可以复用也可以非复用,由 EMIOCF 控制。 复用是指数据总线和地址总线的低 8 位共用一组端口信号线。 非复用是指数据总线和地址总线的低 8 位各用单独的 一组端口信号线。 若用低端端口实现,复用时用 P2 口提供地址高 8 位,P3 口提供地址低 8 位和数据线;非复用时用 P1 口提供高 8 位地址线,P2 口提供地址线低 8 位,P3 口提供数据线。若用高端端口实现,非复用则用 P5、P6 提供地址高、低 8 位,P7 做数据线,复用则用 P6 提供地址线高 8 位,P7 提供地址低 8 位和数据线。 10.什么是优先权交叉开关译码器?C8051F020 单片机有多少数字 I/O 口?C8051F 单片机的引脚与片内资源是 如何对应的? C8051F 单片机没有为定时器、串行口、A/D、D/A 等提供单独的引脚信号线,而是用并行口 P0-P3 提供,C8051F 单片机允许使用部分数字和模拟外设,没有用到的就不用分配引脚信号,因此内部提供了一个优先交叉开关译码电 路,实现 P0-P3 和这些资源的可编程连接,这就是优先交叉开关译码器。 C8051F 单片机有 64 位数字 I/O 端口。其中 P0-P3 可以按照优先交叉开关译码的方式为片内资源分配引脚,用端 口 I/O 交叉开关寄存器 XBR0-XBR2 实现。 11、假如一个单片机应用系统中要用到的资源位 UART0、SMBus、SPI、和 CP0 分配端引口(共 9 个引脚)。 另外将外部存储器解耦配置为复用方式并使用低端口。 同时还将 P1.2、 P1.3、 P1.4 配置为模拟输入, 以便用 ADC1 测 量 加在 这 些 引 脚 上的 电 压 。 试 用 Config 软 件 进行 优 先 权 交 叉开 关 译 码 器 的配 置 , 写 出 配置 步 骤 , 配 置 XBR0~XBR2 等相关 SFR 的值。 (1) 按 UART0EN=1 (XBR0.2) 、 SMB0EN=1 (XBR0.0) 、 SPI0EN=1 (XBR0.1) 、 CP0E=1 (XBR0.7) 、 EMIFLE=1 (XBR2.1)设置 XBR0、XBR1、XBR2 得 XBR0=0x87、XBR1=0x00、XBR2=0x02; (2)存储器接口配置为复用方式并使用低端口,有 PTRSEL=0(EMIOCF.5)、EMD2=0(EMIOCF.4); (3)P1.2~P1.4 配置为模拟输入方式有:P1MDIN=0xe3; (4)设置 XBARE=1 使能交叉开关,则 XBR2=0x42。UART0 优先级最高,P0.0、P0.1 分配给 TX0、RX0;SPI 优先权次之,P0.2~P0.4 分配给 SCK、MISO、MOSI、P0.5~P0.7 分配给 ALE、/RD、/WR、P1.0 分配给 NSS; 下一个优先的是 SMBUS,P1.1 分配给 SDA、P1.2~P1.4 做模拟量输入,跳过,P1.5 分配给 SCL;再下面的优先 权是 CP0,P1.6 分配给 CP0; (5) UART0 的 TX0 (P0.0) 、 ALE (P0.5) 、 /RD (P0.6) 、 /WR (P0.7) 的输出设置为推挽方式, P0MDOUT=0xe1; (6)P2、P3 设置为推挽方式 P2MDOUT=0xff、P3MDOUT=0xff; (7)P1 设置为漏极开路方式,并禁止 3 个模拟输入的输出驱动:P1MDOUT=0x00、P1=0xff。 13、8051F 单片机进入空闲方式时,单片机的振荡器是否工作?采用何种方法能使单片机退出空闲方式? 工作。复位或中断。 14、C8051F020 有几个复位源,分别是什么?自己的项目中最常使用的是什么复位源? 7 个:上/电复位、外部/RST 引脚复位、外部 CNVSTR 信号复位、软件命令复位、比较器 0 复位、时钟丢失检测器 复位、WatchDog 超时复位。 15、再简单的试验程序中,如果看门狗定时器复位不使用,该如何禁用? 向 WDTCN 写入 0xDE 后,4 个系统时钟周期内再写入 0xAD。该过程不应被中断。C51 代码: EA=0; //禁止中断
相关文档
最新文档