单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx

上传人:b****2 文档编号:4063304 上传时间:2023-05-02 格式:DOCX 页数:98 大小:535.54KB
下载 相关 举报
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第1页
第1页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第2页
第2页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第3页
第3页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第4页
第4页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第5页
第5页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第6页
第6页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第7页
第7页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第8页
第8页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第9页
第9页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第10页
第10页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第11页
第11页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第12页
第12页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第13页
第13页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第14页
第14页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第15页
第15页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第16页
第16页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第17页
第17页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第18页
第18页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第19页
第19页 / 共98页
单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx_第20页
第20页 / 共98页
亲,该文档总共98页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx

《单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx(98页珍藏版)》请在冰点文库上搜索。

单片机原理与应用基于汇编C及混合编程章习题解答Word文件下载.docx

P:

奇偶校验标志位。

用于记录A寄存器中的1的个数的奇偶性。

若A寄存器中1的个数为奇数,则P置位,为偶数则清零。

RS1、RS0:

寄存器组选择位,用来选择当前的工作寄存器组。

F0、F1:

用户标志位。

若寄存器A中的内容为63H(01100011B),A中“1”的个数为4,所以P=0。

2-4.STC12C5A60S2单片机内部有哪几类存储器?

中断服务程序的入口地址分布在哪个区域?

STC12C5A60S2单片机内部有程序存储器、数据存储器RAM、特殊功能寄存器、扩展RAM。

中断服务程序的入口地址位于程序存储器的首部。

2-5.STC系列单片机系统复位后,程序存储器指针PC的值是多少?

当单片机正在执行某一条指令时,PC指向哪里?

STC系列单片机系统复位后,程序存储器指针PC的值是0000H。

当单片机正在执行某一条指令时,PC指向下一条指令的地址。

2-6.片内RAM中,数据存储器的低128字节、高128字节和特殊功能寄存器可以使用什么寻址方式?

哪些单元可作为工作寄存器区,那些单元可以位寻址?

访问低128字节RAM时,既能采用寄存器直接寻址,又可寄存器间接寻址。

访问高128字节RAM时,只能采用寄存器间接寻址,但可以作为堆栈区。

访问特殊功能寄存器,只能直接寻址。

00H-1FH为工作寄存器组区;

片内RAM中20H-2FH单元为位寻址区。

2-7.在片内RAM中,位地址为30H的位属于字节地址为多少的单元?

字节地址为26H。

2-8.STC系列单片机复位后,使用了哪一工作寄存器组?

当CPU使用的工作寄存器组为2组时,R2对应的RAM地址是多少?

STC系列单片机复位后,所使用的工作寄存器组为0组;

当CPU使用的工作寄存器组为2组时,R2对应的RAM地址是12H。

2-9.什么是堆栈?

简述STC12C5A60S2单片机的堆栈处理过程。

堆栈是在RAM中开辟的一片数据缓冲区,常用于保护CPU现场及临时数据,其操作遵循先进后出、后进先出的原则。

STC12C5A60S2单片机的堆栈处理过程:

数据入栈时,SP指针内容先自动加1,然后再将数据推入到SP指针指向的单元;

出栈时,先将SP指针所指向单元的数据弹出,然后SP指针的内容自动减1.

2-10.以下关于数据指针DPTR和程序指针PC的概述是否正确?

(1)DPTR是可以访问的,而PC不能访问;

(2)它们都是16位的寄存器;

(3)它们都具有临时存储数据的功能;

×

(4)DPTR可以分成2个8位的寄存器使用,而PC不能。

2-11.单片机与外部存储器连接时,P0口用作地址/数据复用,需要添加什么芯片才能锁存8位地址信息?

单片机与外部存储器连接时,P0口用作地址/数据复用,需要添加地址锁存器,如74LS373。

2-12.如何设置STC12C5A60S2单片机I/O口工作模式?

若设置P1.7为强推挽输出,P1.6为开漏,P1.5为弱上拉,P1.4,P1.3,P1.2,P1.1,和P1.0为高阻输入,应如何设置相关寄存器?

STC12C5A60S2单片机上电复位后所有引脚都默认为准双向(弱上拉)方式。

根据具体应用可由软件配置成:

准双向、强推挽、仅为输入或开漏输出4种工作方式。

Px(x=0,1,2,3,4,5)口引脚的工作方式由特殊功能寄存器PxM1和PxM0相应位的配置决定

I/O口工作模式设定

PxM1[7:

0]

PxM0[7:

I/O口模式

准双向口(传统8051I/O口模式),灌电流可达20mA,拉电流为230uA

1

强推挽输出,输入输出电流都能可达20mA。

仅为输入(高阻)

开漏,内部上拉电阻断开

若设置P1.7为强推挽输出,P1.6为开漏,P1.5为弱上拉(准双向),P1.4,P1.3,P1.2,P1.1,和P1.0为高阻输入,可通过以下的两条指令来完成:

MOVP1M1,#01011111B;

MOVP1M0,#11000000B;

2-13.I/O口作为输入引脚,应工作在何种方式?

读外部引脚状态时,为何要先向相应引脚对应的锁存器写入“1”?

I/O口作为输入引脚,应工作在准双向或仅为输入状态;

在准双向口配置情况下,先输出高电平,使d管截止,才可读到正确的外部输入状态。

2-14.STC12C5A60S2单片机复位方式有哪些?

复位后单片机的初始状态如何?

STC12C5A60S2单片机复位方式有上电复位、看门狗复位、外部低压检测复位、软件复位。

复位后,单片机从用户程序区0000H处开始正常工作;

堆栈指针SP指向07H,P0~P3为FFH。

习题三

3-1使用Proteus对电路进行仿真,有哪些步骤?

使用Proteus进行单片机系统设计、仿真主要有七个步骤,依次是新建设计文件,选取元件并加入列表区,将元件摆放到图形编辑窗口,放置电源、地线、布线、加载目标程序代码,运行仿真。

3-2在Keil中,源程序文件从编辑到生成*.hex文件,经过哪些过程?

在Keil中,源程序文件从编辑到生成*.hex文件要经过建立工程,建立源程序文件,建立文件和程序的连接,工作环境和参数的设置,再进行编译、连接可以生成目标文件。

3-3在Keil中,如何对源程序文件进行软件模拟调试?

Keil软件中有一个仿真CPU用来模拟程序的执行,可以在没有硬件和仿真器的情况下进行程序的调试,这就是软件模拟调试的方法。

对源文件进行软件模拟调试,首先要启动调试。

对工程编译、连接成功以后,使用菜单“Debug”—>

“Start/StopDebugSession”进入调试状态,按“Ctrl+F5”组合键或者使用

按钮也能进入调试状态。

这时,源程序窗口的左侧出现一个黄色箭头,指向main()函数的第一行,该箭头总是指向即将要运行的语句行。

退出调试状态和启动调试状态方法一致。

调试过程中使用最多的是“Debug”菜单,而该菜单上的大部分命令可以在“debug”工具栏中找到对应的快捷按钮。

常用按钮有:

运行,单步,过程单步,单步跳出,执行到当前,反汇编窗口,观察窗口,存储器窗口。

其中单步调试方式特别常用。

单步执行后,可以通过各个窗口观察执行结果,从而判断该条语句是否出现问题。

如果程序较长,可以采用下面的方法来调试。

首先,在合适的位置设置断点,方法为:

在某一行上右击,弹出的快捷菜单中选择“Insert/RemoveBreakpoint”。

设置成功后,该行的前面会有红色方块指示。

这时如果单击“运行”按钮,程序运行到断点处会自动停止。

删除断点也需使用同样的方法。

如果程序的运行要依赖于外围接口,例如并行口、串行口、中断、定时/计数器等,Keil的“Peripherals”菜单中提供了一些选项,通过这些选项打开对应外围接口的对话选框,可以观察外围接口的状态,或者更改外围接口的运行情况。

习题四

4-151内核单片机有哪几种寻址方式?

片内RAM低128字节及高128字节分别支持哪些寻址方式?

片内扩展RAM、片外RAM及特殊功能寄存器分别支持哪些寻址方式?

51内核单片机的寻址方式有:

立即(数)寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。

片内RAM低128字节支持直接寻址、寄存器间接寻址。

片内RAM高128字节支持寄存器间接寻址。

片内扩展RAM及片外RAM支持间接寻址。

特殊功能寄存器支持直接寻址。

4-2区分下列指令有什么不同?

(1)MOVA,#22H和MOVA,22H

MOVA,#22H;

将立即数22H送入A寄存器中,第二操作数为立即寻址。

MOVA,22H;

把片内RAM字节地址为22H单元的内容送入A寄存器中,第二操作数为直接寻址。

(2)MOVA,R1和MOVA,@R1

MOVA,R1;

把R1的内容送入A寄存器中,第二操作数为寄存器寻址。

MOVA,@R1;

将寄存器R0的内容作为RAM某单元的地址,将该单元的内容传送给A寄存器,第二操作数为寄存器间接寻址。

(3)MOVA,@R1和MOVXA,@R1

将寄存器R1的内容作为片内RAM某单元的地址,将该单元的内容传送给A寄存器

MOVXA,@R1;

将寄存器R1的内容作为片内扩展或外部RAM某单元的地址,将该单元的内容传送给A寄存器

两者的区别是:

MOV访问的是内部RAM,MOVX访问的是片内扩展或外部RAM。

(4)MOVXA,@R1和MOVXA,@DPTR

主要的区别在于对外输出地址的方式上。

如果是访问片外扩展RAM,

MOVXA,@R1

只是占用P0口,输出R1中的8位地址。

而MOVXA,@DPTR要占用P0、P2口,输出DPTR中的16位地址。

(5)MOVCA,@A+DPTR和MOVXA,@DPTR

MOVCA,@A+DPTR;

功能是A寄存器的内容作为无符号数和DPTR内容相加后得到一个16位的地址,将程序存储器中该地址的内容传送给A。

MOVXA,@DPTR;

以DPTR寄存器的值作为片内扩展RAM或者片外RAM的地址,将该地址单元的内容送入A。

两者的区别是MOVC访问的是整个ROM的64KB空间;

MOVX访问的是整个片内扩展RAM或片外扩展RAM。

4-3写出完成下列各项任务的指令。

(1)片内RAM30H单元的内容送到片内RAM50H单元中。

MOV50H,30H

(2)片内RAM40H单元的内容送到片内扩展RAM50H单元中。

ANLAUXR,#11111101B

MOVA,40H

MOVDPTR,#50H

MOVX@DPTR,A

(3)片内RAM50H单元的内容送到片外RAM2000H单元中。

ORLAUXR,#00000010B

MOVA,50H

MOVDPTR,#2000H

MOVX@DPTR,A

(4)片外RAM2000H单元的内容送到片外RAM4000H单元中。

ORLAUXR,#00000010B

MOVDPTR,#2000H

MOVXA,@DPTR

MOVDPTR,#4000H

MOVX@DPTR,A

(5)ROM1000H单元的内容送到片外RAM8000H单元中。

MOVDPTR,#1000H

MOVA,#0

MOVCA,@A+DPTR

MOVDPTR,#8000H

(6)将程序状态字寄存器PSW内容传送到片内扩展RAM0D0H单元中。

ANLAUXR,#11111101B

MOVA,PSW

MOVDPTR,#0D0H

(7)将片内RAM01H~FFH单元内容清零。

ANLPSW,#11100111B

MOVR0,#0FFH

MOVA,#0

LOOP:

MOV@R0,A

DJNZR0,LOOP

(8)使片内RAM20H单元的b7、b6位清零,b5、b4位置1,b3、b2位取反,其余各位保持不变。

ANL20H,#00111111B

ORL20H,#00110000B

XRL20H,#00001100B

4-4下列各条伪指令前的标号各代表的地址是多少?

ORG0100H

TABLE:

DS4;

TABLE代表的的地址是0100H

WORD:

DB15,0FFH,30;

WORD代表的地址是0104H

BINEQU0200H

TAB1:

DW07H;

TAB1代表的地址是0107H

4-5假设程序头文件中含有如下变量定义伪指令

DBUFDATA40H

BDATADATA60H

(1)请指出如下指令中源操作数的寻址方式。

MOVR0,#DBUF;

立即(数)寻址

MOVR0,DBUF;

直接寻址

(2)执行如下程序段后,片内RAM40H~4FH单元的内容是什么?

60H单元的内容又是什么?

MOVBDATA,#10H

MOVR0,#DBUF

CLRA

MOV@R0,A

INCA

INCR0

DJNZBDATA,LOOP

执行以上程序段后,片内RAM40H~4FH单元的内容是:

0-0FH;

60H单元的内容为0。

4-6编写一个延时10ms的子程序。

选择STC12C5A60S2单片机,系统时钟频率为12MHz,程序如下:

DELAY_10ms:

MOVR7,#120;

2T

DL:

MOVR6,#250;

DJNZR6,$;

4T

DJNRR7,DL;

RET;

4T

4-7编程实现的逻辑运算。

MOVC,P1.1

ORLC,P1.2

CPLC

MOVPSW.5,C

MOVC,P1.4

ANLC,/P1.3

ORLC,PSW.5

MOVP1.0,C

4-8将存放在片内RAM51H、52H和片外RAM2000H、2001H的四位BCD码相加,结果存放在片内RAM50H、51H、52H单元中(假设低位字节存放在高地址中,高位字节存放在低地址中)。

ORLAUXR,00000010B

MOVDPTR,#2001H

ADDA,52H

DAA

MOV52H,A

MOVDPTR,#2000H

ADDCA,51H

MOV51H,A

MOVA,#00H

ADDCA,#00H

MOV50H,A

4-9编程实现将片内扩展RAM0200H~0220H单元的内容,全部移到片内RAM30H单元开始的位置,并将原位置清零。

MOV 

R0,#30H

MOV 

DPTR,#0200H

R1,#21H

ANLAUXR,#11111101B

MOVX 

A,@DPTR

@R0,A

A,#0

INC 

R0

DPTR

DJNZ 

R1,LOOP

4-10将存放在R3、R2中的三位压缩BCD码转换为二进制形式。

W_BCD_BI:

LCALLB_BCD_BI;

调用将R2中单字节BCD码转换为二进制数的子程序,

转换的结果存放于A寄存器中

MOVR4,A;

把转换结果暂时保存到R4

MOVA,R3;

取BCD码的高1位

MOVB,#100

MULAB;

计算(a3*10+a2)*100

ADDA,R4;

加低2位转换结果

MOVR2,A;

保存转换结果的低8位

MOVA,B;

取(a3*10+a2)*100的高8位

ADDCA,#0;

加进位位

MOVR3,A;

保存转换结果的高8位

......

B_BCD_BI:

MOVA,R2;

取BCD码

ANLA,#0F0H;

保留高4位(即十位)

SWAPA

MOVB,#10

十位*10,最大为90(即5AH),因此高8位为0

MOVB,A;

乘积暂存到B寄存器

ANLA,#0FH;

保留个位

ADDA,B;

个位加“十位*10”,结果在A寄存器中

RET

4-11编写程序完成运算R0R1×

R2R3,乘积存R4、R5、R6和R7中。

MUL:

CLRA

MOVR4,A

MOVR5,A

MOVR6,A

MOVR7,A

MUL1:

MOVA,R1

MOVB,R3

MULAB

MOVR6,B

MUL2:

MOVA,R0

ADDA,R6

CLRA

ADDCA,B

MUL3:

MOVB,R2

MOVA,R5

ADDCA,0

MUL4:

ADDA,R5

MOVA,R4

RET

习题五

5-1在C51语言中支持哪些数据类型?

C51特有的数据类型有哪些?

在C51语言中支持的数据类型有:

char(字符型)、int(整型)、long(长整形)、float(浮点型)、特殊功能寄存器类型和位类型。

C51特有的数据类型有:

特殊功能寄存器类型和位类型。

5-2C51中的存储器类型有几种,它们分别表示的存储器区域是什么?

C51中的存储器类型有:

data、bdata、idata、pdata、xdata、code

存储器类型

与硬件存储器空间的对应关系

data

直接寻址的片内RAM低128B,访问速度快

bdata

片内RAM可位寻址区(20H-2FH),允许字节和位混合访问

idata

用Ri间接寻址的片内RAM全部地址空间

pdata

用Ri间接访问的片内扩展RAM或片外扩展RAM低256B

xdata

用DPTR间接访问的片内扩展RAM或片外扩展RAM(64K)

code

程序存储器ROM空间(64KB)

5-3在C51中,bit位与sbit位有什么区别?

两种位变量的区别在于,用bit定义的位变量,其地址由C51编译时予以安排,而用sbit定义位变量时必须同时定义其位地址,在C51编译器编译时,其位地址不可变化。

5-4在C51中,中断函数与一般函数有什么不同?

(1)中断函数不能进行参数传递

(2)中断函数没有返回值

(3)在任何情况下都不能直接调用中断函数

(4)如果在中断函数中调用了其他函数,则被调用函数使用的工作寄存器必须与中断函数相同。

否则会产生不正确的结果。

(5)在中断函数中调用其他函数,被调函数最好设置为可重入的,因为中断是随机的,有可能中断函数所调用的函数出现嵌套调用。

(6)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容。

(7)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。

5-5请分别定义下列变量:

(1)片内RAM中无符号字符型变量x;

unsignedcharidatax;

(2)片内RAM中位寻址区无符号字符型变量y,将y.0-y.2再分别定义为位变量key_in、key_up、key_down;

片内RAM中位寻址区无符号字符型变量y:

unsignedcharbdatay;

定义y.0-y.2为位变量key_in、key_up、key_down:

sbitkey_in=y^0;

sbitkey_up=y^1;

sbitkey_down=y^2;

(3)片外RAM中整型变量x,并指定变量x的绝对地址为4000H;

#definexXWORD[0X2000]

或:

xdataintx_at_0x4000;

(4)特殊功能寄存器变量PCON;

sfrPCON=0X87

5-6用C51语言写出整型变量a左移4位的语句。

inta;

a=a<

<

4;

5-7用C51语言编程实现,片内扩展RAM的000EH单元和000FH单元的内容交换。

#include<

STC12C5A.h>

#include<

absacc.h>

voidswap()

{

chardatac,d;

AUXR&

=0xFD;

c=XBYTE[0x000E];

d=XBYTE[0x000F];

XBYTE[0x000E]=d;

XBYTE[0x000F]=c;

}

5-8已知x=375,y=589,用C51语言编写程序,计算z=x+y的结果。

intadd()

intx,y,z;

x=375;

y=589;

z=x+y;

returnz;

5-9试用C51语言编写程序实现将片内RAM21H单元存放的两位BCD码数转换为十六进制数存入30H单元。

dataunsignedchary1_at_0x21;

dataunsignedchary2_at_0x30;

voidtrans()

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2