单片机期末考试总复习

  • 格式:doc
  • 大小:214.00 KB
  • 文档页数:7

单片机总复习

1.什么是单片机?

答:单片机就是在一片半导体硅片上集成了中央处理单元(CPU)、存储器(RAM、ROM)、并行I/O口、定时器/计时器、中断系统、系统时钟电路及系统总线的微型计算机。

2.单片机AT89C52的硬件结构(P16图2-1):

答:硬件组成:CPU、数据存储器(RAM)、程序存储器(ROM)、4个8位可编程并行I/O口、串行口、2个16位定时器/计数器、1个看门狗定时器、中断系统(5个中断源和中断向量)、特殊功能寄存器(26个)、低功耗节电模式、3个程序加密锁定位。

3.单片机的引脚及其所对应的功能:

答:电源引脚:VCC、VSS

时钟引脚:XTAL1(19脚,输入端)

XTAL2(18脚,输出端)

控制引脚:RST(9脚),复位信号输入端,高电平有效

/VPP(31脚):接低电平时,为外部程序存储器访问允许控制端;接高电平时,单片机读片内程序存储器的程序。

并行I/O口引脚:(P1、P2、P3、P4)(注:P0口一定要外接上拉电阻,P3口的第二功能一定要掌握)

P3口第二功能如下:

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):外部数据存储器读选通输出

4.AT89S51存储器的结构:(P22)

答:(5个)

(1)(内部,外部)程序存储器(4KB):5个入口地址(P24表2-3)

1)外部中断0,入口地址:0003H;

2)定时器T0, 入口地址:000BH;

3)外部中断1,入口地址:0013H;

4)定时器T1, 入口地址:001BH;

5)串行口, 入口地址:0023H;

6)(AT89S52) 定时器T2, 入口地址:002BH;

(2)(内部,外部)数据存储器(3个大块):4组寄存器区、位地址区、用户RAM区;

(3)特殊功能寄存器(范围:80H-FFH,只能用间接寻址方式进行访问)具体功能见P25表2-4位地址空间.

5. 四组并行I/O端口区别:

答:P0口为漏极开路的双向I/O端口,分为地址/数据复用口和通用的I/O端口,当作为通用的I/O端口时,必须要加上拉电阻;

P1口为准双向I/O端口,具有内部上拉电阻,专为用户使用;

P2口为准双向I/O端口,具有内部上拉电阻,当AT89S51扩展外部存储器及I/O端口时,可作为高8位地址总线;

P3口为准双向I/O端口,具有内部上拉电阻,除可作通用的I/O端口外,还具有第二功能的输出/输入。

6.机器周期、指令周期和时钟周期的概念:

答:机器周期:指的是计算机完成一次完整的、基本的操作所需要的时间,MCS-51一个机器周期由六个状态周期组成,共12个振荡周期。

指令周期:执行完一条指令所需要的时间,一般为1-4个机器周期。

时钟周期:它是输入时钟信号频率fOSC的倒数。如果时钟信号或晶体振荡器的频率为12 MHz,则振荡周期T=1/12=83 ns。 7.时钟电路:(P35)

8.单片机最小系统电路图:

9.复位操作、复位电路:(P37表2-7)

答,复位操作(只记特殊的2个):SP(复位状态:07H);P0-P3(复位状态:FFH)

复位电路:(上电复位电路)

10.Keil软件和Proteus软件的使用方法:

答:(1).新建工程目录:最好是英文名称,如e盘的sy1

(2).打开Proteus软件(桌面上的ISIS.EXE)

(3).添加元件

(4).放置元件,设置参数,连线,绘制原理图

(5).保存到工程目录sy1

(6).打开keil软件

(7).新建工程 :

右击Target 1

新建源程序文件并保存,注意,后缀要是asm

添加源程序到工程

编写程序并编译生成hex文件

目录下生成了hex文件

回到Proteus界面,双击单片机添加hex文件

运行,查看结果

11.中断的概念:

答.中断:单片机能及时地响应中断源提出的服务请求,并作出快速响应和及时处理。

12.中断系统结构:

答:5个中断请求源,两个中断优先级;

5个中断请求源:(1)——外部中断请求0,中断请求信号由引脚输入,中断请求标志为IE0。 2204K722uRSTVCC上电复位(2) ——外部中断请求1,中断请求信号由引脚输入,中断请求标志为IE1。

(3)定时器/计数器T0计数溢出发出的中断请求,中断请求标志为TF0。

(4)定时器/计数器T1计数溢出发出的中断请求,中断请求标志为TF1。

(5)串行口中断请求,中断请求标志为发送中断TI或接收中断RI。

13.5(6)个中断向量号是什么?

(1)中断向量号0:外部中断请求;

(2)中断向量号1;定时器/计数器T0;

(3)中断向量号2:外部中断请求;

(4)中断向量号3:定时器/计数器T1;

(5)中断向量号4:TX和RX寄存器;

(S52所具有)(6)中断向量号5:定时器/计数器T2;

14.中断初始化设置和中断服务程序的设计:

答:中断初始化设置:IT0=1;

IT1=0;

EX0=1;

EX1=1;

EA=1;

(T0优先级设置则再加) PT0=1;

(优先级设置则再加) PX0=1;

(优先级设置则再加) PX1=1;

(T1优先级设置则再加) PT1=1;

(T2优先级设置则再加) PT2=1;★以上需按要求进行设置

中断服务程序:void main()

{IT0=1;

EX0=1;

EA=1;

while(1) ;}

void int0(void) interrupt0

{P1=0x0;

delay(50000);

P1=0xff;}

15.定时器/计数器的结构:

答:定时器/计数器T0由特殊功能寄存器TH0、TL0构成;

定时器/计数器T1由特殊功能寄存器TH1、TL1构成;

特殊功能寄存器TMOD用于选择定时器/计数器T0、T1的工作模式和工作方式;

特殊功能寄存器TCON用于控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。

16. TMOD、TCON寄存器:

C/T=0为定时器工作模式;

C/T=1为计数器工作模式;

例如:T0方式段进行计数,采用工作方式2,则TMOD=0x06(0110);若为定时,则TOMD=0x02(0010);

17.定时器/计数器四种工作方式的特点(表6-1)

(注:只记方式1和方式2即可)

18.定时初值的计算:

答:定时初值计算公式:TC=M-T定时时间/T机器周期(注:若采用工作方式1,M=216;若采用工作方式2,M=28)

例如:定时108us,TC=M-108us/1.08us。

19.编写程序使P1.0端口上输出频率为2KHz的方波:

答:由f=2KHz,得到周期T=500us,则1/2T=250us;进而得到TC=28-250=6;程序如下:

若采用工作方式2:void main()

{TMOD=0x20;

TL1=6;

TH1=6;

ET1=1;

EA=1;

TR1=1;

while(1);

}

void T1INT() interrupt3

{P1=P1^0x01;}

若采用工作方式1:TMOD=0x10;

TL1=0x06;

TH1=0xff;

ET1=1;

EA=1;

TR1=1;

void T1INT() interrupt3

{TL1=0x06;

TH1=0xff;

P1=P1^0x01;}

20.单片机与数码管动态显示接口技术程序如下:

#include

unsigned char code tab[6]={0x06,0x5b,0x4f,0x66,0x6d,0x7d}; unsigned char data ram[6]={0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void delay(unsigned int cnt)

{

while(--cnt);

}

void main()

{

unsigned char k,j;

while(1)

{

for(j=0,k=0;k<6;k++,j++)

{

P2=ram[j];

P0=tab[k];

delay(60000);

P2=0xff;

}

}

}

21.单片机独立键盘接口技术程序如下:

include

sbit key1 = P3^4;

sbit key2 = P3^5;

sbit key3 = P3^6;

sbit key4 = P3^7;

unsigned char data displayram[6];

unsigned char code displaytab[]=

{

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,

0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xff,0x00,0x40,

};

void display(unsigned char data displayram[6])

{

unsigned char i,m,j=0x00;

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

{

P2=j;

P0=displaytab[displayram[i]];

m=2000;

while(--m);

P2=0xff;

j=(j>>1)|0x80;

}