单片机课后习题答案《单片机应用技术》C语言版.pdf_第1页
单片机课后习题答案《单片机应用技术》C语言版.pdf_第2页
单片机课后习题答案《单片机应用技术》C语言版.pdf_第3页
单片机课后习题答案《单片机应用技术》C语言版.pdf_第4页
单片机课后习题答案《单片机应用技术》C语言版.pdf_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习题1答案 1.1 单项选择题 (1) A (2)C (3)A (4) A (5)A (6) A (7)C (8)C (9) D (10)C 1.2 填空题 (1)硬件系统、软件系统 (2)时钟、复位 (3)XTAL1、XTAL2、RST、 (4) 片内数据存储器、片内程序存储器、片外数据存储器、片外 程序存储器 (5)时钟电路 (6)程序存储器 (7)工作寄存器组、位寻址区、用户RAM区 (8)1us、2us (9)上电复位电路、按键复位电路 (10)2、高 1.3 答: 单片微型计算机是指集成在一个芯片上的微型计算机,它的各种功 能部件,包括CPU(Central Processing Unit)、随机存取存储器 RAM(Random Access Memory)、只读存储器ROM(Read-only Memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时器/计 数器等都制作在一块集成芯片上,构成一个完整的微型计算机,可以实 现微型计算机的基本功能。 单片机应用系统是以单片机为核心,配以输入、输出、显示、控制 等外围电路和软件,能实现一种或多种功能的实用系统。 单片机应用系统是由硬件和软件组成的,硬件是应用系统的基础, 软件则是在硬件的基础上对其资源进行合理调配和使用,从而完成应用 系统所要求的任务,二者相互依赖,缺一不可。 1.4 答: P3口各引脚与第二功能表 引脚第二功能信号名称 P3.0RXD串行数据接收 P3.1TXD串行数据发送 P3.2 外部中断0申请 P3.3 外部中断1申请 P3.4T0定时/计数器0的外部输入 P3.5T1定时/计数器1的外部输入 P3.6 外部RAM写选通 P3.7 外部RAM读选通 1.5 答:片内RAM低128单元的配置如下: 地 址功能 30H 7FH数据缓冲区 20H 2FH位寻址区(00H7FH) 18H 1FH第3组工作寄存器 (R7R0) 10H 17H第2组工作寄存器 (R7R0) 08H 0FH第1组工作寄存器 (R7R0) 00H 07H第0组工作寄存器 (R7R0) 寄存器常用于存放操作数及中间结果等;内部RAM的20H2FH单 元,既可作为一般RAM单元使用,进行字节操作,也可以对单元中每 一位进行位操作;在内部RAM低128单元中,通用寄存器占去了32个单 元,位寻址区占去了16个单元,剩下80个单元,这就是供用户使用的一 般RAM区,其单元地址为30H7FH。 片内RAM高128单元安排有21个特殊功能寄存器,其他空闲单元用 户不能使用。 1.6 答:有21个可寻址的特殊功能寄存器,它们不连续地分布在片内 RAM的高128单元中,尽管其中还有许多空闲地址,但用户不能使用。 另外还有一个不可寻址的特殊功能寄存器,即程序计数器PC,它不占 据RAM单元,在物理上是独立的。 在可寻址的21个特殊功能寄存器中,有11个寄存器不仅可以字节寻 址,也可以进行位寻址。 1.7 答: 程序状态字是一个8位寄存器,用于存放程序运行中的各种状态信 息。其中有些位的状态是根据程序执行结果,由硬件自动设置的,而有 些位的状态则由软件方法设定。PSW的位状态可以用专门指令进行测 试,也可以用指令读出。PSW的各位定义下表所示。 PSW位定义 位地址D7HD6HD5HD4HD3HD2HD1HD0H 位名称 CY ACF0RS1RS0OVF1P CY(PSW.7):进位标志位。CY是PWS中最常用的标志位,其功 能有两个:一是存放算术运算的进位标志,在进行加或减运算时,如果 操作结果最高位有进位或借位,则CY由硬件置“1”,否则被清“0”;二是 在位操作中,作累加位使用。位传送、位与位或等位操作,操作位之一 固定是进位标志位。 AC(PSW.6):辅助进位标志位。在进行加或减运算中,若低4 位向高4位进位或借位,AC由硬件置“1”,否则被清“0”。在BCD码调整 中也要用到AC位状态。 F0(PSW.5):用户标志位。这是一个供用户定义的标志位,需 要利用软件方法置位或复位,用来控制程序的转向。 RS1和RS0(PSW.4,PSW.3):工作寄存器组选择位。它们被用 于选择CPU当前使用的通用寄存器组。通用寄存器共有4组,其对应关 系如下表所示。 工作寄存器组选择 RS1 RS0 寄存器组 片内RAM地址 0 0第0组00H07H 0 1第1组08H0FH 1 0第2组10H17H 1 1第3组18H1FH 这两个选择位的状态是由软件设置的,被选中的寄存器组即为当前 通用寄存器组。但当单片机上电或复位后,RS1 RS0=00。 OV(PSW.2):溢出标志位。在带符号数加减运算中,OV=1表 示加减运算超出了累加器A所能表示的符号数有效范围(-128 +127),即产生了溢出,因此运算结果是错误的;OV=0表示运算正 确,即无溢出产生。 在乘法运算中,OV=1表示乘积超过255,即乘积分别在B与A中; 否则,OV=0,表示乘积只在A中。 在除法运算中,OV=1表示除数为0,除法不能进行;否则, OV=0,除数不为0,除法可正常进行。 F1(PSW.1):保留未使用。 P(PSW.0):奇偶标志位。P标志位表明累加器A中内容的奇偶 性,如果A中有奇数个“1”,则P置“1”,否则置“0”。凡是改变累加器A中 内容的指令均会影响P标志位。 此标志位对串行通信中的数据传输有重要的意义。在串行通信中常 采用奇偶校验的办法来校验数据传输的可靠性。 1.8 答: 0003H002AH这40个单元被均匀地分为5段,作为5个中断源的中断 地址区。其中: 0003H000AH 外部中断0中断地址区 000BH0012H 定时器/计数器0中断地址区 0013H001AH 外部中断1中断地址区 001BH0022H 定时器/计数器1中断地址区 0023H002AH 串行中断地址区 中断响应后,按中断种类,自动转到各中断区的首地址去执行程 序。因此在中断地址区中理应存放中断服务程序。但通常情况下,8个 单元难以存下一个完整的中断服务程序,因此通常也是从中断地址区首 地址开始存放一条无条件转移指令,以便中断响应后,通过中断地址 区,再转到中断服务程序的实际入口地址。 1.9 答: 当需要扩展存储器时,低8位地址A7A0和8位数据D7D0由P0口 分时传送,高8位地址A15A8由P2口传送。 因此,只有在没有扩展片外存储器的系统中,P0口和P2口的每一位 才可作为双向I/O端口使用。 1.10 答: 单片机晶振电路 一般地,电容C1和C2取30pF左右,晶体的振荡频率范围是1.2MHz 12 MHz。如果晶体振荡频率高,则系统的时钟频率也高,单片机运 行速度也就越快。MCS-51在通常应用情况下,使用振荡频率为的6MHz 或12MHz的晶振,如果系统中使用了单片机的串行口通信,则一般采用 振荡频率为11.059MHz的晶振。 1.11 答: 规定一个机器周期的宽度为12个振荡脉冲周期,因此机器周期就是 振荡脉冲的十二分频。 当振荡脉冲频率为12 MHz时, 一个机器周期为1s;当振荡脉冲频率 为6 MHz时,一个机器周期为2 s。 1.12 答: (a) 上电复位电路 (b) 按键复位电路 单片机常见的复位电路 图(a)为上电复位电路,它是利用电容充电来实现的。在接电瞬 间,RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐 下降。只要保证RST为高电平的时间大于两个机器周期,便能正常复 位。 图(b)为按键复位电路。该电路除具有上电复位功能外,若要复 位,只需按图(b)中的RESET键,此时电源VCC经电阻R1、R2分压, 在RST端产生一个复位高电平。 习题2答 案 2.1 单项选择题 (1)C (2)A (3)B (4)A (5)D 2.2 答: 单片机开发过程所用的设备与软件称为单片机开发系统或开发工具。 单片机开发系统包括计算机、单片机在线仿真器、开发工具软件、 编程器等。连接方法如下图所示。 单片机开发系统连接方法示意图 2.3 答:单片机应用系统的开发过程如下: 设计电路图制作电路板程序设计硬软件联调程序下载产 品测试 2.4 答: 1.在线仿真功能 在线仿真器(In Circuit Emulator,简称ICE)是由一系列硬件构成 的设备,它能仿真用户系统中的单片机,并能模拟用户系统的ROM、 RAM和I/O口。因此,在线仿真状态下,用户系统的运行环境和脱机运 行的环境完全“逼真”。 2.调试功能 1) 运行控制功能 开发系统应能使用户有效地控制目标程序的运行,以便检查程序运 行的结果,对存在的硬件故障和软件错误进行定位。 2) 单片机状态查看修改功能 当CPU停止执行程序运行后,开发系统允许用户方便地读出或修改 目标系统资源的状态,以便检查程序运行的结果、设置断点条件以及设 置程序的初始参数。任务2中图2.13给出了在Medwin调试环境下查看单 片机内部资源的菜单。 3.程序编译功能 1) 程序设计语言 单片机程序设计语言包括机器语言、汇编语言和高级语言。 机器语言是单片机唯一能够识别的语言。 汇编语言具有使用灵活、实时性好的特点。目前,在实际项目开发 中较少使用汇编语言。 高级语言通用性好,且具有较好的可读性和可移植性,是目前单片 机编程语言的主流。 2) 程序编译 单片机开发系统能够提供源程序的编辑、编译和下载功能以及工程 管理功能。 4.程序固化功能 编程器是完成这种任务的专用设备,它也是单片机开发系统的重要 组成部分。 习题3 答案 3.1 单项选择题 (1) A (2) A (3) C (4)C (5) A (6) B (7) D (8) D (9)A (10)A (11)B (12)C (13)D (14)D (15)C 3.2 填空题 (1)P3口 (2)字节,位 (3)主函数main() (4)sbit FLAG=P31; (5)sfr (6)顺序结构、选择结构和循环结构 (7)表达式加上分号“;” (8) if, switch (9)do-while, while (10)无限次 (11)10000 (12)unsigned char (13)变量在MCS-51硬件系统中所使用的存储区域 (14)0 (15)程序存储器ROM中 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 for(i=0;i=1; / 低4位灯的位置移动 delay(200); /延时 void delay(unsigned char i) /延时函数参见任务1程序 ex1_1.c (3) /xiti3_3_3.c第三章习题3.3上机操作题(3) #include /包含头文件REG51.H void delay(unsigned char i); /延时函数声明 void main() /主函数 unsigned char i; unsigned char display=0x89, 0xff,0x86, 0xff,0xc7, 0xff,0xc7, 0xff,0xc0, 0xff; while(1) for(i=0;i #include #define DA0832 XBYTE0x7fff #define uchar unsigned char #define uint unsigned int uchar i; void delay_100us() TH1=0xff; / 置定时器初值0xff9c,即65436,定时0.1ms TL1=0x9c; TR1=1; / 启动定时器1 while(!TF1); / 查询计数是否溢出,即定时0.1ms时间到,TF1=1 TF1=0; / 0.1ms时间到,将定时器溢出标志位TF清零 void main(void) TMOD=0x10; / 置定时器1为方式1 while(1) for(i=0;i #include #define DA0832 XBYTE0x7fff #define uchar unsigned char #define uint unsigned int uchar i,j; void delay_100us() TH1=0xff; /置定时器初值0xff9c,即 65436,定时0.1ms TL1=0x9c; TR1=1; / 启动定时器1 while(!TF1); / 查询计数是否溢出,即定时 0.1ms时间到,TF1=1 TF1=0; / 0.1ms时间到,将定时器溢出标志 位TF清零 void main(void) TMOD=0x10; / 置定时器1为方式1 while(1) for(i=0;i=0;j-)/形成三角波输出值,最大255 DA0832=j; /D/A转换输出 delay_100us(); (3)周期为50ms的方波C语言源程序如下: #include #include #define DA0832 XBYTE0x7fff #define uchar unsigned char #define uint unsigned int uchar i,j; void delay_25ms() TH1=0x9e; / 置定时器初值 TL1=0x58; TR1=1; / 启动定时器1 while(!TF1); / 查询计数是否溢出,即定时25ms时间到,TF1=1 TF1=0; / 25ms时间到,将定时器溢出标志位TF清零 void main(void) TMOD=0x10; / 置定时器1为方式1 while(1) DA0832=255; /形成方波输出值,最大255 ,D/A转换输出 delay_25ms(); DA0832=0; /D/A转换输出 delay_25ms(); 6.7 答: 在选定转换通道后,ADC0809工作的主要有以下几个步骤: 1启动A/D转换,给START引脚一个下降沿; 2ALE信号与START信号一般连接在一起,这样使得在ALE信号的前 沿写入地址信号,紧接着在其后沿就启动转换; 3查询EOC引脚状态,EOC引脚由0变1,表示A/D转换过程结束; 4允许读数,将OE引脚设置为1状态。 5读取A/D转换结果,从ADC0809的外部地址读取其转换结果。 习题7答案 7.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 7.2 答: 在异步通信中,数据是不连续传送的,数据通常是以字符为单位组成字符帧传送的。字符帧由 发送端一帧一帧地发送,每一帧数据是低位在前,高位在后,通过传输线被接收端一帧一帧地 接收。发送端和接收端可以由各自独立的时钟来控制数据的发送和接收,这两个时钟彼此独 立,互不同步。 异步通信的字符帧格式分为无空闲位帧格式和有空闲位帧格式。 7.3 答: T1的溢出率取决于单片机定时器T1的计数速率和定时器的预置值。 当定时器T1做波特率发生器使用时,通常是工作在模式2,即自动重装 载的8位定时器,此时TL1作计数用,自动重装载的值在TH1内。设计数 的预置值(初始值)为X,那么每过256-X个机器周期,定时器溢出一 次。为了避免溢出而产生不必要的中断,此时应禁止T1中断。 7.4 答: 参考程序如下: #include #define uchar unsigned char code uchar tab= 0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f; uchar send=0x04,0x03,0x02,0x01,0x08,0x07,0x06,0x05; int i,t; /延时函数,当t取值12000时,若晶振fosc=12MHz,大约延时1s void delay(t) for(i=0;i #include #include #include #include #define uchar unsigned char uchar FREQ; /*定时器计数 变量*/ void main(void) / 以下是设置中断和定时器 EA=1; PT0=1; ET0=1; TCON=0x08; TMOD=0x21; / 定时器0为产生10ms的中断,定时器1为9600bit/s 的波特 率发生器 TH0=-10000/256; TL0=-10000%256; TL1=0xfd; TH1=0xfd; SCON=0xd8; /串行口方式3发送 PCON=0x00; TR1=1; / 开定时器 TR0=1; TI=1; while(1) / 定时器0的中断服务程序,向串口发送“A”数据 void intsvr1(void) interrupt 1 / 重新装入定时器0的初值; TH0=-10000/256; TL0=-10000%256; FREQ=FREQ+1; / 定时器T0的低四位 赋值 if (FREQ=100) / 1秒判断 FREQ=0; printf(“A“); / 发送字符 乙机接收子程序参考如下: #include #define uchar unsigned char void main(void) uchar astring; /在11.059MHz晶振下,设置串行口波特率为9600bit/s,用串行 口方式3接收 TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SCON=0xdb; PCON=0x00; while(1) while(RI=0); RI=0; astring=SBUF; lcd_display(); /液晶显示参考前面章节程序 7.6 答: 参考程序如下: #include #define INBUF_LEN 4 /数据长度 unsigned char inbuf1INBUF_LEN; unsigned char checksum,count3; bit read_flag= 0 ; /串行口初始化函数:init_serialcomm /函数功能:串行口初始化,设置波特率为4800bit/s,允许串口中断 /形式参数:无 /返回值:无 void init_serialcomm( void ) SCON = 0x50 ; /SCON: 串行口方式1,允许接收 TMOD |= 0x20 ; /设置定时器1为方式2定时 PCON |= 0x80 ; /SMOD=1; TH1 = 0xf4 ; / 波特率4800bit/s, fosc=11.0592MHz TL1 = 0xf4 ; IE = 0x90 ; /开串口中断 TR1 = 1 ; / 启动定时器1 /发送字符函数:send_char_com /函数功能:向串口发送一个字符 /形式参数:存放字符的变量ch, unsigned char类型 /返回值:无 void send_char_com( unsigned char ch) SBUF=ch; while (TI= 0 ); TI= 0 ; /发送字符串函数:send_string_com /函数功能:向串口发送一个字符串,strlen为该字符串长度 /形式参数:字符串变量*str, unsigned char 类型; 字符串长度 strlen, unsigned int /类型 /返回值: 无 void send_string_com( unsigned char *str, unsigned int strlen) unsigned int k= 0 ; do send_char_com(*(str + k); k+; while (k 127 ) count3= 0 ; inbuf1count3=ch; checksum= ch- 128 ; else count3+; inbuf1count3=ch; checksum = ch; if ( (count3=(INBUF_LEN- 1 ) /如果串口接收的数据达到INBUF_LEN个,且校验 没错, /就置位取数标志 void main() /主函数 init_serialcomm(); /初始化串

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论