单片机C51程序设计课后习题答案(复习专用)(5)

2019-08-31 14:00

14. 用3种循环结构编写程序实现输出1到10的平方之和。

参考程序:

(1)while循环

#include //包含特殊功能寄存器库 #include //包含I/O函数库 void main(void) //主函数 {

int i,s=0; //定义整型变量 i=1;

SCON=0x52; //串口初始化 TMOD=0x20; TH1=0XF3; TR1=1;

while (i<=10) //累加1到10的平方之和在s中 {

s=s+i*i; i++; }

printf(\到10的平方之和=%d\\n\while(1); }

(2)do while循环

#include //包含特殊功能寄存器库 #include //包含I/O函数库 void main(void) //主函数 {

int i,s=0; //定义整型变量 i=1;

SCON=0x52; //串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; do //累加1到10的平方之和在s中 {

s=s+i*i; i++; }

while (i<=10);

printf(\到10的平方之和=%d\\n\while(1); }

(3)for循环

#include #include void main(void) {

int i,s=0; SCON=0x52; TMOD=0x20;

//包含特殊功能寄存器库 //包含I/O函数库 //主函数

//定义整型变量 //串口初始化

TH1=0XF3; TR1=1;

for (i=1;i<=10;i++) s=s+i*i; //累加1到10的平方之和在s中 printf(\到10的平方之和=%d\\n\while(1); } 15. 排序。

对一个由5个元素组成的无符号字符数组按由小到大的顺序进行

参考程序:

#include //包含特殊功能寄存器库 #include //包含I/O函数库 main() {

unsigned char f[5],m,i,j;

SCON=0x52; //串口初始化 TMOD=0x20; TH1=0XF3; TR1=1;

printf(\输入任意5个字符:\

scanf(\printf(\

for (i=0;i<5;i++)

for (j=0;j<5-i;j++) if (f[j]>f[j+1])

{m=f[j];f[j]=f[j+1];f[j+1]=m;}

printf(\由小到大的顺序为:%c,%c,%c,%c,%c \printf(\while(1); } 16. 出。

用指针实现,输入3个无符号字符数据,按由大到小的顺序输

参考程序:

#include //包含特殊功能寄存器库 #include //包含I/O函数库 main() {

unsigned char x,y,z;

unsigned char *p,*p1,*p2,*p3; SCON=0x52; //串口初始化

TMOD=0x20; TH1=0XF3; TR1=1;

printf(\scanf(\printf(\

p1=&x;p2=&y; p3=&z;

if (*p1<*p2) {p=p1;p1=p2;p2=p;} if (*p2<*p3) {p=p2;p2=p3;p3=p;} if (*p1<*p2) {p=p1;p1=p2;p2=p;}

printf(\while(1); }

17. 有3个学生,每个学生都包括学号、姓名和成绩,要求找出成绩最高的学生的姓名和成绩。

参考程序:

#include //包含特殊功能寄存器库 #include //包含I/O函数库 struct student {

unsigned char number[10]; unsigned char name[10]; unsigned int grade; }p1[3]; main() {

unsigned char i,j=0; SCON=0x52; //串口初始化 TMOD=0x20; TH1=0XF3; TR1=1;

printf(\for (i=0;i<3;i++) {

printf(\scanf(\printf(\scanf(\printf(\scanf(\}

for (i=1;i<3;i++) {

if (p1[i].grade>p1[j].grade) j=i; }

printf(\成绩最高的学生是:%s,成绩是:%d\printf(\

}

while(1); }

第五章

1.单片机C语言与汇编语言混合编程有哪几种方式?通常采用什么方式? 答:单片机C语言和汇编语言混合编程分为汇编中调用C51函数和C51程序中引用汇编,通常使用的是在C51程序中引用汇编。在C51程序中使用汇编语言有两种情况:一种是汇编程序部分和C51程序部分为不同的模块,或不同的文件,通常由C51程序调用汇编程序模块的变量和函数(也可称为子程序或过程);另一种是嵌入式汇编,即在C51程序中嵌入一段汇编语言程序。

2.简述C51程序调用汇编程序时如何实现参数传递。

答:C51中调用汇编程序进行参数传递时都必须严格遵守C51函数的参数和返回值的相关约定。行参数传递的方式有两种,一种是通过寄存器传递参数,C51中不同类型的实参会存入相应的寄存器,在汇编中只需对相应寄存器进行操作,即可达到传递参数的目的;第二种是通过固定存储区传递。

3.简述嵌入式汇编的实现方法。

答:在C51程序中嵌入汇编程序通常的处理方法如下。 第一步:在C文件中以如下方式嵌入汇编程序。

第二步:在Keil C51软件的Project 窗口右击嵌入汇编程序的C文件,在弹出的快捷菜单中选择Options for ...命令,选中右边的Generate

Assembler SRC File和Assemble SRC File复选框,使检查框由灰色变成黑色(有效)状态。

第三步:根据选择的编译模式,把相应的库文件(如 Small 模式时,是 Keil\\C51\\Lib\\C51S.Lib)加入到工程中,该文件必须作为工程的最后文件。

4.简述C51中调用汇编程序的实现方法。

答:编写为C51调用的汇编程序,参数须按规定的寄存器或存储器传送,程序格式有相应的规则,这些规则比较繁琐,为了便于处理,在实际中我们往往先用C51写出这个程序的主体,然后用SRC控制指令编译产生asm文件,修改这个asm文件得到我们所要的汇编函数。处理过程具体如下。

第一步:先用C语言程序编写出程序框架,如文件名为a1.c(注意参数)。 第二步:在Keil C51的Project窗口中右击该C语言文件,在弹出的快捷菜单中选择Options for ...,右边的Generate Assembler SRCFile和Assemble SRC File,使检查框由灰色变成黑色(有效)状态;

第三步:根据选择的编译模式,把相应的库文件(如Small模式时,是Keil\\C51\\Lib\\ C51S.Lib)加入工程中,该文件必须作为工程的最后文件。库文件与编译模式的关系如前面。

第四步:编译后将会产生一个SRC的文件,将这个文件扩展名改为ASM。这样就形成了可供C51程序调用的汇编程序。随后可在该文件的代码段中加入所需的指令代码。

第五步:将该汇编程序与调用它的主程序一起加到工程文件中,这时工程文件中不再需要原来的C语言文件和库文件,主程序只需要在程序开始处用EXTERN对所调用的汇编程序中的函数作声明,在主程序中就可调用汇编程序中的函数了。

第六章

1. 何为“准双向I/O接口”?在MCS-51单片机的四个并口中,哪些是“准双向I/O接口”?

答:准双向I/O接口是能实现输入输出功能,但在使用时只能从输入和输出中选择一个。MCS-51单片机的四个并口中P1、P2、P3是准双向I/O接口。 2. 80C51单片机内部有几个定时/计数器?它们由哪些功能寄存器组成?怎样实现定时功能和计数功能?

答:80C51单片机内部有两个16位的可编程定时/计数器,由

TH0,TL0,TH1,TL1,TMOD和TCON功能寄存器组成。通过TMOD中的C/T位选择对机器周期计数实现计数功能,选择对外部脉冲计数实现计数功能。

3. 定时/计数器T0有几种工作方式?各自的特点是什么? 答:有四种工作方式,特点见下表: M1 0 0 1

M0 0 1 0 工作方式 方式说明 0 13位定时/计数器 1 16位定时/计数器 2 8位自动重置定时/计数器


单片机C51程序设计课后习题答案(复习专用)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:外国近现代建筑史试题库 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: