文档库 最新最全的文档下载
当前位置:文档库 › 单片机应用技术(c语言版 第3版)[王静霞]_习题答案

单片机应用技术(c语言版 第3版)[王静霞]_习题答案

单片机应用技术(c语言版 第3版)[王静霞]_习题答案
单片机应用技术(c语言版 第3版)[王静霞]_习题答案

习题 1

1.1 单项选择题

(1) A (2)C (3)C

1.2 填空题

(1)硬件系统、软件系统

(2)时钟电路、复位电路

(3)XTAL1、XTAL2、RESET、EA

(4)晶振

1.3 问答题

什么是单片机?它由哪几部分组成?什么是单片机应用系统?

答:单片微型计算机(Single Chip Microcomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(Central Processing Unit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。

单片机应用系统是以单片机为核心,配以输入、输出、显示等外围接口电路和控制程序,能实现一种或多种功能的实用系统。

1.4 上机操作题

(1)

参考程序:

#include //包含头文件reg51.h,定义了51单片机的专用寄存器

//函数名:delay

//函数功能:实现软件延时

//形式参数:无符号整型变量i,控制空循环的循环次数

//返回值:无

void delay(unsigned int i) //延时函数

{

unsigned int k;

for(k=0;k

}

void main() //主函数

{

while(1){

P1=0x00;

delay(20000); //调用延时函数,实际参数为20000

P1=0xff;

delay(20000); //调用延时函数,实际参数为20000

}

}

(2)

参考程序:

#include //包含头文件reg51.h,定义了51单片机的专用寄存器

//函数名:delay

//函数功能:实现软件延时

//形式参数:无符号整型变量i,控制空循环的循环次数

//返回值:无

void delay(unsigned int i) //延时函数

{

unsigned int k;

for(k=0;k

}

void main() //主函数

{

while(1){

P1=0x55;

delay(20000); //调用延时函数,实际参数为20000

P1=0xff;

delay(20000); //调用延时函数,实际参数为20000

}

}

习题 2

2.1 单项选择题

(1)C (2)A (3)A (4)A (5)A (6)D (7)C (8)A (9)A (10)C 2.2 填空题

(1)外部程序存储器、外部数据存储器、内部程序存储器、内部数据存储器

(2)程序存储器

(3)工作寄存器组、位寻址区、用户RAM

(4)1us、2us

(5)按键复位、上电复位

(6)2、高

2.3 回答题

(1)P3口的第二功能是什么?

答:P3口各引脚的第二功能如下表。

P3.7 RD外部RAM或外部I/O读选通

(2)画出单片机时钟电路,并指出石英晶体和电容的取值范围。

答:单片机时钟电路单片机时钟电路如下图。

一般地,电容C1和C2取30 pF左右;晶体振荡器,简称晶振,频率范围是1.2~12 MHz。晶体振荡频率越高,系统的时钟频率也越高,单片机的运行速度也就越快。在通常情况下,使用振荡频率为6 MHz或12 MHz的晶振。如果系统中使用了单片机的串行口通信,则一般采用振荡频率为11.0592 MHz的晶振。

(3)什么是机器周期?机器周期和晶振频率有何关系?当晶振频率为6MHz时,机器周期是多少?答:

51单片机采用定时控制方式,有固定的机器周期。规定一个机器周期的宽度为6个状态,即12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。

当晶振频率为6MHz时,机器周期是2us。

(4)51单片机常用的复位方法有几种?画电路图并说明其工作原理。

答:2种,上电复位和按键复位。单片机常见的复位电路下图所示。

(a)为上电复位电路。它利用电容充电来实现复位,在接电瞬间,RST端的电位与V CC相同,随着充电电流的减少,RST的电位逐渐下降。只要保证RST为高电平的时间大于两个机器周期,便能正常复位。

(b)为按键复位电路。该电路除具有上电复位功能外,还可以按图2.5(b)中的RESET键实现复位,此时电源V CC经两个电阻分压,在RST端产生一个复位高电平。图1.23中的信号灯控制电路就采用按键复位电路。

(5)51单片机片内RAM的组成是如何划分的?各有什么功能?

答:8051的内部RAM共有256个单元,通常把这256个单元按其功能划分为两部分:低128单元(单元地址0x00~0x7F)和高128单元(单元地址0x80~0xFF)。

片内RAM的低128个单元用于存放程序执行过程中的各种变量和临时数据,称为DATA区。内部RAM 的高128单元地址为0x80~0xFF,是供给专用寄存器SFR(Special Function Register,也称为特殊功能寄

存器)使用的。

(6)51单片机有多少个特殊功能寄存器?它们分布在什么地址范围?

答:51单片机有21个可寻址的专用寄存器,它们不连续地分布在片内RAM的高128单元中,尽管其中还有许多空闲地址,但用户不能使用。另外还有一个不可寻址的专用寄存器,即程序计数器PC,它不占据RAM单元,在物理上是独立的。

(7)简述程序状态寄存器PSW各位的含义,单片机如何确定和改变当前的工作寄存器组。

答:程序状态字PSW是一个8位寄存器,用于存放程序运行中的各种状态信息。PSW的各位定义如下表所示。

CY(PSW.7):进位标志位。存放算术运算的进位标志。

AC(PSW.6):辅助进位标志位。存放算术运算中低4位向高4位进位或借位。

F0(PSW.5):用户标志位。供用户定义的标志位,需要利用软件方法置位或复位。

RS1和RS0(PSW.4,PSW.3):工作寄存器组选择位。上电或复位后,RS1 RS0=00。

OV(PSW.2):溢出标志位。存放带符号数加减运算的溢出位。

F1(PSW.1):保留未使用。

P(PSW.0):奇偶标志位。存放累加器ACC数据的二进制形式中1的个数的奇偶性。一般用于异步串行通信中的奇偶校验。

(8)C51编译器支持的存储器类型有哪些?

答:单片机的存储器结构包括4个物理存储空间,C51编译器对这4个物理存储空间都能支持。常见的C51编译器支持的存储器类型如下表所示。

(9)当单片机外部扩展RAM和ROM时,P0口和P2口各起什么作用?

答:P0口可以分时复用作为8位数据总线和低8位地址线,P2口作为高8位地址线。

(10)在单片机的C语言程序设计中,如何使用SFR和可寻址位?

答:采用sfr和sbit来定义专用寄存器和位。

2.4 上机操作题

(1)修改程序ex2_1.c,使得蜂鸣器发出有变化的报警声。

提示:修改延时参数,声音就会有改变。

(2)利用单片机控制蜂鸣器和发光二极管,设计一个声光报警系统。

提示:增加一个LED发光二极管,采用一个I/O口来控制,当报警时,发出声音的同时,灯也闪动。

(3)利用单片机控制按键和发光二极管,设计一个单键控制单灯亮灭的系统。

参考电路如下图:

参考程序如下:

//功能:单键控制单灯程序

#include

sbit P1_0=P1^0; //定义P1.0引脚名称为P1_0

sbit P3_0=P3^0; //定义P3.0引脚名称为P3_0

void main() //主函数

{

bit led; //定义位变量led

P3_0=1; //P3.0作为输入口,置1

led=P3_0; //读P3.0

if(led==1) P1_0=1; //判断按键是否按下,没有按下,灯熄灭

if()led==0 P1_0=0; //按键按下,灯点亮

}

(4)利用单片机控制4个按键和4个发光二极管,设计一个4人抢答器,要求当有某一参赛者首先按下抢答开关时,相应的LED灯亮,此时抢答器不再接受其他输入信号,需按复位按键才能重新开始抢答。

参考电路如下图。

参考程序如下。

//功能:实用4路抢答器程序

#include

sbit P3_0=P3^0; //定义P3.0引脚名称为P3_0

sbit P3_1=P3^1; //定义P3.1引脚名称为P3_1

sbit P3_2=P3^2; //定义P3.2引脚名称为P3_2

sbit P3_3=P3^3; //定义P3.3引脚名称为P3_3

void main() //主函数

{

bit flag; //定义位变量flag

while(!flag)

{

if(!P3_0)

{

P1=0xfe;

flag=1;

}

else if(!P3_1)

{

P1=0xfd;

flag=1;

}

else if(!P3_2)

{

P1=0xfb;

flag=1;

}

else if(!P3_3)

{

P1=0xf7;

flag=1;

}

while(flag);

}

}

习题 3

3.1 单项选择题

(1)C (2)A (3)A (4)D (5)D (6)D (7)A (8)B (9)C (10)A (11)void delay (unsigned int i)、delay、delay

3.2 填空题

(1)main (2)sbit FLAG=P3^1; (3)sfr (4)顺序、选择和循环

(5)表达式和分号(6)if、switch (7)do-while语句、while语句(8)无限次(9)10000 (10)unsigned char

(11)指定该变量在51单片机硬件系统中所使用的存储区域,并在编译时准确的定位。

(12)’\0’

3.3 上机操作题

(1)感应灯控制系统设计。实现当照明灯感应到有人接近时自动开灯,当人离开后自动关灯的功能。

提示:采用热释电红外传感器模块和发光二极管模拟电灯

(2)自动滑动门开关控制系统设计。实现当滑动玻璃门感应到有人接近时自动开门,当人离开后自动关门的功能。

提示:采用热释电红外传感器模块和电机模拟自动开关门

习题 4

4.1 单项选择题

(1)C (2)A (3)C (4)B (5)B (6)D (7)B

(8)C(9)D (10)D (11)C

4.2 填空题

(1)led[k] delay(); (2)’\0’(3)程序存储器

4.3 在任务10的图4.1中,如果直接将共阳极数码管换成共阴极数码管,能否正常显示?为什么?应采取什么措施?

答:

不能正常显示。因为共阳极数码管和共阴极数码管的显示码不同,二者是反相关系。修改程序,或者将显示码数组disp中的显示码换成共阴极显示码,或者在程序中增加取反操作即可。

4.4 七段LED静态显示和动态显示在硬件连接上分别具有什么特点,实际设计时应如何选择使用?

答:

静态显示是指使用数码管显示字符时,数码管的公共端恒定接地(共阴极)或+5 V电源(共阳极)。将每个数码管的8个段控制引脚分别与单片机的一个8位I/O端口相连。只要I/O端口有显示字型码输出,数码管就显示给定字符,并保持不变,直到I/O端口输出新的段码。数码管动态显示电路通常是将所有数码管的8个显示段分别并联起来,仅用一个并行I/O端口控制,称为“段选端”。各位数码管的公共端,称为“位选端”,由另一个I/O端口控制。

实际应用时,当显示位数少于2位时,可以采用静态显示方式;当显示位数较多时,建议采用动态显示方式。

4.5 LED大屏幕显示一次能点亮多少行?显示的原理是怎样的?

答:

LED大屏幕显示一次能点亮1行,采用逐行点亮的方式。

显示原理:先给第1行送高电平(行高电平有效),同时给8列送该行显示码(列低电平有效);然后给第2行送高电平,同时给8列送显示码,……最后给第8行送高电平,同时给8列显示码。每行点亮延时时间为约1 ms,第8行结束后再从第1行开始循环显示。利用视觉驻留现象,人们看到的就是一个稳定的字符。

4.6 机械式按键组成的键盘,应如何消除按键抖动?

答:

按键的机械抖动可采用硬件电路来消除,也可以采用软件方法进行去抖。软件去抖编程思路:在检测到有键按下时,先执行10 ms左右的延时程序,然后再重新检测该键是否仍然按下,以确认该键按下不是因抖动引起的。同理,在检测到该键释放时,也采用先延时再判断的方法消除抖动的影响。

4.7 独立式按键和矩阵式按键分别具有什么特点?适用于什么场合?

答:

在单片机应用系统中,如果系统需要按键数量较少,一般采用独立式按键接口,每个按键单独占用一根I/O端口线,按键的工作不会影响其他I/O端口线的状态,独立式按键的电路配置灵活,软件结构简单,但每个按键必须占用一根I/O端口线,因此,在按键较多时,I/O端口线浪费较大,不宜采用。

为了节约单片机硬件接口资源,当系统需要按键数量较多时,一般采用矩阵键盘接口方式。由4根行线和4根列线组成,例如:P0.0~P0.3控制行线,P2.0~P2.3控制列线,按键位于行、列线的交叉点上,且行线通过上拉电阻接到+5 V电源上,构成了一个4×4(16个按键)的矩阵式键盘。

习题 5

5.1 单项选择题

(1)C (2)A (3)D (4)A (5)A (6)B (7)A (8)A (9)C

(10)A (11)C (12)C (13)C (14)D

5.2 填空题

(1)T0、T1、方式寄存器TMOD和控制寄存器TCON (2)GA TE=0

(3)0x50 (4)设置定时器的工作方式

(5)控制定时器的启动、停止、标识定时器的溢出和中断情况

(6)中断标志寄存器TCON、串行口控制寄存器SCON、中断允许控制寄存器IE和中断优先级控制寄存器IP

(7)中断标志寄存器TCON和串行口控制寄存器SCON、中断允许控制寄存器IE和中断优先级控制寄存器IP

(8)电平触发方式(9)软件方法、硬件方法、硬软结合(10)0

5.3 问答题

(1)51单片机定时/计数器的定时功能和计数功能有什么不同?分别应用在什么场合?

答:

T0或T1用做计数器时,分别对从芯片引脚T0(P3.4)或T1(P3.5)上输入的脉冲进行计数,外部脉冲的下降沿将触发计数,每输入一个脉冲,加法计数器加1。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间都在一个机器周期以上。一般用于需要计数的场合,对时间没有要求。

用做定时器时,对内部机器周期脉冲进行计数,由于机器周期是固定值,故计数值确定时,定时时间也随之确定。如果51单片机系统采用12MHz晶振,则计数周期为:T机器周期=1/(12×106 /12)=1 s,这是最短的定时周期。适当选择定时器的初值可获取各种定时时间。一般用于对时间有要求的场合。

(2)软件定时与硬件定时的原理有何异同?

答:

软件定时是靠CPU运行空操作实现的,CPU在定时时不能进行其它操作,白白占用CPU时间。硬件定时是指采用单片机内部定时器实现定时,当定时器进行计数操作时,CPU可以进行其它操作。

(3)51单片机的定时/计数器是增1计数器还是减1计数器?增1和减1计数器在计数和计算计数初值时有什么不同?

答:51单片机的定时/计数器是增1计数器。

增1计数器是在初值基础上加1计数,直到翻转;减1计数器是在初值基础上减1计数,直到翻转。

计算初值时,增1计数的初值需要用最大计数值(模值)减去计数值;减1计数的初值就是计数值。

(4)当定时/计数器在工作方式1下,晶振频率为6 MHz,请计算最短定时时间和最长定时时间各是多少?

答:工作方式1的计数模值是65536,机器周期2us,所以最短定时时间为2us,最长定时时间为:2us*65536=130ms。

(5)51单片机定时/计数器四种工作方式的特点有哪些?如何进行选择和设定?

答:工作方式0是13位定时计数器,工作方式1是16位定时计数器,工作方式2是初值自动重载的8位定时计数器,工作方式3下只有T0可以设置为工作方式3,T1设置为工作方式3后不工作。

可根据应用场合和定时时间来确定工作方式,在TMOD寄存器中设定。

(6)什么叫中断?中断有什么特点?

答:

中断是指通过硬件来改变CPU的运行方向。计算机在执行程序的过程中,外部设备向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。

中断特点:同步工作、实时处理、异常处理等。

(7)51单片机有哪几个中断源?如何设定它们的优先级?

答:

中断源有5个,分别为外部中断0请求、外部中断1请求、T0溢出中断请求TF0、T1溢出中断请求TF1和串行口中断请求RI或TI。

51单片机有两个中断优先级:高优先级和低优先级。

每个中断源都可以通过设置中断优先级寄存器IP确定为高优先级中断或低优先级中断,实现二级嵌套。同一优先级别的中断源可能不止一个,因此,也需要进行优先权排队。同一优先级别的中断源采用自然优先级。中断优先级寄存器IP,用于锁存各中断源优先级控制位。IP中的每一位均可由软件来置1或清零,1表示高优先级,0表示低优先级。

(8)外部中断有哪两种触发方式?如何选择和设定?

答:

外部中断有电平触发方式和下降沿触发方式。由TCON中的IT位设定,例如:

当IT1 = 0时,外部中断1控制为电平触发方式;当IT1 = 1时,外部中断1控制为边沿(下降沿)触发方式。

(9)中断函数的定义形式是怎样的?

答:

C51编译器支持在C源程序中直接以函数形式编写中断服务程序。中断函数的定义形式如下:void 函数名()interrupt n

其中n为中断类型号,C51编译器允许0~31个中断,n的取值范围为0~31。

5.4 操作题

(1)设计时间间隔为1 s的流水灯控制程序。

参考程序如下:

//功能:间隔显示时间为1秒的流水灯程序

#include "REG51.H" //包含头文件REG51.H,定义了MCS-51单片机的特殊功能寄存器

//函数名:delay1s

//函数功能:用T1工作在方式1下的1秒延时函数,采用查询方式实现

//形式参数:无

//返回值:无

void delay1s()

{

unsigned char i;

for(i=0;i<0x14;i++){ //设置20次循环次数

TH1=0x3c; //设置定时器初值为3CB0H

TL1=0xb0;

TR1=1; //启动T1

while(!TF1); //查询计数是否溢出,即定时50ms时间到,TF1=1

TF1=0; //50ms定时时间到,将T1溢出标志位TF1清零

}

}

void main() //主函数

{

unsigned char i,w;

TMOD=0x10; //设置T1为工作方式1

while(1){

w=0x01; //显示码初值为01H

for(i=0;i<8;i++){

P1=~w; //w取反后送P1口,点亮相应LED灯

w<<=1; //点亮灯的位置移动

delay1s(); //调用1秒延时函数

}

}

}

(2)用单片机控制8个LED发光二极管,要求8个发光二极管按照BCD码格式循环显示00~59,时间间隔为1 s。

提示:

BCD(Binary Coded Decimal)码是用二进制数形式表示十进制数,例如十进制数45,其BCD码形式为0x45。BCD码只是一种表示形式,与其数值没有关系。

BCD码用4位二进制数表示一位十进制数,这4位二进制数的权为8421,所以BCD码又称为8421码。用4位二进制数表示一个十进制数,例如十进制数56、87和143的BCD码表示形式如下:0101 0110 (56)

1000 0111 (87)

0001 0100 0011 (143)

答:

参考程序如下:

//功能:采用BCD码格式显示的0~59简易秒表程序

#include

void delay1s() //1秒延时函数,参见任务7程序ex4_1.c

void main()

{

unsigned char i, t;

TMOD=0x10; // 置T1为工作方式1

while(1)

{

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

{

t=(((i/10)<<4)|(i%10));// 将i转换为BCD码

P1=~t; // 计数值取反后送P1口显示

delay1s(); // 调用1秒延时函数

}

}

}

(3)可控霓虹灯设计。系统包括8个发光二极管,连接在P3.2引脚的一个按键,通过按键改变霓虹灯的显示方式。要求正常情况下8个霓虹灯依次顺序点亮,循环显示,时间间隔为1 s。按键按下后8个霓虹灯同时亮灭一次,时间间隔为0.5s。(按键动作采用外部中断0实现)。

答:

参考程序如下:

//功能:可控信号灯程序

#include

//函数名:delay0_5s

//函数功能:用T0的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,定

// 时器1、工作方式1定时50ms,再循环10次即可定时到0.5秒

//形式参数:无

//返回值:无

void delay0_5s()

{

unsigned char i;

for(i=0;i<0x0a;i++) // 设置10次循环次数

{

TH0=0x3c; // 设置定时器初值

TL0=0xb0;

TR0=1; // 启动T0

while(!TF0); // 查询计数是否溢出,即定时50ms时间到,TF0=0

TF0=0; // 50ms定时时间到,将定时器溢出标志位TF0清零

}

}

//函数名:delay_t

//函数功能:实现0.5秒~128秒延时

//形式参数:unsigned char t;

// 延时时间为0.5秒×t

//返回值:无

void delay_t(unsigned char t)

{

unsigned char i;

for(i=0;i

}

//函数名:int_0

//函数功能:外部中断0中断函数,当CPU响应外部中断0的中断请求时,自动执行该

// 函数,实现八个信号灯闪烁

//形式参数:无

//返回值:无

void int_0() interrupt 0 //外部中断0的中断号为0

{

P1=0x00; //熄灭八个信号灯

delay0_5s(); //调用0.5秒延时函数

P1=0xff; //点亮八个信号灯

delay0_5s(); //调用0.5秒延时函数

}

void main() //主函数

{

unsigned char i,w;

EA=1; // 打开中断总允许位

EX0=1; // 打开外部中断0允许位

IT0=1; // 设置外部中断为边沿(下降沿)触发方式

TMOD=0x01; // 设置T0为工作方式1

while(1){

w=0x01; // 显示码初值为01H

for(i=0;i<8;i++){

P1=~w; // w取反后送P1口,点亮相应LED灯

w<<=1; // 点亮灯的位置移动

delay_t(2); // 调用延时函数delay_t(),实际参数为2,延时1秒 }

}

}

习题 6

6.1 单项选择题

(1)A (2)B (3)D (4)C (5)B (6)C (7)B (8)C

(9)C (10)A (11)C (12)D (13)A

6.2 问答题

(1)什么是串行异步通信?有哪几种帧格式?

答:

在异步通信中,数据通常是以字符为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送,每一帧数据是低位在前,高位在后,通过传输线由接收端一帧一帧地接收。发送端和接收端分别使用各自独立的时钟来控制数据的发送和接收,这两个时钟彼此独立,互不同步。

在串行通信中,两相邻字符帧之间可以没有空闲位,也可以有若干空闲位,这由用户来决定。

(2)定时器T1做串行口波特率发生器时,为什么采用工作方式2?

答:

实际上,当定时器T1做波特率发生器使用时,通常是工作在定时器的模式2下,即作为一个自动重装载的8位定时器,TL1做计数用,自动重装载的值在TH1内。

7.3 编程题

(1)利用串行口设计4位静态LED显示,画出电路图并编写程序,要求4位LED每隔1 s交替显示“1234”和“5678”。

参考电路在教材第207页图6.16的基础之上再添加两片74LS164和两个数码管即可。

参考程序如下:

#include "reg51.h" //包含头文件reg51.h,定义51单片机的专用寄存器

unsigned char da[]={0xF9,0xA4,0xB0,0x99}; //定义1~4的共阳极字型显示码

unsigned char da1[]={0x92,0x82,0x0F8,0x80}; //定义5~8的共阳极字型

void delay1s()

{

unsigned char i;

for(i=0;i<0x20;i++) // 设置20次循环次数

{

TH0=0x3c; // 设置定时器初值

TL0=0xb0;

TR0=1; // 启动T0

while(!TF0); // 查询计数是否溢出,即定时50ms时间到,TF0=0

TF0=0; // 50ms定时时间到,将定时器溢出标志位TF0清零

}

}

main()

{

unsigned char i;

P1=0xff; //P1.0置1,允许串行移位

SCON=0x00; //设串行口方式0

TMOD=0x01; // 设置T0为工作方式1

while(1){

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

{

SBUF=da[i]; //送显示数据1234

TI=0;

while(!TI); //等待发送完毕

}

delay1s();

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

{

SBUF=da1[i]; //送显示数据5678

TI=0;

while(!TI); //等待发送完毕

}

}

}

(2)编程实现甲乙两个单片机进行点对点通信,甲机每隔1 s发送一次“A”字符,乙机接收到以后,在LCD上能够显示出来。

参考电路图略。

参考程序如下:

甲机发送程序:

//功能:甲机发送数据程序,采用查询方式实现

#include //包含头文件reg51.h,定义51单片机的专用寄存器

void main() //主函数

{

unsigned char i;

TMOD=0x20; //定时器T1工作于方式2

TL1=0xf4; //波特率为2400bps

TH1=0xf4;

TR1=1;

while(1)

SCON=0x40; //定义串行口工作于方式1

SBUF=0x41; // 发送A

while(TI==0); // 查询等待发送是否完成

TI=0; // 发送完成,TI由软件清0

delay1s(); //1秒延时函数参见7.3(1)题

}

}

乙机接收程序略。

(3)编写一个实用的串行通信测试软件,其功能为:将PC机键盘的输入数据发送给单片机,单片机收到PC机发来的数据后,回送同一数据给PC机,并在屏幕上显示出来。只要屏幕上显示的字符与所键入的字符相同,说明二者之间的通信正常。

通信协议:第1字节,最高位(MSB)为1,为第1字节标志;第2字节,MSB为0,为非第1字节标志,依次类推,最后1字节为前几字节后7位的异或校验和。

单片机串行口工作在方式1,晶振为11.0592 MHz,波特率为4800 bps。

通信程序略。

习题7

7.1 单项选择题

(1)D (2)A (3)C (4)D (5)A

7.2 填空题

(1)模拟,数字,数字,模拟

(2)分辨率、建立时间

7.3 问答题

(1)判断A/D转换是否结束,一般可采用几种方式?每种方式有何特点?

答:

查询方式,CPU通过查询转换结束标志位确认转换结束后,再执行后面的操作,占用CPU时间;

中断方式,转换结束后向CPU申请中断,CPU在中断服务函数中读取转换值,不占用CPU时间;

延时方式,如果知道A/D转换时间,可以在转换开始后直接延时超过该时间的时间,占用CPU 时间。

7.4 应用题

(1)设计一个锯齿波发生器系统。

提示:程序ex7_3.c中修改数组sin据即可。

(2)EEPROM芯片A T24C02采用的也是I2C总线接口,请设计51单片机扩展EEPROM的软硬件系统。

提示:请查阅A T24C02资料,参考电路(AT24C01)

//功能:EEPROM读写程序,从AT24C01的4个连续存储单元中读出4个字节的数据,然后将4

// 个新的数值写入AT24C01的对应4个存储单元中,再重新读出。

#include

#include //_nop_()函数所在的头文件

/******************************位定义及预定义*******************************/

#define AddWr 0xa0 //器件地址选择及写数据地址0xa0

#define AddRd 0xa1 //器件地址选择及读数据地址0xa1

sbit SDA= P3^4; //串行数据输入/输出位定义

sbit SCL= P3^3; //串行时钟位定义

bit ack_bit; //应答标志

/******************************函数声明************************************/

void mDelay(unsigned char ms); //延时函数声明

void Start(void); //开始函数

void Stop(void); //停止函数

void Ack(void); //应答函数

void NoAck(void); //反向应答函数

void Shout(unsigned char Data); //串行输出数据函数

unsigned char Shin(void); //串行输入数据函数

void WrByte(unsigned char Data[],unsigned char Address,unsigned char Num);

//写字节函数

void RdRadom(unsigned char Data[],unsigned char Address,unsigned char Num);

//随机地址读函数

/******************************主函数************************************/ void main()

{

unsigned char R1data[4]= {0,0,0,0}; //初始化读数据数组1为全0 unsigned char R2data[4]= {0,0,0,0}; //初始化读数据数组2为全0 unsigned char Wdata[4]={1,2,3,4}; //初始化写数据数组

RdRadom(R1data,4,4); //读AT24C01中的4个字节数据到读数据数组1 WrByte(Wdata,4,4); //将初始化后的数值写入AT24C01 mDelay(20);

RdRadom(R2data,4,4); //重新读出写入的数据到读数据数组2

}

/******************************写字节************************************/

//函数名:WrByte

//函数功能:向AT24C**器件的指定地址按字节连续写入数据

//形式参数:待写入的数据Data[],起始地址Address,待写入的字节数Num

//返回值:返回为0表示操作成功,否则操作有误

void WrByte(unsigned char Data[],unsigned char Address,unsigned char Num) {

unsigned char i;

unsigned char *PData;

PData=Data;

for(i=0;i

{

Start(); //发送启动信号

Shout(AddWr); //发送写操作器件地址AddWr,0xa0

Ack(); //接收ACK应答

Shout(Address+i); //发送地址

Ack(); //接收ACK应答

Shout(*(PData+i)); //发送待写入的数据

Ack(); //接收ACK应答

Stop(); //发送停止信号

mDelay(20); //等待内定时写入周期结束}

/*****************************随机地址读***********************************/ //函数名:RdRadom

//函数功能:从AT24C**器件的指定地址按字节读入数据

//形式参数:起始地址Address,待读入的字节数Num

//返回值:读出的字节放入data[],如果操作成功返回为0,否则操作有误

void RdRadom(unsigned char Data[],unsigned char Address,unsigned char Num) {

unsigned char i;

unsigned char *PData;

PData=Data;

for(i=0;i

{

Start(); //开始

Shout(AddWr); //发送写操作器件地址AddWr

Ack();

shout(Address+i); //发送字节地址

Ack();

Start(); //开始

shout(AddRd); //发送读操作器件地址AddRd

Ack();

*(PData+i)=shin(); //调用读数据函数

SCL=0;

NoAck(); //反向应答

Stop(); //停止

}

}

/*****************************开始函数***********************************/ //函数名: Start

//函数功能:发送START状态,定义为当SCL为高时SDA从高到低

//形式参数:无

//返回值:返回时SCL,SDA为低

void Start(void)

{

SDA=1; //升高SDA

SCL=1; //升高SCL

_nop_();_nop_();_nop_();_nop_(); //保持数据建立延迟及周期延迟

SDA=0; //降低SDA

_nop_();_nop_();_nop_();_nop_(); //保持SDA为低,保持时间hold delay SCL=0; //降低SCL

}

/********************************停止函数*********************************/ //函数名:Stop

//函数功能:发送STOP状态,定义为当SCL为高时SDA从低变高

//形式参数:无

//返回值:返回时SCL,SDA为高

void Stop(void)

{

SDA=0;

_nop_();_nop_(); //保持SCL为低及数据稳定

SCL=1;

_nop_();_nop_();_nop_();_nop_(); //保持建立延迟

SDA=1;

_nop_();_nop_();_nop_();_nop_();

}

/*******************************串行输出数据*****************************/

//函数名:Shout

//函数功能:串行发送一个字节(包括地址和数据)给AT24C**器件,高位在前

//形式参数:待发送的字节Data,调用前SCL,SDA为低,返回时SCL为低。

//返回值:无

void Shout(unsigned char Data)

{

unsigned char BitCounter=8; //设置位计数器

unsigned char temp; //中间变量控制

do

{

temp=Data;

SCL=0; //时钟为低电平

_nop_();_nop_();_nop_();_nop_();//保持SCL为低

if((temp&0x80)==0x80) SDA=1; //输出一位,如果最高位是1,则输出1到SDA

else SDA=0; //如果最高位是0,则输出0到SDA

SCL=1; //时钟为高电平

temp=Data<<1; //左移一位(高位在前)

Data=temp;

BitCounter--;

}while(BitCounter); //传送下一位

SCL=0;

}

/*******************************串行输入数据******************************/

//函数名:Shin

//函数功能:从AT24C**串行读入一个字节数据,高位在前

//形式参数:调用前SCL为低

//返回值:返回读入的字节,返回时SCL为低

unsigned char Shin(void)

{

unsigned char temp=0;

unsigned char temp1=0;

unsigned char BitCounter=8; //设置位计数器

SDA=1; //使SDA为高,准备读

do{

SCL=0; //降低时钟

_nop_();_nop_();_nop_();_nop_();//保持SCL为低且使数据稳定

SCL=1; //升高时钟

_nop_();_nop_();_nop_();_nop_();//保持SCL为高

if(SDA) temp=temp|0x01; //输入一位,如果SDA=1则temp的最低位置1

else temp=temp&0xfe; //否则temp的最低位清0

if(BitCounter-1)

{

temp1=temp<<1; //左移一位(高位在前)

temp=temp1;

}

BitCounter--;

}while(BitCounter); //传送下一位

return(temp); //返回读入的数据

}

//********************************应答**************************************/ //函数名:Ack

//函数功能:检测来自AT24C**器件的ACK应答

//形式参数:无

//返回值:返回ack_bit,为0表示操作成功,否则操作有误

bit Ack(void)

{

bit ack_bit;

SDA=1; //置SDA为高,准备接收ACK应答

_nop_();_nop_();_nop_();_nop_();

SCL=1; //第9个时钟脉冲

_nop_();_nop_();_nop_();_nop_();

ack_bit = SDA; //读入应答

SCL=0;

return(ack_bit); //返回应答标志ack_bit

}

/*******************************反向应答*************************************/ //函数名:NoAck

//函数功能:向AT24C**器件发送NAK反向应答,随时钟输出一个高电平的负应答位,调用前// SCL为低,返回时SCL为低,SDA为高

//形式参数:无

//返回值:无

void NoAck(void)

{

SDA=1;

_nop_();_nop_();_nop_();_nop_();

SCL=1;

_nop_();_nop_();_nop_();_nop_();

SCL=0;

}

/**********************************延时************************************/ //函数名:mDelay

//函数功能:延时函数

//函数形式参数:ms用来控制循环次数,从而控制延时时间长短

//函数返回值:无

void mDelay(unsigned char ms)

{

unsigned int i;

while(ms--)

{

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

}

}

C语言习题及标准答案

习题一 【习题1-1】C语言源程序最多可能由________________部分组成? A) 预处理部分B)变量说明部分 C) 函数原型声明部分D)函数定义部分 【习题1-2】一个完整的C语言源程序最少必须有_______。 A)若干个主函数B)若干个函数 C)且只能有一个主函数D)一个函数 【习题1-3】C语言以函数为源程序的基本单位最主要有利于_______。 A)程序设计结构化B)程序设计模块化 C)程序设计简单化D提高程序设计有效性 【习题1-4】要使得C语言编写的程序能够在计算机上运行并得出正确结果,必须要先经过____________________________________ ___。 A)编辑和链接B)编译和链接 C)修改和运行D运行并输入数据 【习题1-5】选择一个C语言集成开发环境并启动它,然后分别输入【例1-1】、【例1-2】、【例1-3】的源程序,依次编译、链接、运行,看看能否达到预想的结果?从中了解程序的开发过程。 习题二 一、单项选择题 【习题2-1】已知’A’的ASCII代码是65,以下程序的输出结果是( )#include "stdio.h" main( ) { int c1=65,c2=66; printf("%c,%c",c1,c2); } A.因输出格式不合法,输出错误信息B.65,66 C.A,B????D.65,66 【习题2-2】若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句组是() A. a=a+b,b=a-b,a=a-b;??B.t=a,a=b,b=t; C.a=t,t=b,b=a; ??? D. t=b;b=a;a=t; 【习题2-3】若k是整型变量,则以下程序段的输出是( ) k=-8567; printf (“|%d|\n”,k);

单片机应用技术试卷A及答案

《单片机应用技术(C语言版)》试卷A一、单项选择题(每题1.5分,共30分) 1、51单片机的CPU主要由()组成。 A、运算器、控制器 B、加法器、寄存器 C、运算器、加法器 D、运算器、译码器 2、程序是以()形式存放在程序存储器中。 A、C语言源程序 B、汇编程序 C、二进制编码 D、BCD码 ——引脚()3、单片机8031的EA。 A、必须接地 B、必须接+5V电源 C、可悬空 D、以上三种视需要而定 4、单片机上电复位后,PC的内容为()。 A、0x0000 B、0x0003 C、0x000B D、0x0800 5、外部扩展存储器时,分时复用做数据线和低8位地址线的是() A、P0口 B、P1口 C、P2口 D、P3口 6、单片机的ALE引脚是以晶振振荡频率的()固定频率输出正脉冲,因此它可作为外部时钟或外部定时脉冲使用。 A、1/2 B、1/4 C、1/6 D、1/12 7、下面叙述不正确的是()。 A、一个C源程序可以由一个或多个函数组成。 B、一个C源程序必须包含一个主函数main( )。 C、在C程序中,注释说明只能位于一条语句的后面。 程序的基本组成部分单位是函数。C、D 8、在C语言中,当do-while语句中的条件为()时,循环结束。 A、0 B、false C、true D、非0 9、下面的while循环执行了()次空语句。 While(i=3); A、无限次 B、0次 C、1次 D、2次 10、C程序总是从()开始执行的。 A、主函数 B、主程序 C、子程序 D、主过程 11、在C51程序中常常把()作为循环体,用于消耗CPU运行时间,产生延时效果。 A、赋值语句 B、表达式语句 C、循环语句 D、空语句 12、在单片机应用系统中,LED数码管显示电路通常有()显示方式。 A、静态 B、动态 C、静态和动态 D、查询 13、共阳极LED数码管加反相器驱动时显示字符“6”的段码是() A、0x06 B、0x7D C、0x82 D、0xFA 14、51单片机的定时器T1用做定时方式时,采用工作方式1,则工作方式控制字为() A、0x01 B、0x05 C、010 D、0x50 15、启动T0开始计数是使TCON的()。

C语言程序设计第三版习题库答案

C 语言程序设计(第三版)习题库 1、设圆半径r=,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include<> main(){ floatr,h,C1,Sa,Sb,Va,Vb; scanf(__”%f ”__,&r); scanf(”%d ”,__&h _);; C1=2**r; Sa=*r*r; Sb=4*Sa; Va=4**r*r*r/3; Vb=Sa*h; printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb ); } 2、输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9 输出要求有文字说明,取位2小数。 #include<> main(){ floatF,c; scanf("%f",&F); ____c=5*(F-32)/9______; printf("c=%.2f",c); } 3、有一函数:?? ???≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。 #include<> main(){ intx,y; printf("输入x :"); scanf("%d",&x); if(x<1){/*x<1*/ y=x; printf("x=%3d,y=x=%d\n",x,y);

}elseif(____x<10_______){/*1≤x-10*/ _____y=2*x-1_______; printf("x=%3d,y=2*x-1=%d\n",x,y); }else{/*x≥10*/ y=3*x-11; printf("x=%3d,y=3*x-11=%d\n",x#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d\n",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }scanf("%d",&x);

C语言 习题三 参考答案

第三章习题参考答案 一、单项选择题 1、C语言中字符型(char)在内存中的形式存储是()。 A)源码 B)补码 C)反码D)ASCII码 2、运算符有优先级,在C语言中关于运算符优先级的正确叙述是()。 A)所有单目运算的级别相同 B)单目运算高于双目运算 C)赋值运算级别最低 D)求余运算比乘除运算级别高 3、C语言并不是非常严格的算法语言,在以下关于C语言的不严格的叙述中,错误的说法是()。 A)任何不同数据类型都不可以通用 B)有些不同类型的变量可以在一个表达式中运算 C)在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型 D)同一个运算符号在不同的场合可以有不同的含义 4、以下选项中属于C语言的数据类型是()。 A)复数型 B)逻辑型C)双精度型 D)集合型 5、在C语言中,int、char和short三种类型数据所占的内存()。 A)均为2个字节 B)由用户自己定义 C)由所用机器的字长决定 D)是任意的 6、下列常数中不能作为C语言的常量的是()。 A)0xa5 B)2.5e-2 C)3e2 D)0582 7、设int类型的数据长度为2字节,则unsigned int类型数据的取值范围是()。 A)0至255 B)0至65535 C)-256至255 D)-32768至32767 8、在C语言中,数字029是一个()。 A)八进制数 B)十六进制数 C)十进制D)非法数 9、下列可以正确表示字符型常数的是()。 A)”a”B)'\t’ C)”\n” D)297 10、以下错误的转义字符是()。 A)'\\’ B)'\'’ C)'\81’ D)'\0’ 11、C语言中整数-8在内存中的存储形式是()。 A)1111 1111 1111 1000 B)1000 0000 0000 0000 C)0000 0000 0000 1000 D)1111 1111 1111 0111 12、已知 int i; float f; 正确的语句是()。 A)(int f)%i B)int(f)%i C)int(f%i) D)(int)f%i 13、已知:char a; int b;float c; double d; 执行语句c=a+b+c+d; 后,变量c的数据类型是()。 A)int B)char C)float D)double 14、已知:int i,a;执行语句“i=(a=2*3,a*5),a+6;后,变量i的值是()。 A)6 B)12 C)30 D)36 15、已知:int i=5;执行语句i+= ++i;i的值是()。 A)10 B)11 C)12 D)A,B,C答案都不对

单片机应用技术课后习题参考答案

1 习题1答案 1.2 填空题 (1)单片级应用系统是由硬件系统、软件系统组成的 (2)除了单片机和电源外,单片机最小系统包括时钟电路、复位电路 (3)除了电源和电线引脚外,XTAL1、XTAL2、RST、EA引脚信号必须连接相应电 路 (4)51系列单片机的存储器主要有4个物理存储空间,即片内数据存储器、片内程序存储器、片外数据存储器、片外程序存储器 (5)51系列单片机的XTAL1和XTAL2引脚是时钟电路 (6)51系列单片机的应用程序一般存放在程序存储器 (7)片内RAM低128单元,按其用途划分为工作寄存器组、位寻址区、用户RAM区(8)但振荡脉冲频率为12MHz时,一个机器周期为1us,当振荡脉冲频率为6MHz时,一个机器周期为2us (9)51系列单片机的复位电路有两种,即上电复位电路、按键复位电路 (10)输入单片机的复位信号需延续2个机器周期以上的高电平即为有效。 1.3 (4)什么是机器周期?机器周期和晶振频率有何关系?当晶振频率为6MHz时,机器周期是多少? 答: 规定一个机器周期的宽度为12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。 当振荡脉冲频率为6 MHz时,一个机器周期为2 μs。 (5)51系列单片机常用的复位方法有哪几种?画电路图并说明其工作原理。 答: (a)上电复位电路(b)按键复位电路 单片机常见的复位电路 图(a)为上电复位电路,它是利用电容充电来实现的。在接电瞬间,RST端的电位

与VCC相同,随着充电电流的减少,RST的电位逐渐下降。只要保证RST为高电平的时间大于两个机器周期,便能正常复位。 图(b)为按键复位电路。该电路除具有上电复位功能外,若要复位,只需按图(b)中的RESET键,此时电源VCC经电阻R1、R2分压,在RST端产生一个复位高电平。 习题3 答案 3.2 填空题 (2)用C51编程访问51单片机的并行I/O口是,可以按字节,寻址操作,还可以按位操作(4)C51中定义一个可位寻址变量FLAG访问P3口的P3.1引脚的方法是s bit FLAG=P3^1; (10)下面的while循环执行了无限次空语句。 i=3; While(i!=0); (15)在以下的数组定义中,关键字“code”是为了把tab数组存储在程序存储器ROM中 Unsigned char code b[]={}; 3.3 上机操作题 (1) //xiti3_3_1.c——第三章习题3.3上机操作题(1) #include void delay(unsigned char i); //延时函数声明 void main() //主函数 { while(1){ P1=0x55; //按状态1的方式点亮8个LED delay(200); //延时 P1=0xaa; //按状态2的方式点亮8个LED delay(200); //延时 } } void delay(unsigned char i) //延时函数参见任务1程序ex1_1.c (2) //xiti3_3_2.c——第三章习题3.3上机操作题(2) #include //包含头文件REG51.H void delay(unsigned char i); //延时函数声明 void main() //主函数 { unsigned char i,l,r; while(1){ l=0x10; // 高4位灯的位置初值为00010000B r=0x08; // 低4位灯的位置初值为00001000B

C语言习题级答案3

测试题3 1.C语言中不合法的字符常量是C A、’\65’ B、’\xff’ C、’\028’ D、’&’ 2.具有相同类型的指针变量p与数组a,不能进行的操作是(C)。 A、p=&a[0]; B、p=a; C、p=&a; D、*p=a[0]; 3.若有x=22,y=26,z=0;,则执行下面语句后,z的输出结果是(B ) z=x>y?x:y A、72 B、26 C、48 D、22 4.对于建立函数的目的,正确的说法是D A、提高程序的执行效率 B、减少程序的篇幅

C、减少程序文件所占的内存 D、提高程序的可读性 5.有定义:char*p1,*p2;则下列表达式中正确合理的是C A、p1/=5 B、p1+=5 C、p1=&p2 D、p1*=p2 6.以下程序的运行结果是(B)。 main() { int i=1,sum=0; while(i<10) sum=sum+1;i++; printf("i=%d,sum=%d",i,sum); } A、i=10,sum=9 B、运行出现错误 C、i=2,sum=1 7.若变量已正确定义且k 的值是4,计算表达式( j =4, k--) 后,j和k的值为(C) A、j=4, k=4 B、j=3, k=3 C、j=4, k=3 D、j=3, k=4

8.给出以下定义: char x[ ]="abcdefg"; char y[ ]={'a','b','c','d','e','f','g'}; 则正确的叙述为(A) A、数组x的长度大于数组y的长度 B、数组x和数组y等价 C、数组x和数组y的长度相同 D、数组x的长度小于数组y的长度 9.在下述程序中,判断i > j共执行了多少次 C #include main() { int i = 0, j = 10, k = 2, s = 0; for( ; ; ) { i += k; if(i > j) { printf(“%d\n”, s); break; }

《单片机应用技术》课程标准

电子技术应用专业 《单片机应用技术》课程标准 增加附录:51或52单片机说明书,编程软件烧程序软件使用说明,增加实验中使用的各种器件说明 修改任务内容:去掉任务ISP下载线制作 增加点阵及液晶显示 一、概述 (一)课程性质 单片机技术是现代电子工程领域一门飞速发展的技术,其在教学及产业界的技术推广仍然是当今科学技术发展的热点。学习单片机并掌握其应用已经成为电子类学生必须具备的技能,也是现代工科学生就业的一个基本条件。 《单片机应用技术》是电子技术应用专业的一门职业技术课。它以模拟电子技术、数字电子技术、C语言等课程为基础。后续课程如电子产品装调技术、电子产品检测技术及相关实训课程,一般都要应用到单片机系统的应用。它可以充分体现学生利用自己所掌握的知识解决实际工程问题的能力。单片机知识在电子类专业整个课程体系中处于承上启下的核心地位。 通过本课程的学习,使学生掌握单片机技术及其在工业控制、经济建设和日常生活中的应用,培养学生实践能力、创新能力,为将来从事相关产品的检测和维护等工作奠定坚实的基础,为学生将来在电子类专

业领域进一步发展打下良好基础。 (二)课程基本理念 本课程的设计突破了学科体系模式,打破了原来各学科体系的框架,将各学科的内容按“项目”进行整合。本课程的“项目”以职业实践活动为主线,因而,它是跨学科的,且理论与实践一体化。强调学生个人适应劳动力市场变化的需要。因而,本课程的设计兼顾了企业和个人两者的需求,着眼于人的全面发展,以培养全面素质为基础,以提高综合职业能力为核心。 本课程包含了单片机应用技术的五个项目,每个项目均由若干个具体的典型工作任务组成,每个任务均将相关知识和实践(含实验)过程有机结合,力求体现“做中学”、“学中做”的教学理念;本课程内容的选择上降低理论重心,突出实际应用,注重培养学生的应用能力和解决问题的实际工作能力。 (三)课程设计思路 本课程标准注重培养分析问题、解决问题的能力,强化学生动手实践能力,遵循学生认知规律,紧密结合应用电子专业的发展需要,为将来从事应用电子产品的设计、检测奠定坚实的基础。将本课程的教学活动分解设计成若干项目或工作情景,以项目为单位组织教学,并以典型设备为载体,通过具体案例,按单片机项目实施的顺序逐步展开,让学员在掌握技能的同时,引出相关专业理论知识,使学生在技能训练过程中加深对专业知识、技能的理解和应用,培养学生的综合职业能力,满足学生职业生涯发展的需要。 二、课程目标 1、总目标 本课程先修要求:学生已学习《模拟电子技术》、《数字电子技术》等相关专业基础理论课程,有一定的电路识图、分析能力后进行本专业能力实训。通过实训学生应达到: (一)应使学生熟悉单片机的原理与结构,通过试验实训的训练和一些简易单片机项目制作,掌握单片机控制的基本原理、接口技术,掌

《单片机应用技术》试卷B及答案

《单片机应用技术(C 语言版)》试卷B 一、 单项选择题(每题1.5分,共30分) 1、51单片机的CPU 主要由( )组成。 A 、运算器、控制器 B 、加法器、寄存器 C 、运算器、加法器 D 、运算器、译码器 2、PSW 中的RS1和RS0用来( ) 。 A 、选择工作方式 B 、指示复位 C 、选择定时器 D 、选择工作寄存器组 3、单片机8031的EA —— 引脚( )。 A 、必须接地 B 、必须接+5V 电源 C 、可悬空 D 、以上三种视需要而定 4、单片机上电复位后,PC 的内容为( )。 A 、0x0000 B 、0x0003 C 、0x000B D 、0x0800 5、单片机的4个并行I/O 端口作为通用I/O 端口使用,在输出数据时,必须外接上拉电阻的是( ) A 、P0口 B 、P1口 C 、P2口 D 、P3口 6、单片机的ALE 引脚是以晶振振荡频率的( )固定频率输出正脉冲,因此它可作为外部时钟或外部定时脉冲使用。 A 、1/2 B 、1/4 C 、1/6 D 、1/12 7、下面叙述不正确的是( )。 A 、一个C 源程序可以由一个或多个函数组成。 B 、一个 C 源程序必须包含一个主函数main( )。 C 、在C 程序中,注释说明只能位于一条语句的后面。 D 、C 程序的基本组成部分单位是函数。 8、在C51语言的if 语句中,用做判断的表达式为( )。 A 、关系表达式 B 、逻辑表达式 C 、算术表达式 D 、任意表达式

9、下面的while循环执行了()次空语句。 While(i=3); A、无限次 B、0次 C、1次 D、2次 10、C程序总是从()开始执行的。 A、主函数 B、主程序 C、子程序 D、主过程 11、在C51程序中常常把()作为循环体,用于消耗CPU运行时间,产生延时效果。 A、赋值语句 B、表达式语句 C、循环语句 D、空语句 12、在单片机应用系统中,LED数码管显示电路通常有()显示方式。 A、静态 B、动态 C、静态和动态 D、查询 13、在共阳极数码管使用中,若要仅显示小数点,则其相应的字段码是()。 A、0x80 B、0x10 C、0x40 D、0x7F 14、51单片机的定时器T1用做定时方式时,采用工作方式1,则工作方式控制字为() A、0x01 B、0x05 C、0x10 D、0x50 15、MCS-51系列单片机串行口发送/接收中断源的工作过程是:当串行口接收或发送完一帧数据时,将SCON中的(),向CPU申请中断。 A、RI或TI置1 B、RI或TI置0 C、RI置1或TI置0 D、RI置0或TI置1 16、在定时/计数器的计数初值计算中,若设最大计数值为M,对于工作方式1下的M值为()。 A、M=213 = 8192 B、M=28 = 256 C、M=24 = 16 D、M=216 = 65536 17、51单片机的串行口是()。 A、单工 B、全双工 C、半双工 D、并行口 18、表示串行数据传输速率的指标为()。 A、USART B、UART C、字符帧 D、波特率 19、串行口的控制寄存器为()。 A、SMOD B、SCON C、SBUF D、PCON 20、串行口的发送数据和接收数据端为()。 A、TXD和RXD B、TI和RI C、TB8和RB8 D、REN 二、填空题(每空1.5分,共30分)

c语言习题答案

实验一 (1)编程求37+29的值,实习VC环境。 #include void main() { int a,b,sum; a=37; b=29; sum=a+b; printf("sum=%d",sum); } (2)从键盘输入三个整数,求出最大数并输出。 #include void main() { int a,b,c,y; int max(int x,int y); printf("input a,b,and c:"); scanf("%d,%d,%d",&a,&b,&c); y=max(a,b); y=max(y,c); printf("\nmax=%d\n",y); } int max(int x,int y) { int z; if(x>y) z=x; else z=y; return(z); } (3)通过上机实践,运行下列程序并分析输出结果。 A 程序代码 #include void main() { char ch='a'; printf("%c对应的ASCII码是:%d\n",ch,ch); } 程序输出结果:a对应的ASC||码是:97

B 程序代码 #include void main() { int a=168; float b=123.456; float x=35.567,y; printf("a=%5d\n",a); printf("a=%-5d\n",a); printf("b=%6.2f\n",b); printf("b=%e\n",b); y=(int)(x*100+0.5)/100.0; printf("x=f,y=%f\n",x,y); } 程序输出结果: a=168 a=168 b=123.46b=1.234560e+002 x=f,y=35.567001 C程序代码 #include void main() { int a=168; printf("十进制数%d对应的八进制数是%o\n",a,a); printf("十进制数%d对应的十六进制数是%x\n",a,a); } 程序输出结果: 十进制数168对应的八进制数是250 十进制数168对应的十六进制数是a8

C语言习题册答案集

第1章绪论 一、选择题 1~5 CABCD 6~10 BDCBC 11~15 AADCC 二、程序填空题 1、一个C语言程序是由函数组成的。 2、C源程序的后缀名为 3、在C程序中,main()函数最多有 1 个。 4、一个C语言程序总是从主函数/main( ) 开始执行。 5、在C语言里输入是由 scanf 函数实现,输出是由 printf 函 数实现。 6、C语言中,当复合语句多于一条时,要求有一对 { } 括号。 7、一个C源程序必须经过_ 编译__和_链接__生成exe文件才能运行 8、在一个C程序中注释部分两侧的分界符分别为_/*_____和_*/___ 9、编写计算机所程序所使用的语言称为__程序设计语言______。 10、程序设计语言的发展经历了三个阶段__机器语言__、_汇编语言_ 和__高级语言__

第2章基本数据类型及顺序结构程序设计 一、选择题 01~05 ACDDA 06~10 ACAAC 11~15 BDBBC 16~20 DABAA 21~25 DBDAA 26~30 ADDCB 31~35 BDCAB 二、程序填空题 1、__基本数据类型、_构造类型___ 和___其它类型_______。 2、 4 、 4 、 8 、 1 。 3、 double 4、 x<-5||x>5或 abs(x)>5 5、 y%2==1 或y%2!=0 6、 x%3==0&&x%7==0或x%21==0 , 7、 10 , 10 。 8、printf(“****a=%d, b=%d****”,a,b) 。 9、a:b ; c:t1 ; 10、 x%10 , x/10%10 ; 三、程序阅读题 1、 G 。 2、 2, 1 。 3、 0 。 4、 16 。 5、2,50 。 6、 b 。 7、 3 。 8、10,20,0 。 9、 2, 。 10、67, e 。

单片机应用技术(C语言)试题

一、选择题 1、单片机8031的/EA引脚(C)。 A. 可悬空 B. 必须接+5V电源 C. 必须接地 D. 以上三种情况视需要而定 2、MCS-51单片机的4个并行I/O端口作为通用I/O端口使用,在输出数据时,必须外接上拉电阻的是(A)。 A. P0口 B. P1口 C. P2口 D. P3口 3、当MCS-51单片机应用系统需要扩展外部存储器或其它接口芯片时,(A)可作为低8位地址总线使用。 A. P0口 B. P1口 C. P2口 D. P0口和P2口 4、系统复位后,堆栈指针SP的内容是(B)。 A. 08H B. 07H C. 30H D. 50H 5、MCS-51单片机的位寻址区位于内部RAM的( D )单元。 A. 00H~7FH B. 20H~7FH C. 00H~1FH D. 20H~2FH 6、PSW中的RS1和RS0用来(A)。 A. 选择工作寄存器组 B. 指示复位 C. 选择定时器 D. 选择工作方式 7、MCS-51单片机规定一个机器周期共有(A)个节拍。 A. 12 B. 6 C. 8 D. 16 8、下面叙述不正确的是(C)。 A. 一个C源程序可以由一个或多个函数组成 B. 一个C源程序必须包含一个函数main() C. 在C51中,注释说明只能使用/*……*/注释 D. C程序的基本组成单位是函数 9、在C51程序中常常把(D)作为循环体,用于消耗CPU时间,产生延时效果。 A. 赋值语句 B. 表达式语句 C. 循环语句 D. 空语句 10、在单片机应用系统中,LED数码管显示电路通常有(C )显示方式。 A. 静态 B. 动态 C. 静态和动态 D. 查询 11、共阳极LED数码管加反向器驱动时显示字符“6”的段码是(B)。 A. 06H B. 7DH C. 82H D. FAH 12、LED数码管若采用动态显示方式,下列说法错误的是(C)。 A. 将各位数码管的段选线并联 B. 将段选线用一个8位I/O端口控制 C. 将各位数码管的公共端直接连接在+5V或者GND上 D. 将各位数码管的位选线用各自独立的I/O端口控制 13、按键开关的结构通常是机械弹性元件,在按键按下和断开时,触点在闭合和断开瞬间会产生接触不稳定,为消除抖动引起的不良后果,常采用的方法有(C)。 A. 硬件去抖动 B. 软件去抖动 C. 硬、软件两种方法 D. 单稳态电路去抖方法

单片机应用技术考试题库

习题1 1.1单项选择题 (1)MCS-51系列单片机的CPU主要由组成。 A. 运算符、控制器 B.加法器、寄存器 C.运算器、加法器 D.运算器、编码器 (2)单片机中的程序计数器PC用来。 A.存放指令 B.存放正在执行的指令地址 C.存放下一条指令的地址 D.存放上一条指令地址 (3)单片机8031的ˉEA引脚。 A.必须接地 B.必须接+5V电源 C.可悬空 D.以上三种视需要而定 (4)外部扩展存储器时,分时复用做数据线和低8位地址线的是。 A.P0口 B.P1口 C.P2口 D.P3口 (5)PSW中的RS1和RS0用来。 A.选择工具寄存器 B.指示复位 C.选择定时器 D.选择工作方式 (6)单片机上电复位后,PC的内容为。 A.0000H B.003H C.000BH D.0800H (7)Intel 8051单片机的CPU是。 A.16 B. 4 C. 8 D.准16位 (8)程序是以形式存放在程序存储器中的。 A. C语言源程序 B.汇编程序 C.二进制编码 D.BCD码 (9)8050单片机的程序计数器PC为16位计数器,其寻址范围是。 A. 8 KB B.16KB C.32KB D.64KB (10)单片机的ALE引脚是以晶振荡频率的固定频率输出正脉冲,因此它可作为外部时钟或外部定 时脉冲使用。 A.1/2 B.1/4 C.1/6 D.1/12 1.2填空题 (1)单片机系统是由和组成的。 (2)除了单片机和电源外,单片机最小系统包括电路和电路。 (3)在进行单片机应用系统设计时,除了电源和地线引脚外,、、、引脚信号必须 连接相应电路。 (4)MCS-51系列单片机的存储器主要有4个物理存储空间,即、、、。 (5)MCS-51系列单片机的XTALL和XYAL2引脚是引脚。 (6)MCS-51系列单片机的应用程序一般存在中。 (7)片内RAM低128单元,按其用途划分为、和3个区域。 (8)当振荡脉冲频率为12 MHz时,一个机器周期为;当振荡脉冲频率为6 MHz时,一个机器周期 为。 (9)MCS-51系列单片机的复位电路有两种,即和。 (10)输入单片机的复位信号需延续个机器周期以上的电平时即为有效,用于完成单片机的复位 初始化操作。 1.3回答题 (1)什么是单片机?它由哪几部分组成?什么是单片机应用系统? (2)P3口第二功能是什么?

c语言编程例题及答案

实验报告三 (四学时) 2.1 实验目的 (1)掌握函数的定义和调用; (2)了解函数间的参数传送; 2.2 基础实验 【题目3-1】编写函数实现将输入的字母转换成大写字母(若输入小写则转换,大写字母直接输出,其他字符请输出提示“请输入字母”)。 算法分析: 1、输入:通过键盘接收一个字符; 2、条件判断:调用判别函数 3、函数功能为:蒋所输入字符进行判别处理,若输入小写则转换,大写字母直接输出,其他字符请输出提示“请输入字母” 4、程序结束。 【实验3-1】代码及运行结果:

【题目3-2】从键盘输入若干个同学计算机课程期末考试成绩(学生人数可由用户输入),求该课程的期末成绩的平均分并输出。 函数功能要求:实现若干(例如5名)同学的的期末成绩输入,并统计出平均分。 算法分析: 1、输入:通过键盘接收同学个数; 2、调用求平均分函数 3、输出平均成绩 4、程序结束。 【实验3-2】代码及运行结果: 【题目3-3】请用函数编写程序实现:计算3 到100 之间所有素数的平方根之和,并输出。s=148.874270。

算法分析: 1、编写函素数判别函数,确定返回标记,如果是素数返回1,否则返回0 2、编写主函数,用一重循环遍历100以内所有数据 2.1、通过素数判别函数对循环的数据进行是否为素数的判别 2.2、返回判别为真的整数,并输出 3、程序结束。 【实验3-3】代码及运行结果: #include #include int Prime(int x) { int i ; if(x<=1) return 0; for(i=2;i<=x-1;i++) { if(x%i==0) { return 0; } } return 1; } int main() { double i,sum; i=3; sum=0; while(i<=100) { if(Prime(i)) { sum=sum+sqrt(i); } else { sum=sum+0; } i++; } printf("sum=%f\n",sum); return 0; }。

单片机应用技术说课稿

各位领导、专家、评委:你们好! 我是自控系计算机控制技术教研室老师刘刚。我说课的课程是“单片机技术应用”。下面我从课程设置、课程内容、课程实施、课程评价等等六方面来汇报对课程的钻研情况和教学思想。恳请在座的专家、评委批评指正。 《单片机应用技术》课程在计算机控制技术专业人才培养方案中具有重要作用,,是“计算机控制工程综合能力”的重要构成部分,对学生职业能力的培养起到重要支撑作用。同时,《单片机技术应用》课程也是专业课程体系中的一个关键环节,对课程体系的构建起到了承上启下的关键作用,是前期《模拟电子技术》、《数字电子技术》、《C语言程序设计》等课程的综合和提升,又是后续《计算机控制技术》、《自控理论》等课程的前提和基础。 经过调研我们得知本专业的学生将来大致的就业岗位:生产维修岗、设计研发岗以及技术支持岗,不同的岗位适应于不同的行业,对职业能力的需求也有所侧重。但总的来说都要求学生具有一定的理论基础与较强的实践应用能力。据此,我们将课程目标定位于:使学生了解单片机的特点、基本工作原理;了解单片机与微型计算机的区别与联系;掌握单片机的指令系统、中断系统、扩展系统、定时器、接口技术。掌握单片机应用程序的设计方法。并将课程目标细化为能力目标、知识目标和素质目标。 立足于课程的培养目标,我们以实际控制任务、高职培养目标、人的认识规律、以及单片机设计师职业资格要求等为依据精心选择、设计课程内容。 本课程以循环流水灯、电子钟、温度测量报警系统3个电子产品的设计制作过程为载体。根据产品的设计制作过程,结合单片机的知识点划分为10个教学任务,每个学习任务既是一项单片机应用技能的训练,又是整个产品设计制作的一个环节。 3个电子产品分别适用单片机学习的3个阶段:入门、基础、扩展。 循环流水灯涉及简单的开关量控制,是单片机控制的基础,设计制作简单,容易实现,有助于提高学生的积极性。 电子钟涉及单片机应用系统的常用电路,即显示电路和键盘电路,其设计制作过程涉及外部中断、定时/计数器应用,是进一步应用的基础。 温度测量报警系统是在前面制作的基础上,对并行接口芯片、串行

单片机应用技术c语言版 第版王静霞 习题答案

习题 1 1.1 单项选择题 (1) A (2)C (3)C 1.2 填空题 (1)硬件系统、软件系统 (2)时钟电路、复位电路 (3)XTAL1、XTAL2、RESET、EA (4)晶振 1.3 问答题 什么是单片机它由哪几部分组成什么是单片机应用系统 答:单片微型计算机(Single Chip Microcomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(Central Processing Unit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。 单片机应用系统是以单片机为核心,配以输入、输出、显示等外围接口电路和控制程序,能实现一种或多种功能的实用系统。 1.4 上机操作题 (1) 参考程序: #include //包含头文件reg51.h,定义了51单片机的专用寄存器 //函数名:delay //函数功能:实现软件延时 //形式参数:无符号整型变量i,控制空循环的循环次数 //返回值:无 void delay(unsigned int i) //延时函数 { unsigned int k; for(k=0;k //包含头文件reg51.h,定义了51单片机的专用寄存器 //函数名:delay

单片机应用技术C语言版

1.1单片微型计算机(Single Chip Microcomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(Central Processing Unit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等 1.2软件是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可 1.3单片机的发展经历了由4位机到8位机,再到16位机的发展过程 1.4中央处理器CPU:8位,运算和控制功能 内部RAM:共256个RAM单元,用户使用前128个单元, 用于存放可读写数据,后128个单元被专用寄存器占用。 内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表格。 定时/计数器:两个16位的定时/计数器,实现定时或计数功能。 并行I/O口:4个8位的I/O口P0、P1、P2、P3。 串行口:一个全双工串行口。 中断控制系统:5个中断源(外中断2个,定时/计数中断2个,串行中断1个) 时钟电路:可产生时钟脉冲序列,允许晶振频率6MHZ和12MHZ 1.5按键手动复位,有电平方式和脉冲方式两种。 1.6寄存器SP的复位电路07H 寄存器P0-P3的复位电路FFH 寄存器PC的复位电路0000H 寄存器B的复位电路00H 1.7单片机的时序概念从小到大依次是:节拍、状态、机器周期和指令周期 1.8机器周期:一个机器周期分为6个状态:S1~S6。每个状态又分为两拍:P1和P2 1.9指令周期:是执行一条指令所需的机器周期数。 1.10P0口:双向8位三态I/O口,此口为地址总线(低8位)及数据总线分时复用口,可驱动8个LS型TTL负载。 1.11 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INT0*(外部中断0) P3.3 INT1*(外部中断1) P3.4 T0(定时器0外部计数输入) P3.5 T1(定时器1外部计数输入) P3.6 WR*(外部数据存储器写选通) P3.7 RD*(外部数据存储器读选通) 1.12P0口输出高电平必须接上拉电阻。P1~P3口输出高电平不必接上拉电阻。 1.13对SFR只能使用直接寻址方式,书写时可使用寄存器符号,也可用寄存器单元地址。 1.14直接寻址:直接通过地址访问(00H~7FH) 1.15 data 直接访问内部数据存储器(128字节),访问速度最快 1.16C5l的数据类型有位型(bit)、无符号字符(unsigned char)、有符号字符(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长型(unsigned long)、有符号长型(signed long)、浮点(float)和指针类型等。其中short与long属整型数据、float与double 型属浮点型数据。 1.17bit flag; // 将flag定义为位变量sfr P1 = 0x90; //定义P1口,地址90H #define uchar unsigned char宏定义 sbit P1_0=P1^0变量声明 void delay(uchar i);被调函数声明void main() 定义主函数

《单片机应用技术》试题

《单片机应用技术》试题C卷 满分:40分时间:60分钟考试方式:笔试开卷 一、填空题(10分,每空0.5分) 1、AT89C51单片机40个引脚功能分别为:40脚为电源引脚、20脚为地引脚、() 为时钟引脚、()为复位引脚,29~31脚控制引脚3个;32~39脚为P0口、1~8为脚P1口、21~28脚为P2口、10~17脚为P3口。 2、51系列单片机为高电平复位,在复位时9脚为( )电平,在工作状态时9脚为( ) 电平。 3、51系列单片机P0~P1口,当既作输入口又作( )时,在输出转输入时应先给端 口写( )然后再读。 4、从逻辑上将A T89C51单片机存储器分为3个存储空间:片内外统一编址的64KB的 ( )、片内( )B的数据存储器、外部64KB的数据存储器。 5、51系列单片机片内数据存储器工作寄存器区32个字节被均匀地分为4个组:第0组工 作寄存器,地址为( );第1组工作寄存器,地址为( );第2组工作寄存器,地址为10H~17H;第3组工作寄存器,地址为18H~1FHH。 7、数码管要显示字形“5”,则( )、c、d、f、g段亮,( )、e段灭。 C/为0时,工作于( ) 8、当定时/计数器工作方式寄存器( )中的功能选择位T 方式。 9、串行通信工作在方式3时,对于TH0只能作定时功能使用,同时借用了定时/计数器1 的运行控制位TR1和溢出标志位TF1,并占用了T1的中断源。TH0启动和停止仅受( )控制,而计数溢出时则置位( )。 10、PCON寄存器中与串行通信有关的只有D7位(SMOD),该位为波特率倍增位。当 SMOD=( )时,串行口波特率增加一倍;当SMOD=( )时,串行口波特率为设定值。 二、判断(10分,每小题1分) 下列各小题叙述是否正确,正确的在后面括号内打“√”,错误的在后面括号内打“×”。 1、P2口即可作通用I/O口用,又可在扩展外部存储器或外部设备时作高8位地址总线用。 () 2、进位标志位CY此位有两个功能:一是执行加法或减法运算时,存放运算结果的进位或 借位标志,当运算结果的最高位有进位或借位时置“1”,否则清“0”。二是在位操作中

C语言习题级答案3

测试题3 1、C语言中不合法的字符常量就是 C A、’\65’ B、’\xff’ C、’\028’ D、’&’ 2、具有相同类型的指针变量p与数组a,不能进行的操作就是(C)。 A、p=&a[0]; B、p=a; C、p=&a; D、*p=a[0]; 3、若有x=22,y=26,z=0;,则执行下面语句后,z的输出结果就是(B ) z=x>y?x:y A、72 B、26 C、48 D、22 4、对于建立函数的目的,正确的说法就是 D A、提高程序的执行效率 B、减少程序的篇幅 C、减少程序文件所占的内存 D、提高程序的可读性 5、有定义:char*p1,*p2;则下列表达式中正确合理的就是 C A、p1/=5 B、p1+=5 C、p1=&p2 D、p1*=p2 6、以下程序的运行结果就是(B)。 main() { int i=1,sum=0; while(i<10) sum=sum+1;i++; printf("i=%d,sum=%d",i,sum); } A、i=10,sum=9 B、运行出现错误 C、i=2,sum=1

7、若变量已正确定义且 k 的值就是 4,计算表达式 ( j =4, k--) 后,j与k的值为(C) A、j=4, k=4 B、j=3, k=3 C、j=4, k=3 D、j=3, k=4 8、给出以下定义: char x[ ]="abcdefg"; char y[ ]={'a','b','c','d','e','f','g'}; 则正确的叙述为(A) A、数组x的长度大于数组y的长度 B、数组x与数组y等价 C、数组x与数组y的长度相同 D、数组x的长度小于数组y的长度 9、在下述程序中,判断i > j共执行了多少次 C #include main() { int i = 0, j = 10, k = 2, s = 0; for( ; ; ) { i += k; if(i > j) { printf(“%d\n”, s); break; } s += i; } } A、4 B、8 C、6 D、7 10、下列各m的值中,能使m%3==2&&m%5==3&&m%7==2为真的就是(D)。 A、8 B、17 C、6 D、23 11、下面判断正确的就是(D)。

相关文档
相关文档 最新文档