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 <reg51.h>void delay(unsigned char i); //延时函数声明void main() //主函数{while(1){P1=0x55; //按状态1的方式点亮8个LEDdelay(200); //延时P1=0xaa; //按状态2的方式点亮8个LEDdelay(200); //延时}}void delay(unsigned char i) //延时函数参见任务1程序ex1_1.c(2)//xiti3_3_2.c——第三章习题3.3上机操作题(2)#include <reg51.h> //包含头文件REG51.Hvoid delay(unsigned char i); //延时函数声明void main() //主函数{unsigned char i,l,r;while(1){l=0x10; // 高4位灯的位置初值为00010000Br=0x08; // 低4位灯的位置初值为00001000Bfor(i=0;i<4;i++){P1=~(l|r); // 循环点亮灯l<<=1; // 高4位灯的位置移动r>>=1; // 低4位灯的位置移动delay(200); //延时}}}void delay(unsigned char i) //延时函数参见任务1程序ex1_1.c(3)//xiti3_3_3.c——第三章习题3.3上机操作题(3)#include <reg51.h> //包含头文件REG51.Hvoid 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<10;i++){P1=display[i]; //显示字送P1口delay(200); //延时}}}void delay(unsigned char i) //延时函数参见任务1程序ex1_1.c习题4 答案4.2 填空题(1)MCS-51系列单片机定时器的内部结构由以下四部分组成:①定时器T0 ②定时器T1 ③定时器方式寄存器TMOD ④定时器控制寄存器TCON(251系列单片机的定时/计数器,若只用软件启动,与外部中断无关,应使TMOD中的GATE=0(3)51系列单片机的T0用做计数方式时,用工作方式1(16位),则工作方式控制字为TMOD=0x05(4)定时器方式寄存器TMOD的作用是选择定时器T0/T1的工作方式(5)定时器方式寄存器TCON的作用是控制定时器的启动、停止,标志定时器的溢出和中断情况。
(6)51的中断系统由定时控制寄存器TCON、串行口控制寄存器SCON、中断允许寄存器IE、中断优先权寄存器IP等寄存器组成(7)51的中断源有外部中断0、定时器0、外部中断1、定时器1、串行口(8如果定时器控制寄存器TCON中的IT1和IT0位为0,则外部中断请求信号为电平触发方式(9)中断源中断请求撤销包括硬件自动清除、软件清除、硬件配合软件共同清除 等三种形式(10)外部中断0的中断类型号为04. 3(1)51系列单片机定时/计数器的定时功能和计数功能有什么不同?分别应用在什么场合 ?答:当定时/计数器设置为定时工作方式时,计数器对内部机器周期计数,每过一个机器周期,计数器增1,直至计满溢出。
定时器的定时时间与系统的振荡频率紧密相关,如果单片机系统采用12M 晶振,则计数周期为:s 112/110121T 6μ=⨯⨯=,这是最短的定时周期,适当选择定时器的初值可获取各种定时时间。
当定时/计数器设置为计数工作方式时,计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部信号计数,外部脉冲的下降沿将触发计数,检测一个由1到0的负跳变需要两个机器周期,所以,最高检测频率为振荡频率的1/24。
计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。
当需要准确计算时间时往往采用定时器的定时方式,而当要对一些外部事件计数时则采用定时器的计数方式。
(6)什么叫中断?中断有什么特点?答:中断是通过硬件来改变CPU 的运行方向。
计算机在执行程序的过程中,当出现CPU 以外的某种情况,由服务对象向CPU 发出中断请求信号,要求CPU 暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。
这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。
调用中断服务程序的过程类似于调用子程序,其区别在于调用子程序在程序中是事先安排好的;而何时调用中断服务程序事先却无法确定,因为“中断”的发生是由外部因素决定的,程序中无法事先安排调用指令,因此,调用中断服务程序的过程是由硬件自动完成的。
中断的特点:分时操作、实时处理、故障处理习题5答案5.3(2)7段LED 静态显示和动态显示在硬件连接上分别具有什么特点?实际设计时应如何选择使用?答:LED 静态显示时各位数码管相对独立,公共端恒定接地(共阴极)或正电源(共阳极),每个数码管的8个字段分别与一个8位I/O 口地址相连,适合于2个及其以下的数码管显示。
动态显示时各位数码管的段选线相应并联在一起,由一个8位的I/O 口控制,各位的段选线由另外的I/O 口控制。
(4)机械式按键组成的键盘,应如何消除按键抖动?答:可以采用硬件和软件两种方式,硬件上可在键输出端加RS 触发器或单稳态触发器构成去抖电路,软件上可以在检测到有按键按下时,执行一个10ms 左右的延时程序,然后确认该键是否仍保持闭合状态的电平。
(1)周期为25ms的锯齿波发生器C语言源程序如下:#include<abs acc.h>#include<reg51.h>#define DA0832 XBYTE[0x7fff]#define uchar unsigned char#define uint unsigned intuchar i;void delay_100us(){ TH1=0xff; // 置定时器初值0xff9c,即65436,定时0.1ms TL1=0x9c;TR1=1; // 启动定时器1while(!TF1); // 查询计数是否溢出,即定时0.1ms时间到,TF1=1 TF1=0; // 0.1ms时间到,将定时器溢出标志位TF清零}void main(void){ TMOD=0x10; // 置定时器1为方式1while(1){ for(i=0;i<=255;i++) //形成锯齿波输出值,最大255{ DA0832=i; //D/A转换输出delay_100us();}}}(2)周期为50ms的三角波C语言源程序如下:#include<absacc.h>#include<reg51.h>#define DA0832 XBYTE[0x7fff]#define uchar unsigned char#define uint unsigned intuchar i,j;void delay_100us(){ TH1=0xff; //置定时器初值0xff9c,即65436,定时0.1msTL1=0x9c;TR1=1; // 启动定时器1while(!TF1); // 查询计数是否溢出,即定时0.1ms时间到,TF1=1 TF1=0; // 0.1ms时间到,将定时器溢出标志位TF清零}void main(void){ TMOD=0x10; // 置定时器1为方式1while(1){ for(i=0;i<=255;i++) //形成三角波输出值,最大255{ DA0832=i; //D/A转换输出delay_100us();}for(j=255;j>=0;j--)//形成三角波输出值,最大255{ DA0832=j; //D/A转换输出delay_100us();}}}(3)周期为50ms的方波C语言源程序如下:#include<absacc.h>#include<reg51.h>#define DA0832 XBYTE[0x7fff]#define uchar unsigned char#define uint unsigned intuchar i,j;void delay_25ms(){ TH1=0x9e; // 置定时器初值TL1=0x58;TR1=1; // 启动定时器1while(!TF1); // 查询计数是否溢出,即定时25ms时间到,TF1=1 TF1=0; // 25ms时间到,将定时器溢出标志位TF清零}void main(void){ TMOD=0x10; // 置定时器1为方式1while(1){ DA0832=255; //形成方波输出值,最大255 ,D/A转换输出delay_25ms();DA0832=0; //D/A转换输出delay_25ms();}}6.7答:在选定转换通道后,ADC0809工作的主要有以下几个步骤:1.启动A/D转换,给START引脚一个下降沿;2.ALE信号与START信号一般连接在一起,这样使得在ALE信号的前沿写入地址信号,紧接着在其后沿就启动转换;3.查询EOC引脚状态,EOC引脚由0变1,表示A/D转换过程结束;4.允许读数,将OE引脚设置为1状态。