《单片机应用项目式教程——基于Keil和Proteus第2版思考和练习题答案汇总第1--6章.docx》由会员分享,可在线阅读,更多相关《单片机应用项目式教程——基于Keil和Proteus第2版思考和练习题答案汇总第1--6章.docx(44页珍藏版)》请在优知文库上搜索。
1、第1章思考和练习解答IJ什麽是单片机?答:参阅教材书Rl。1.2单片机应用的主要领域有哪些?试举出10个以上的应用实例。答:参阅教材书任务Ll1.3 80C51共有几个8位并行I/On?各有什么功能?其中P3口的第二功能是什么?答:参阅教材书P21。1.4 试述80C51存储空间结构,各有什么功能?答:参阅教材书P.21P.22080C51存储空间配置如图2-1所示。(MOVC指令操作域)ROM地址空间ffh雌雄: 寄存器80H (21 个)7FHOoH内部RAM(I28B)(MOV指令操作域)FFFFH外部RAM(64KB)OOOOH (MOVX指令操作域)RAM地址空间图2-180C51存
2、储空间配置.图从组织结构上可以分为3个不同的存储空间,分别是:(D64KB程序存储器(ROM),包括片内ROM和片外ROM;64KB外部数据存储器(称为外RAM);(3)256B(包括特殊功能寄存器)内部数据存储器(称为内RAM)。3个不同的存储空间用不同的指令和控制信号实现读、写功能操作:(1)ROM空间用MOVC指令实现只读功能操作,用PSEN信号选通读外ROMo外RAM空间用MOVX指令实现读写功能操作,用S5信号选通读外RAM,用诉信号选通写外RAMo(3)内RAM(包括特殊功能寄存器)用MoV指令实现读、写功能操作。1.5 80C51内RAM的组成是如何划分的,各有什么功能?答:从广
3、义上讲,80C51内RAM(I28B)和特殊功能寄存器(128B)均属于片内RAM空间,读写指令均用MOV指令。但为加以区别,内RAM通常指OoH7FH的低128B空间80C51内RAM可以分成三个物理空间:工作寄存器区、位寻址区和数据缓冲区。参阅教材书P221.6 简述程序状态字寄存器PSW各位定义名、位编号和功能作用。答:参见教材书P.24。1.7 在计算机中为什么要用二进制数和十六进制数?答:参阅教材书P.34。18在8位计算机中,数的正负号如何表示?答:在计算机中,数的正负在最高位分别用“0”和“1”表示。对于8位有符号数,微型计算机中约定,最高位D7表示正负号,其他7位表示数值,D7
4、=l表示负数,D7=0表示正数。19试在KeilVsion创建一个新项目key.ctrl,设置单片机工作频率bsc=6MHz,需生成可执行HeX文件,输入如下源程序,并添加到目标项目组,存盘。答:参阅教材书任务2.1、任务2.2。1.10 试重新打开题1.9创建项目key_ctrl,编译链接调试,并用全速运行、单步结合过程单步运行和断点运行3种操作方法,观测运行过程和结果(提示:全速运行时,为便于观测,调用延时子函数delayl实参可修改为HoOO0)。答:参阅教材书任务2.3。Ml试在已经画好的图130所示ProteusISIS虚拟电路中,装入题1.9调试后自动生成的HeX文件,并仿真运行,
5、观测运行过程和结果,答:参阅教材书任务3.2、任务3.3。第2章思考和练习解答参阅本书P.34。2.1 C51编程与80C51汇编语言相比,主要有什麽优势?答:C51编程与80C51汇编语言相比,主要的优势是编程相对方便。具体如下:C51软件编程不需过多关注具体的存储单元。用汇编语言编程,几乎每一条指令(除NoP指令)操作都与具体的存储单元有关,80C51单片机的片内存储空间容量有限,编程之初即需安排好片内存储单元的用途,且一般不能重复使用。当一些应用项目较大时,片内存储单元有可能捉襟见肘,稍有不慎就将出错。因此,编程时,不但要注意用哪一条指令正确操作,而且要注意指令在哪一个存储单元操作,编程
6、相对复杂。而C51编程能自动完成变量存储单元的分配和使用,且对函数内局部变量占用的存储单元,仅在调用时临时分配,使用完毕即行释放,大大提高了片内有限存储空间的利用效率。使用者只需专注于软件编程,不需过多关注具体的存储单元及其操作指令。因此,编程相对方便。便于实现各种复杂的运算和程序。C语言有丰富且功能强大的运算符,能以简单的语句方便地实现各种复杂的运算和程序。相比之下,汇编语言要实现较复杂的运算和程序,就比较困难。例如,双字节的乘除法,汇编语言要用许多条指令操作才能完成;而C51只需一条语句便能实现。又例如,循环、查表和散转等程序,C51语句实现起来也相对简单方便。可方便地调用各已有程序模块。
7、已有程序模块包括C51编译器中丰富的库函数、用户自编的常用接口芯片功能函数和以前己开发项目中的功能函数。读者可能会说,汇编程序不也一样可以调用吗?不一样。汇编程序调用时,涉及到模块中具体的存储单元,这些存储单元很可能与主调用程序有重复,会引起冲突而出错。而C51程序函数中的变量一般为局部变量,主函数调用前不占用存储单元,仅在调用时由C51编译器根据空余情况临时分配,使用完毕即行释放,因而一般不会发生冲突而出错。因此,C51程序可方便地调用各已有程序模块,减少重复劳动,大大提高编程效率。(4)编译生成的代码效率比汇编语言低一些;实时时效不如汇编语言快捷;一条C语言指令编译后,会转换成很多机器码,
8、占用单片机片内资源较多。2.2 C51基本数据类型有哪几种?其数据长度为多少?答:参阅教材书基础知识4.1,图232.3 C51标识符命名有何要求?答:在C51程序中,数据、变量和函数等常用标识符表示。实际上,标识符就是一个代号或名字。C51规定:标识符只能由字母、数字和下划线三种字符组成,且须以字母或下划线开头。(2)标识符不能与“关键词”同名。英文字母区分大小写。即标识符中的英文字母大小写不能通用。2.4 怎样理解变量的存储器类型和编译模式?答:存储器类型和编译模式是确定变量存放在那一存储区域,不同的存储区域与访问速度有关。存储器类型是在变量定义时确定,而未定义存储器类型的变量由编译模式默
9、认。存储种类与变量存放在那一存储区域基本无关(除寄存器类变量),与变量值的生存期和作用范围有关。中、小型程序一般可采用默认的存储种类auto。变量的存储种类与变量的存储器类型、编译模式是两个完全不同的概念,不能混淆。2.5 为什么变量要尽量使用无符号字符型格式?答:C51变量的基本数据类型主要有字符型Char、整型int和长整型Iong,又可分别分为有符号Signed和无符号UnSigned。80C51是8位机,本身并不支持有符号运算。若变量使用有符号格式,C51编译器要进行符号位检测并需调用库函数,生成的代码比无符号时长得多,占用的存储空间会变大,程序运行速度会变慢,出错的机会也会增多080
10、C51单片机主要用于实时控制,变量一般为8bit无符号格式,16bit较少,有符号和有小数点的数值计算也很少。因此,在已知变量长度和正整数的情况下,应尽量采用无符号格式:UnSignedChar。2.6 为什么变量要尽量使用局部变量?答:与80C51汇编语言相比,C5I编程的突出优点是能自动完成变量存储单元的分配和使用,对函数内局部变量占用的存储单元,仅在调用时临时分配,使用完毕即行释放,大大提高了片内有限存储空间的利用效率。使用者只需专注于软件编程,不需过多关注具体的存储单元及其操作指令。因此,编程相对方便。使用全局变量的缺点:一是始终占用一个固定的存储单元,降低了内部存储单元的利用率;二是
11、降低了函数的通用性。若函数涉及某一全局变量,该函数移植到其他文件时需同时将全局变量一起移植。否则,若全局变量名与其他文件中的变量同名,就会出现问题。三是过多使用全局变量,降低了程序的清晰度。若程序较大,人们较难清晰地判断程序执行过程中每个瞬间全局变量的变化状况,易出错。因此,应尽量减少全局变量的使用,能不用就尽量不用。2.7 for循环语句括号内3个表达式分别表示什麽含义?能否缺位?答:第一个表达式是循环变量初值,第二个表达式是循环终止条件,第三个表达式是循环变量更新。3个表达式之间必须用分号“;”分隔,允许有一个或多个缺位。2.8 while(1)和for(;)表示什麽含义?答:While(
12、I)和for(;)均表示一个循环条件始终满足的无限循环。若后面有循环体语句,则反复无限执行循环体语句;若后面无循环体语句,则表示程序在原地踏步。2.9 什麽是数组?如何定义和表示?答:数组是一组具有相同类型数据的有序集合。例如:intaj10=10,11,22,33,44,55,66,77,88,99);上式表示:数组名为a,数组内的数据类型为int,元素个数(也称为数组长度,即数组内数据的个数)有10个。10个数组元素分别为:a0=10,al=ll,a2=22,a3=33,a4=44,a5=55,a6=66,a7=77,a8=88,a9=99o需要注意的是,数组定义时,方括号内是数组元素个数
13、;数组元素引用时,方括号内是数组元素的序号。而且,数组元素序号是从0开始编号的。因此,上述数组a10中没有a10这个数组元素,其最后个数组元素是a9。2.10 函数参数传递,值传递与地址传递有什麽不同?答:函数的实参传递给形参,称为值传递。值传递是单向的,即不会影响主调用函数中实参值的变化。指针变量或数组作为实参传递给形参时,是将一个变量的地址传送到另一个函数中去,称为地址传递,其结果具有双向性。若在被调用函数中该地址存储单元中的内容发生了变化,在调用结束后这些变化将被保留下来,即其结果会被返回到主调用函数。2.11 已知双键控3灯电路如图211所示,要求实现:So单独按下,红灯亮,其余灯灭;
14、Sl单独按下,绿灯亮,其余灯灭;S。、Sl均未按下,黄灯亮,其余灯灭;So、Sl均按下,红绿黄灯全亮。试按任务4.1中3种形式编写C51程序,画出ProteusISIS虚拟电路,并仿真调试。解:-5V叩Pl.7.HSO-H=F-5.1KDl AVSM5TK80C5LPl 2红22OaNPl.b2206 -I=F-Pl.0.-M-220* co图双键控3灯电路.(1) if-else语句include sbit sO=P 17;sbit s1=P16;sbit R=P12;sbit G=P11;sbit Y=P10;void main () while(l)头文件包含访问血库函数reg51.h定
15、义位标识符So为PL7定义位标识符Sl为Pl.6定义位标识符R为PL2定义位标识符G为Pl.1定义位标识符Y为PLO无类型主程序if(sO!=O)(sl!=O) Y=0: R=G=IJ/SO. SI均未按下,黄灯亮,其余灯灭无限循环elseif(sO!=l)&(sl!=0)R=0;G=Y=1;/SO单独接下,红灯亮,其余灯灭elseif(sO!=0)&(sl!=l)G=0;R=Y=1;/Sl单独按下,球灯亮,其余灯灭elseR=G=Y=0z/SO、SI均按下,3灯均亮if语句嵌套includesbitsO=P17;sbits1=P16;sbitR=P12;sbitG=P11;sbitY=P10;voidmain()whfle(l)if(s!=l)头文件包含访问.近库函数reg5Lh定义位标识