收藏 分销(赏)

单片机应用技术(C语言版)习题参考答案.pdf

上传人:快乐****生活 文档编号:2471713 上传时间:2024-05-30 格式:PDF 页数:41 大小:410.14KB
下载 相关 举报
单片机应用技术(C语言版)习题参考答案.pdf_第1页
第1页 / 共41页
单片机应用技术(C语言版)习题参考答案.pdf_第2页
第2页 / 共41页
单片机应用技术(C语言版)习题参考答案.pdf_第3页
第3页 / 共41页
单片机应用技术(C语言版)习题参考答案.pdf_第4页
第4页 / 共41页
单片机应用技术(C语言版)习题参考答案.pdf_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 1 页 单片机应用技术(C 语言版)课后习题参考答案 单片机应用技术(C 语言版)课后习题参考答案 任务任务 1 控制控制 1 只发光二极管闪烁显示只发光二极管闪烁显示 1EA脚的功能是 控制程序存储器的选择 ,单片机使用片内程序存储器时,该引脚应该 接+5V 高电平 。2单片机的 RST 引脚是 复位引脚 ,外接 复位 电路。3MCS-51 单片机有 片内数据存储器(片内 RAM)、特殊功能寄存器、扩展数据存储器 和 程序存储器 4 个存储空间。4对于标准的 MCS-51 单片机而言,idata 区是指 片内

2、RAM 地址范围为 0 x000 x7f 的区域,共 128 字节,对于增强型 MCS-51 单片机(52 单片机)而言,idata 区的地址范围为 0 x000 xff,共 256 字节。5MCS-51 单片机的 data 区位于单片机的 片内 RAM 中,地址范围为 0 x000 x7f,共 128 字节。6MCS-51 单片机有 4 组工作寄存器组,工作寄存器组区的地址范围是 0 x000 x1f,当前工作寄存器组用 R0R7 8 个寄存器表示。7若函数 display()的定义如下:void display(void)using 1 单片机在执行函数 display 时,当前工作寄存器

3、组是第 1 组工作寄存器,其中 R2 的地址是 0 x0a。8单片机执行下列程序段后,当前工作寄存器组是第 3 组工作寄存器,其中 R7 的地址是 0 x1f。RS0=1;RS1=1;9单片机执行第 8 题中的程序段后,再执行第 7 题中的 display 函数,在执行 display函数时,R7 的地址为 0 x0f,执行 display 之后,R7 的地址为 0 x1f。10 MCS-51 单片机的 bdata 区的地址范围是 0 x200 x2f,共 16 字节,128 位。bdata区的特点是 每个字节的每一位都分配有位地址,可进行位访问。11位地址 0 x08 是片内 RAM 0 x

4、21 单元的 第 0 位,属于 bdata 区。12pdata 区是 xdata 区的一部分。13单片机通过RD、WR 引脚选择扩展 RAM,通过 PSEN 引脚选择程序存储器。14 code 区是指单片机的 程序 存储区,code 区的作用是存放 程序代码和表格数据。15至少要配备 时钟 电路、复位 电路、存储器 电路和 电源 电路,单片机才能独立工作。16时钟电路的作用是 产生时钟信号,装配晶振时应该将晶振 尽可能地安装在XTAL1、XTAL2 引脚附近。17若单片机的fosc=12MHz,单片机的机器周期为 1s。18请画出单片机的时钟发生电路图。【解】时钟发生电路如下图所示:单片机应用

5、技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 2 页 19复位电路的作用是 为单片机产生复位信号,保证单片机上电后从一个确定的状态开始工作。20请画出上电复位电路和按键复位电路的电路图,并给出电路中各元件的值。【解】上电复位和按键复位电路如下图所示:21 复位后,单片机使用第 0 组工作寄存器作当前工作寄存器组,R3 的地址为 0 x03。22复位后,SP 的值为 0 x07,堆栈区为 片内 RAM0 x07 以后的区域,若不重新定义堆栈区,则第 1 个压入堆栈的数据存放的地址为 0 x08。23请画出 STC89C51 单片机的最小系统电路图。【解】STC89C51

6、 单片机的最小系统电路如下图所示:24 函数 是 C51 程序的基本单位。25C51 程序中至少有一个 main 函数。26C51 程序中,语句由 分号(;)结尾。27 C51 书写比较自由,一条语句可以 分多行 书写,也可以在一行中书写 多条 语句。28C51 程序中,注释有单行注释和多行注释两种形式,单行注释的形式是/注释,多行注释的形式是/*注释*/。29C51 程序中,标点符号要在 半角 状态录入。30Keil uVision2 中的存储模式有 Small、Compact、Large3 种模式,Small 存储模式的特点是 所有变量都定义在 data 区内 ,Compact 存储模式的

7、特点是 变量可以使用pdata 区,Large 存储模式的特点是 变量可以位于 xdata 区内。单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 3 页 31Keil uVision2 中,代码的 ROM 大小有 Small、Compact、Large3 种模式,Small模式的特点是 所有程序使用低 2KB 程序存储器空间 ,Compact 模式的特点是 单个函数的代码量不能超过 2KB,整个程序可以使用 64KB 空间,Large 模式的特点是 可以使用全部64KB 程序存储空间。32简述用 Keil uVision2 创建 Hex 文件的设置方法。【解】

8、略 33用 C51 开发单片机应用程序时,R0R7 一般不用绝对地址访问,简述在 Keil uVision2 中选择 R0R7 不采用绝对地址访问的设置方法。【解】其步骤如下:第一步:用鼠标右键单击工程管理窗口中的“Target 1”,在弹出的快捷菜单中单击“Option for Target Target 1”菜单项。第二步:在弹出的“Option for TargetTarget 1”对话框中点击“C51”标签。第三步:在“C51”标签中勾选“Dont use absolute register accesses”多选钮。单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuq

9、ing_)第 4 页 任务任务 2 显示开关量的输入状态显示开关量的输入状态 1unsigned char 型变量占 1 个字节,值域是 0255,data 区中最多只能定义 个 unsigned char 型变量。2 C51 中,16 进制数的表示方法是 以 0 x 开头的数字,与 0 x12 等值的十进制数是 18,0 x34L 是 长整型 数。3用 C51 设计单片机程序时,应尽量使用 无符号字符 型和 位 型数据,以便提高程序的运行速度。4写出下列常量和变量的定义式:值为 20 的符号常量 KTIM。无符号字符型变量 i、j。带符号整型变量 k。浮点型变量 f。有符号的长整型变量 sl

10、。位变量 mybit。定义无符号字符型变量 i、j,并给 i 赋值 3、j 赋值 4。【解】#define KTIN 20 unsigned char i,j;int k;或者 signed int k;float f;long sl;或者 signed long sl;bit mybit;unsigned char i=3,j=4;5语句“i=(j=3)+(k=4);”的含义是 求求两个赋值表达式“j=3”与“k=4”的和,并将和值赋给变量 i,语句执行后 i=7,j=3,k=4。6若有下列定义:int i=0 x1234;unsigned char j;语句“j=i;”执行后,i=0 x1

11、234,j=0 x34。7若有下列定义:int i;unsigned char j=0 x82;语句“i=j;”执行后,i=0 x0082。8若有下列定义:unsigned int i;char j=0 x82;语句“i=j;”执行后,i=0 xff82,j=0 x82。9定义下列特殊功能寄存器和特殊位:特殊功能寄存器 P0、P1、P2、P3。16 位特殊功能寄存器 RCAP2,RCAP2 的低字节地址为 0 xca,高字节地址为 0 xcb。单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 5 页 特殊功能寄存器 P0 的第 0 位 P0_0。片内 RAM0

12、x24 单元的第 4 位 down。【解】sfr P0=0 x80;sfr P1=0 x90;sfr P2=0 xa0;sfr P3=0 xb0;sfr16 RCAP2=0 xca;法一:sfr P0=0 x80;sbit P0_0=P00;法二:sbit P0_0=0 x800;法三:sbit P0_0=0 x80;/这里的 0 x80 是 P0.0 的位地址,而不是 P0 口的端口地址 法一:sbit down=0 x244;法二:sbit down=0 x24;/这里的 0 x24 为 0 x24 单元第 4 位的位地址 10P0 端口既可以作 数据/地址总线 口使用,又可以作普通 I/

13、O 端口使用。11在 单片机片外不扩展程序存储器,不扩展并行 RAM,也不扩展并行 I/O 芯片的 条件下,P0 口作普通 I/O 口使用。12P0 口作输出端口时,P0 的输出驱动级 为漏极开路电路,输出极无上拉 电阻,接拉电流负载时,需要 外接上拉电阻,接灌电流负载时,可以 不接上拉电阻。13P0 口输出具有 锁存 功能,输入具有 缓冲 功能。14设 m 为 unsigned char 型变量,mybit 为 bit 型变量,请按下列要求编写程序段:将 m 中的数据从 P0 口输出。将 mybit 中的数据从 P0.0 口线输出。将 P0.3 口线置 1。将 P0.5 口线清 0。读 P0

14、 口的输入状态,并保存至 m 中。读 P0.0 口线输入状态,并保存到 mybit 中。【解】sfr P0=0 x80;unsigned char m;P0=m;sfr P0=0 x80;sbit P0_0=P00;bit mybit;P0_0=mybit;sfr P0=0 x80;sbit P0_3=P03;P0_3=1;sfr P0=0 x80;单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 6 页 sbit P0_5=P05;P0_5=0;sfr P0=0 x80;unsigned char m;P0=0 xff;m=P0;sfr P0=0 x80;sb

15、it P0_0=P00;bit mybit;P0_0=1;mybit=P0_0;15单片机复位后,P0=0 xff。16 P0 口的每一位可以驱动 8 个 LSTTL 负载,若负载过大,则需在端口外加上 驱动 电路后才可以接负载。17若用 P0.0 口线控制一只发光二极,请画出发光二极管作拉电流负载和作灌电流负载时的电路图。【解】发光二极管作拉电流负载和作灌电流负载时的电路图如下:(a)拉电流负载 (b)灌电流负载 18P1 口输出具有 锁存 功能,能驱动 4 个 LSTTL 负载,输入具有 缓冲 功能,复位后,特殊功寄存器 P1=0 xff。19P1 口输出驱动级内部接有 上接电阻,接拉电流

16、负载时,可以 不接上拉电阻。20设 m 为 unsigned char 型变量,mybit 为 bit 型变量,请按下列要求编写程序段:将 m 中的数据从 P1 口输出。将 mybit 中的数据从 P1.2 口线输出。将 P1.5 口线置 1。将 P1.0 口线清 0。读 P1 口的输入状态,并保存至 m 中。读 P1.7 口线输入状态,并保存到 mybit 中。【解】sfr P1=0 x90;unsigned char m;P1=m;sfr P1=0 x90;sbit P1_2=P12;bit mybit;单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 7

17、页 P1_2=mybit;sfr P1=0 x90;sbit P1_5=P15;P1_5=1;sfr P1=0 x90;sbit P1_0=P10;P1_0=0;sfr P1=0 x90;unsigned char m;P1=0 xff;m=P1;sfr P1=0 x90;sbit P1_7=P17;bit mybit;P1_7=1;mybit=P1_7;21若 P1 口外接有 8 位拨码开关,请画出拨码开关与单片机的连接电路图。【解】拨码开关与单片机的连接电路图如下图所示。22宏定义是一种编译预处理命令,宏定义以#开头,结尾处 无分号(;),一般放在程序的 开头 处。用字符 uchar 代表

18、字符 unsigned char 的宏定义是#define unchar unsigned char。单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 8 页 任务 3 控制楼梯灯 任务 3 控制楼梯灯 1C51 中,测试等于运算符是=,测试不等于运算符是!=。2C51 中,当一个表达式中有多个运算符时,先进行 高 优先级运算,同级运算的先后顺序由 结合方向 确定,若 结合方向是从左向右,则按从左至右的顺序进行运算。3下列程序中,表达式“d=a!=bc”的求解顺序是 先求解 bc,再求解 a!=(bc),最后求解 d=(a!=(bc)。程序运行后,a=4,b=3

19、,c=2,d=1。void main(void)unsigned char a=4,b=3,c=2,d;d=a!=bc;4下列程序运行后,a=1,b=3,c=0。void main(void)unsigned char a=0,b=1,c=2;c=!(a=1)&(b=3);5设有下列程序段:a=1;b=2;c=3;/1 if(k5)/2 a=4;b=5;/3 c=6;/4 若 k=4,则执行上述程序段后,a=4,b=5,c=6。若 k=5,则执行上述程序段后,a=1,b=5,c=6。如果将第 3 句改为 a=4;b=5;,当 k=4 时,上述程序段执行后,a=4,b=5,c=6。当 k=5 时

20、,上述程序段执行后,a=1,b=2,c=6。6请画出下列语句对应的流程图:if(表达式)语句块 1;语句块 2;if(表达式)语句块 1;else 语句块 2;语句块 3;if(表达式 1)语句块 1;else if(表达式 2)语句块 2;else 语句块 3;语句块 4;【解】它们的流程图如下图所示:单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 9 页 7单片机在 片外不扩展程序存储器,不扩展并行 RAM,也不扩展并行 I/O 芯片的 情况下,P2 口可作为普通的 I/O 口使用。8P2 口作普通 I/O 口使用时,输出具有 锁存 功能,输入具有 缓冲

21、功能。9P2 口的输出锁存器是 特殊功能寄存器 P2,输出驱动级内部 有 上拉电阻,P2 口的每一位端口可以驱动 4 个 LSTTL 负载,复位时,特殊功能寄存器 P2=0 xff。10设 m 为 unsigned char 型变量,mybit 为 bit 型变量,请按下列要求编写程序段:从 P2 口输出数据 0 x5a。将 mybit 中的数据从 P2.6 口线输出。将 P2.2 口线置 1。将 P2.4 口线清 0。读 P2 口的输入状态,并保存至 m 中。读 P2.7 口线的输入状态,并保存到 mybit 中。【解】sfr P2=0 xa0;P2=0 x5a;sfr P2=0 xa0;s

22、bit P2_6=P26;bit mybit;P2_6=mybit;sfr P2=0 xa0;sbit P2_2=P22;P2_2=1;sfr P2=0 xa0;sbit P2_4=P24;P2_4=0;sfr P2=0 xa0;unsigned char m;P2=0 xff;m=P2;sfr P2=0 xa0;sbit P2_7=P27;bit mybit;P2_7=1;mybit=P2_7;11 单片机片外扩展并行 I/O 芯片时,P2 口只能作 地址总线 口使用,不能作 普通 I/O 口使用,此时,P2 口输出的是 高 8 位地址 A15A8 。单片机应用技术(C 语言版)习题参考答案

23、 作者:李文华(lizhuqing_)第 10 页 12P3 口是双功能 I/O 口,在 端口线上的第二功能没有启用的 情况下,P3 口的端口线才能作普通的 I/O 口使用。13打开了外部中断 0 后,P3.2 口线 不能 作普通 I/O 口,定时/计数器 T0 处于定时状态时,P3.4 口线 可以 作普通 I/O 口。14P3 口作普通 I/O 口时,输出具有 锁存 功能,输入具有 缓冲 功能。15P3 口作普通 I/O 口时,输出驱动级内部 有 上拉电阻,P3 口的每一位端口可以驱动 4 个 LSTTL 负载。16单片机复位后,特殊功能寄存器 P3=0 xff,P3 口处于 第一功能 状态

24、。17按下列要求编写程序段:读 P3 口输入至变量 keyinput 中。读 P3.4 引脚输入至位变量 setport 中。将 P3.5 置 1。【解】sfr P3=0 xb0;unsigned char keyinput;P3=0 xff;keyinput=P3;sfr P3=0 xb0;sbit P3_4=P34;bit setport;P3_4=1;setport=P3_4;sfr P3=0 xb0;sbit P3_5=P35;P3_5=1;18请画出在 P3.0 端口接一只开关的输入电路。【解】P3.0 端口接一只开关的输入电路如下:19在图 2-8 中,能否省去电阻 R3、R4?为

25、什么?能否省去电阻 R2?为什么?【解】可以省去 R3、R4。因为 P2 口的输出驱动级内接有上拉电阻。不能省去 R2。电路中,R2 起限流作用,省去 R2 后,当 P3.5 输出低电平时,会出现流经 D0 的电流很大,从而导致烧毁 D0。20#include 的作用是 将特殊功能寄存器定义头文件 reg51.h 包含至当前程序文件中来,一般放在程序的 开头 处。单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 11 页 任务 4 制作跑马灯 任务 4 制作跑马灯 1%是 取余 运算符,要求运算符两边的数据必须是 字符型 型数据或者是 整 型数据。210%4=2

26、 ,10/3=3 。3表达式 if(a%2!=0)可以判断变量 a 是否为奇数。4下列程序段运行后,i=6 ,j=6 ,k=5 ,m=5 。unsigned char i=5,j,k,m;j=i+;k=+j;m=-k;5逻辑与运算符是&,按位与运算符是&,逻辑或运算符是|,按位或运算符是|,逻辑非运算符是!,按位反运算符是 。6设 m 为无符号字符型变量,m=0 x5a,求下列表达式的值:!m m&0 x40 m&0 x40 m m|0 x45 m|0 x45 m0 x45 mm m2 m2 0 x16 m3 0 xd0 7设 m 为无符号字符型变量,用按位操作运算实现以下要求,请写出程序段:

27、将 m 的第 3、5 位清 0,其他位不变 将 m 的第 0、4 位置 1,其他位不变 将 m 的第 1、3 位取反,其他位不变 将 m 清 0 将 m 循环左移 3 位 将 m 循环右移 2 位 将 m 的高低 4 位分离,高 4 位数存入变量 n 中,低 4 位存入 m 中。将 m 的低 4 位与 n 的低 4 位合并成一个数存入 m 中,合并数的高 4 位是 n 中的低 4位数。m 除以 8 m43,求 6m【解】m=m&0 xd7;m=m|0 x11;m=m0 x0a;m=mm;m=(m5);单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 12 页 m

28、=(m2)|(m4;m=m&0 x0f;m=(n3;m=m1;m=m+m1;8下列程序中的书写形式是否存在错误?若有错误,请更正错误。while(i5);本题无书写形式的错误,while sum=sum+i;循环的循环体是空语句,“”i+;中的语句块不是 while 的循环体 dosum=sum+i;i+;while(i5)while(i5);i=1;for(,i5,i+)for(;i5;j+)sum=sum+i;9请按下列要求编写程序:用三种循环结构求 sum=13519 用三种循环结构求 product24620 用 for 循环求 sum=1!2!3!10!【解】for 循环结构的程序如

29、下:void main(void)unsigned char sum=0,i;for(i=0;i10;i+)sum=sum+2*i+1;while 循环结构的程序如下:void main(void)unsigned char sum=0,i=0;while(i10)sum=sum+2*i+1;i+;do-while 循环结构的程序如下:void main(void)unsigned char sum=0,i=0;do sum=sum+2*i+1;i+;while(i10);单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 13 页 for 循环结构的程序如下:v

30、oid main(void)unsigned long product=1;unsigned char i=2;for(;i=20;i=i+2)product=product*i;while 循环结构的程序如下:void main(void)unsigned long product=1;unsigned char i=2;while(i=20)product=product*i;i+=2;do-while 循环结构的程序如下:void main(void)unsigned long product=1;unsigned char i=2;do product=product*i;i+=2;w

31、hile(i=20);程序代码如下:void main(void)unsigned long sum,product;unsigned char i,j;for(i=1;i=10;i+)for(product=1,j=1;j=i;j+)product=product*j;sum=sum+product;10函数_crol_()是 C51 的内嵌函数 ,若程序中使用了_crol_()函数,则需要 在程序的开头处使用“#include”将头文件 intrins.h 包含至当前程序文件中来。函数_crol_(m,2)的功能是 将无符号字符变量 m 循环左移 2 位。11在 C51 程序中嵌入汇编程序

32、时,需要在汇编程序的开头处加上 C51 编译控制命令#pragma asm,其作用是 告诉 C51 编译器汇编程序的起始位置,在汇编程序的结束处加上 C51 编译控制命令#pragma endasm,其作用是告诉 C51 编译器汇编程序的结束位置。单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 14 页 12若 C51 程序中嵌入了汇编程序代码,则需要设置 Keil C51 的编译方式,采取先生成 汇编源程序(SRC 文件)文件,再将该文件 编译 成目标文件的方式编译。13C51 程序中嵌入了汇编程序代码时,在源文件编译之前,需要将 编译模式库 文件添加至工程

33、中,并且该文件应该是工程中的 最后一个 文件,该文件位于 Keil C51 目录下的 C51lib 子目录中。14C51 程序中嵌入了汇编程序代码时,若编译模式是 small 模式,应将编译模式库文件 C51S.lib 添加至工程中。单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 15 页 任务 5 制作流水灯 任务 5 制作流水灯 1定义函数时,若函数无形式参数,则用 void 说明形式参数。2函数的标志是 园括号(),因此,无论函数是否有形式参数,它都不能省略。3函数中有多个形式参数时,各形式参数之间要用 逗号(,)间隔。4函数的返回值是用 return

34、语句 返回的,其格式是 return(表达式);,它可以返回 1 个值。5函数无返回值时,应将函数的返回值说明成 void 型,函数体中不必使用 return 语句。6 调用有参数函数时,各个实际参数之间要用 逗号(,)间隔,并且要求实际参数在 顺序、类型 和 个数 上与形式参数保持一致。7调用无参数函数时,可以省略实际参数表,但不能省略 函数名后面的园括号。8C51 规定,函数必须 先定义,才能使用函数。9主调函数与被调函数处于同一文件中时,若被调函数放在主调函数之后,则需要 在调用函数之前对函数进行说明。10设函数 max(unsigned x,unsigned char y)的返回值类型

35、是 unsigned char,max()函数位于 file2.c 文件中,file1.c 文件中的程序需要调用 max()函数,则需要在 文件的开头处对 max()函数进行说明,其说明语句为 extern unsigned char max(unsigned x,unsigned char y);,并且还需要 将被调函数所在的程序文件添加至工程中。11程序中需要调用 math.h 头文件中的 cos(x)函数,则在程序的 开头 处需要用#include 将 math.h 文件包含至程序文件中来。12请按下列要求定义变量:在片内 RAM0 x200 x2f 区域内定义无符号字符型变量 i、j。

36、在片内 RAM0 x000 x7f 区域内定义无符号整型变量 k,k 的初值为 4。在扩展 RAM 中定义长整型变量 k。在程序存储器中定义无符号字符型变量 a,a 的值为字符 L。【解】unsigned char bdata i,j;unsigned int data k=4;long xdata k;unsigned char code a=L;13在 Keil C51 中所选择的存储模式是 small,变量 a 的定义形式如下:unsigned char a;变量 a 位于 data 区。14定义数组时,数组的长度不能是 含有变量的表达式。15若有如下定义:unsigned char i

37、data a5;数组 a位于 idata 区,有 5 个元素,这些元素依次是 a0、a1、a2、a3、a4。16若有如下定义:unsigned char a=1,2,3,4,5;unsigned char b5=6,7;数组 a有 5 个元素,元素 a2的值为 3。数组 b中有 5 个元素,元素 b2的值单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 16 页 为 0。17 若 i=2,语句“ai+=5;”的功能是 将常数 5 赋给元素 a5,然后再使 i 自加 1。18查表程序的设计方法是,利用一维数组的 下标 与 元素值 之间的对应关系,将事先计算好的结果

38、依次 存放在位于 code 区中的数组中,需要结果值时,从数组中读取对应元素的值。19用查表程序计算一年 12 个月中各月的天数。设函数名为 day,二月按 28 天计算。【解】用查表程序计算一年 12 个月中各月的天数的程序如下:unsigned char code month12=31,28,31,30,31,30,31,31,30,31,30,31;unsigned char day(unsigned char m)return monthm-1;20 全局变量一般是在程序的 开头 处定义,全局变量在 其定义之后的各个函数 中都可以使用,在 函数内部或者是以大括号“”括住的功能模块 中定

39、义的变量是局部变量,局部变量只能在 所定义的函数中或者功能模块 中使用。21某程序的结构如下:unsigned char idata val;/1 /2 void func(void)/3 unsigned char idata val;/4 val=7;/5 /6 /7 void main(void)/8 val=5;/9 /10 /11 程序中,第 1 行定义的变量是 全局 变量,第 4 行定义的变量是 局部 变量。第 5 行的功能是对 局部 变量 val 赋值 7,第 9 行的功能是对 全局 变量 val 赋值 5。22 字符常量是用 单撇号 括起来的一个字符,字符串是用 双撇号 括起来

40、的一串字符,字符串中除了包含字符外,还包含一个 串结束标志符(null)。23字符在内存中存放时,存放的是 字符的 ASCII 码,其实质是 存放二进制数。24C51 程序中,若数组中各元素的值均小于 256,一般是将数组定义成 字符型 数组。25数组 a的定义如下,请按下列要求编写程序:unsigned char idata a10=5,3,7,12,48,0,7,31,24,10;求数组 a中各元素的平均值,并存入变量 average 中。查找数组中的最大值,并将最大值元素的编号存入变量 num 中,最大值存入变量 max中。将数组中各元素倒序排列,即 a0中存放最后一个元素的值 10,a

41、1中存放倒数第二个元素的值 24,最后一个元素存放首元素的值 5。将数组中的数按由小到大的顺序排列。【解】求数组中各元素的平均值,可先用循环结构求各元素之和,然后用和值除以元素的个数。求平均值的流程图如下:单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 17 页 开始i10初始化:sum=0,i=0sum=sum+aii+average=sum/10结束YN 图中,sum 为各元素之和,本题中,10 个元数之和小于 256。因此 sum 可定义为无符号字符型变量。average、i 分别为平均值和循环计数器,它们均为无符号字符型变量。本题的程序代码如下:#de

42、fine uchar unsigned char void main(void)uchar idata a10=5,3,7,12,48,0,7,31,24,10;uchar idata i,sum=0,average;for(i=0;i10;i+)sum=sum+ai;average=sum/10;查找数组中元素的最大值的方法是,引入一个变量 max,其初值为数组中首元素的值。即 max=a0,然后将 max 与数组中各元素的值进行比较,若maxai,则将元素ai的值赋给max,以保证 max 的值始终是已比较过的元素中的最大值,直至遍历完数组中的所有元素。查找最大值的流程图如图所示。查找最大

43、值的程序代码如下:#define uchar unsigned char void main(void)uchar idata a10=5,3,7,12,48,0,7,31,24,10;uchar idata i,num,max;num=0;max=a0;for(i=1;imax)max=ai;num=i;查找最大值流程图 单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 18 页 程序运行的结果如下图所示:题 5-25-1 程序运行结果 数组中的元素为 2n 个时,这 2n 个元素的下标为 0n-1(共 n 个)、n2n-1(共 n 个),中间元素有 2 个,

44、其下标分别为 n-1、n。数组中的元素为 2n+1 个时,这 2n+1 个元素的下标分别为 0n-1(共 n 个)、n、n+12n(共 n 个),中间元素只有一个,其下标为 n。对数组 aN中的元素进行倒序排列,实现的是 a0与 aN-1互换、a1与 aN-2互换、aN/2与 aN/2+1互换(N=2n 或者 2n+1),即要实现 ai与 aN-1-i互换。其中 i=0、1、N/2-1。将 ai与 aj互换的方法是,引入一个中间变量 x,先将 ai的值赋给 x,再将 aj的值赋给 ai,最后将 x 的值(原来 ai中的值)赋给 aj。设数组 a中的元素的个数为 N,将数组 a中的各元素倒序排列

45、的流程图如下:程序代码如下:#define uchar unsigned char 单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 19 页#define N 10 void main(void)uchar idata aN=5,3,7,12,48,0,7,31,24,10;uchar idata i,x;for(i=0;iaj-1,则将 aj与 aj-1进行交换。第 1 轮比较交换的结果是,数组中最小的元素存放在 a0中。j 取 N-1 至 2,将 aj与 aj-1进行比较,若 ajaj-1,则将 aj与 aj-1进行交换。第 2 轮比较交换的结果是,a1

46、aN-1中最小的元素存放在 a1中。j 取 N-1 至 i,将 aj与 aj-1进行比较,若 ajaj-1,则将 aj与 aj-1进行交换。第 i 轮比较交换的结果是,ai aN-1中最小的元素存放在 ai中。j 取 N-1 至 N-2,将 aj与 aj-1进行比较,若 ajaj-1,则将 aj与 aj-1进行交换。第 N-1 轮比较交换的结果是,aN-2与 aN-1中最小的元素存放在 aN-2中。实现上述思路的流程图如下图所示:单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 20 页 开始ji?初始化:i=1aij与aj-1互换:x=ajaj=aj-1aj-

47、1=xi=i+1结束YNiN?YN初始化:j=N-1ajaj-1?YNj=j-1 冒泡法排序流程图 程序代码如下:#define uchar unsigned char#define N 10 void main(void)uchar idata aN=5,3,7,12,48,0,7,31,24,10;uchar idata i,j,x;for(i=1;i=i;j-)if(ajaj-1)x=aj;aj=aj-1;aj-1=x;上述程序的运行结果如下图所示。单片机应用技术(C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 21 页 题 5-25-4 程序运行结果 单片机应用技术(

48、C 语言版)习题参考答案 作者:李文华(lizhuqing_)第 22 页 任务 6 显示按键按下的次数 任务 6 显示按键按下的次数 1 MCS-51 单片机有 外部中断 0、定时/计数器 0、外部中断 1、定时/计数器 1 和 串行 I/O 中断 5 个中断源,共有 6 个中断请求标志位。2中断请求标志位的作用是 记录中断事件是否发生过,并向 CPU 提出中断请求,在 中断产生条件满足的 情况下,硬件电路会自动地 将中断请求标志位置 1。3外部中断 0 的中断请求标志位是 IE0。4使用外部中断 1 时,需要将 IE 寄存器的 EA 位和 EX0 位 置 1。5 外部中断 0 有 低电平触

49、发 和 下降沿触发 2 种触发方式,一般采用 下降沿 触发方式。6将外部中断 1 设置成下降沿触发的方法是 将特殊功能寄存器 TCON 的 IT1 位置 1,其语句是 IT1=1;。7特殊功能寄存器 IP 的功能是什么?什么样情况下可以不设置 IP?什么样的情况下必须设置 IP?为什么?【解】IP 的功能是,管理单片机的中断优先级。当系统中只开发了一个中断时,不必设置 IP,当系统中开发的中断数不止一个时,必须设置 IP 的值。因为在这种情况下存在着多个中断源同时向 CPU 请求中断服务的问题,在这种情况下,必须确定 CPU 优先响应哪个中断请求。8单片机中,高级中断 可以打断低级中断服务 而

50、形成中断嵌套,低级中断 不能打断高级中断服务 而形成中断嵌套,同级中断之间 不能 形成中断嵌套。9单片机复位后,CPU 使用第 0 组工作寄存器组,CPU 执行 main 函数时使用的是第 0 组工作寄存器组。10某应用系统中使用了 INT0、INT1、T0 三个中断,如果这 3 个中断同时向 CPU 提出中断请求时,要求 CPU 按 T0INT0INT1 的顺序响应中断请求,请写出实现这一要求的程序段。【解】要想 CPU 按 T0INT0INT1 的顺序响应中断请求,必须将 T0 设为高级中断,INT0、INT1设为低级中断。实现上述要求的程序段如下:#include PT0=1;/T0 采

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服