单片机总复习
4.#include
5.sbit不可以用于定义内部RAM的可位寻址区,只能用在可位寻址的SFR上。(× ) 6.Continue 和break都可用来实现循环体的中止。( × ) 7.若一个函数的返回类型为void,则表示其没有返回值。( √ ) 8.所有定义在主函数之前的函数无需进行声明。( × ) 9.int i,*p=&i;是正确的C说明。( √ ) 10.7&3+12的值是15。( × )
11.一个函数利用return不可能同时返回多个值。( √ )
12.存储器分成内存和外存两大部分,其中外内存可以直接与CPU交换信息。× 13.P2口既可以作为I/O使用,又可以作地址/数据复用口使用。√
14.在中断响应阶段CPU一定要做如下2件工作:保护断点和给出中断服务程序入口地址。√
15.DPTR是由DPH和DPL两个8位特殊寄存器组成的。 √ 16.C51中,特殊功能寄存器一定需要用大写。 ( √ ) 17.使用片内存储器时,EA脚必须置低。( × )
18.单片机外部中断时只有用低电平触发。( × )
19.bit定义的变量一定位于内部RAM的位寻址区。( √ ) 20.采用单片机的C语言开发时,只能利用C51语言书写程序,不能嵌套汇编语言。( × ) 21.MCS-51单片机的程序存储器是可以用来存放数据的。( √ )
22.bit和sbit都是用来定义位变量,所以两者之间没有区别,可以随便替换使用。( × ) 23.串口中断请求标志必须由软件清除。( √ )
四、简答题
1. MCS-51的位存储区在哪里?寻址范围是多少?
答:内部RAM的20~2FH为位寻址区域,位地址范围00~7FH;特殊功能寄存器中地址能被8
整除的字节地址单元也可以位寻址,位地址范围80~FFH;位存储区共256个位。 2.各中断源对应的中断服务程序的入口地址是否能任意设定?
答:各中断源的入口地址已经在中断地址区中被定义了,不能任意设定。 3. 如何正确使用P3口?
答: (1)说明P3口有第一功能和第二功能的使用。 (2)P3口的第二功能各位线的含义。
(3)使用时应先按需要选用第二功能信号,剩下的口线才作I/O线用。 (4)读引脚数据时,必需先给锁存器输出“1”。 4. 简述MCS-51单片机的中断入口地址。
答:中断入口地址为中断响应后PC的内容即中断服务的入口地址。 它们是:外部中断0 0003H
定时器T0中断 000BH 外部中断1 0013H
定时器T1中断 001BH 串行口中断 0023H 5. 简述串行数据传送的特点。
答:(1)传送按位顺序进行,速度慢。 (2)传输线少,成本低。
6
单片机总复习
(3)传送距离远,可达几公尺到几千公里。
6.MCS-51的中断系统有几个中断源?几个中断优先级?中断优先级是如何控制的?在出现同级中断申请时,CPU按什么顺序响应(按由高级到低级的顺序写出各个中断源)?各个中断源的入口地址是多少?
答:MCS51单片机有5个中断源,2个中断优先级,中断优先级由特殊功能寄存器IP控制,
在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串口,各个中断源的入口地址分别是0003H、000BH、0013H、001BH、0023H。
7.已知单片机系统晶振频率为6MHz,若要求定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是多少?TMOD的值是多少?TH0=?TL0=?(写出步骤) 答:定时值为10ms时,定时器T0工作在方式1时, 定时器T0对应的初值是1388H
TMOD的值是00000001B,TH0=13H;TL0=88H。 8.MCS-51单片机内部包括哪些主要逻辑功能部件? 答:MCS-51单片机主要由下列部件组成: 1个8位CPU;
1个片内振荡器及时钟电路;
4KB ROM程序存储器,256BRAM; 21个特殊功能寄存器; 2个16位定时/计数器;
4个8位并行I/O口及1个可编程全双工串行接口; 可寻址64KB的外部程序存储器空间; 可寻址64KB的外部数据存储器空间;
5个中断源、两个优先级中断嵌套中断结构。
9.MCS-51单片机内部有几个定时/计数器?它们由哪些寄存器组成?
答:MCS-51单片机内部有两个16位可编程的定时/计数器,简称定时器0(T0)和定时器1(T1)。它们分别由方式寄存器TMOD、控制寄存器TCON和数据寄存器TH0、TL0,TH1、TL1组成。
10.单片机对中断优先级的处理原则是什么?
答:(1)低优先级中断源可被高优先级中断源所中断,而高优先级中断源不能被任何中断源
所中断;
(2)一种中断源(不管是高优先级还是低优先级)一旦得到响应,与它同级的中断源不
能再中断它。
当同时收到几个同一优先级的中断时,响应哪一个中断源取决于内部查询顺序。其优先
级排列如下:
中断源 同级内的中断优先级 外部中断0 最高 定时器/计数器0溢出中断 外部中断1
定时器/计数器1溢出中断
串行口中断 最低 11.简述子程序调用和执行中断服务程序的异同点。
答:相同点:均能中断主程序执行本程序,然后再返回断点地址继续执行主程序。 不同点:
1) 中断服务程序入口地址是固定的,子程序调用入口地址是用户自己设定的。
7
单片机总复习
2) 中断服务子程序返回指令除具有子程序返回指令所具有的全部功能之外,还有清除
中断响应时被置位的优先级状态、开放较低级中断和恢复中断逻辑等功能。
3) 中断服务子程序是在满足中断申请的条件下,随机发生的;而子程序调用是用户主
程序事先安排好的。
12.已知晶振频率为6MHz,在P1.0引脚上输出周期为500微秒的等宽矩形波,若采用T1
中断,工作方式2,试写出中断初始化程序。 13.C51 的data、bdata、idata 有什么区别?
答:data、bdata、idata是表明数据的存储类型,
data是指片内RAM的低128字节,可在一个周期内直接寻址; bdata是指片内RAM的位寻址区,16字节;
idata是指片内RAM的256字节,必须采用间接寻址。
14.C51中的中断函数和一般的函数有什么不同?
答:C51编译器允许用C51创建中断服务函数,中断函数是由中断系统自动调用的。 中断函数的定义格式为:
函数类型 函数名 interrupt n using n 其中:
interrupt和using为关键字;
interrupt后面的n 为中断源的编号,即中断号; using后面的n所选择的寄存器组,取值范围为0~3。
定义中断函数时,using是一个选项,可以省略不用。如果不用using选项,则由编译器选择一个寄存器组作为绝对寄存器组。
8051的中断过程通过使用interrupt关键字和中断号(0~31)来实现,中断号告诉编译器中断函数的入口地址。
15.按照给定的数据类型和存储类型,写出下列变量的说明形式
(1)在data区定义字符变量val1 答:char data vall;
(2)在idata区定义整型变量val2 答:int idata val2;
(3)在xdata区定义无符号字符型数组val3[4]。 答:unsigned xdata val3[4];
(4)在xdata区定义一个指向char类型的指针px。 答:char xdata *px; (5)定义可位寻址变量flag。 答:bit flag;
(6)定义特殊功能寄存器变量P3。 答:Sfr P3=0xB0;
16.在有串行通信时,定时器/计数器1的作用是什么,怎样确定串行口的波特率? 17.MCS-51外扩的程序存储器和数据存储器可以有相同的地址空间,但不会发生数据冲突,为什么? 答:因为访问外扩的程序存储器和数据存储器执行的指令不同,所发出的控制信号也就不同。 读外部数据存储器时,RD信号有效。写外部数据存储器时,WR*信号有效。而读外部
程序存储器时,PSEN*信号有效。由于发出的控制信号不同,且只能有一种信号有效,
8
单片机总复习
因此,即使MCS-51外扩的程序存储器和数据存储器有相同的地址空间,也不会发生数据冲突。
18.说明MCS-51的外部引脚EA的作用? 答: EA是内外程序存储器选择控制信号。 当EA=0时,只选择外部程序存储器。 当EA=1时,当PC指针≤0FFFH时,只访问片内程序存储器;当PC指针>0FFFH时,
则访问外部程序存储器
19.D/A转换器的主要性能指标都有哪些?设某DAC为二进制12位,满量程输出电压为
5v,试问它的分辨率是多少?
五、综合应用题
1.设单片机时钟频率为6MHz,利用T0在P1.0引脚输出50ms周期的方波。
#include \sbit P10=P1^0; void main() {
TMOD=0x01;
TH0=(65536-12500)/256; TL0=(65536-12500)%6; ET0=1; EA=1; TR0=1; while(1); }
void T0_srv(void)interrupt 1 using 1 {
TH0=(65536-12500)/256; TL0=(65536-12500)%6; P10=!P10; }
2.分析下面程序实现什么功能?
#include \#include \void init_ser()
{ SCON = 0x50; /*SCON:工作模式1,8-bit UART,允许接收*/ TMOD |= 0x20; /*TMOD:定时器T1,工作模式2, 8位自动重载方式*/ TH1 = 0xf3; /*当波特率为2400时,定时器初值*/ TR1 = 1; /*定时器T1开始运行*/ TI = 1; /*允许发送数据*/ }
long factorial(int n) reentrant { long result; if(n==0)
9
单片机总复习
result=1; else result=n*factorial(n-1); return result; }
void main() { int j; long tmp; long (*p)(int n); /*函数指针变量定义*/ init_ser(); p=(void*)factorial; /*函数指针变量p指向factorial()函数*/ for(j=0;j<11;++j) { tmp=(*p)(j); /*用指针变量p调用factorial()函数*/ printf(\ } for(;;){;} }
解:输出0~10的阶乘。
3. 假设单片机的晶体振荡器的频率是12MHz,利用定时器1采用方式1定时20ms,写出初值的计算过程和整个定时器初始化程序,同时写出在P1.7脚上输出0.2秒的方波的完整程序。 4. 画出下列要求的原理图,假设单片机的P1口的连接8个LED,P3连接8的对地的按键,当某个按钮按下时相应的LED点亮。根据描述画出原理图,并编写程序控制?
5. 某单片机控制系统有8个发光二极管。试画出89C51与外设的连接图并编程使它们由左向右轮流点亮。
6. 某控制系统有2个开关K1和K2,1个数码管,当K1按下时数码管加1,K2按下时数码管减1。试画出8051与外设的连接图并编程实现上述要求。
7. 在8051系统中,已知振荡频率是12MHz,用定时器/计数器T0实现从P1.1产生周期是
10