单片机原理及应用基于Proteus和KeilC.docx

上传人:b****8 文档编号:9808983 上传时间:2023-02-06 格式:DOCX 页数:53 大小:203.38KB
下载 相关 举报
单片机原理及应用基于Proteus和KeilC.docx_第1页
第1页 / 共53页
单片机原理及应用基于Proteus和KeilC.docx_第2页
第2页 / 共53页
单片机原理及应用基于Proteus和KeilC.docx_第3页
第3页 / 共53页
单片机原理及应用基于Proteus和KeilC.docx_第4页
第4页 / 共53页
单片机原理及应用基于Proteus和KeilC.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

单片机原理及应用基于Proteus和KeilC.docx

《单片机原理及应用基于Proteus和KeilC.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用基于Proteus和KeilC.docx(53页珍藏版)》请在冰豆网上搜索。

单片机原理及应用基于Proteus和KeilC.docx

单片机原理及应用基于Proteus和KeilC

第一章

1.什么是单片机?

在一块集成电路芯片上集成了微处理器、存储器、输入接口、输出接口、定时器/计数器、中断等基本电路所构成的单片微型计算机,简称单片机(Single-Chip-Microcomputer)。

单片机有较强的控制功能,主要取决于单片机在其结构上的设计,包括单片机硬件、指令系统及I/O处理功能等方面都有独到之处。

虽然单片机只是一个芯片,但无论从组成还是从其逻辑功能上来看,都具有微机系统的含义。

2.单片机应用灵活性体现在哪些方面?

单片机以其自身的特点,其应用领域已渗透入各个领域。

单片机的主要特点是体积小、功耗低、价格低廉、使用方便,控制功能强、便于进行位运算且具有逻辑判断、定时计数等多种功能。

单片机应用系统设计灵活,在系统硬件不变的情况下,可通过不同的程序可实现不同的功能,因此这从根本改变了传统控制系统的设计思想和设计方法。

过去必须由模拟电路、数字电路及继电器控制电路实现的大部分功能,现在已能用单片机并通过软件方法实现。

由于软件技术的飞速发展,各种软件系列产品的大量涌现,可以极大地简化硬件电路。

“软件就是仪器”已成为单片机应用技术发展的主要特点。

3.简述单片机的发展历程。

1976年,Inter公司推出了MCS-48系列8位单片机

到目前为止,世界各地厂商已相继研制出大约50个系列300多个品种的单片机产品。

代表产品有Intel公司的MCS-51系列(以下简称51系列)机(8位机)

目前,市场上的主流产品是51系列兼容机:

由STC公司推出的高性价比的STC89系列单片机和Atmel公司生产的AT89系列单片机。

随着集成电路的发展,随之出现内核为32位的ARM处理器,

在单片机家族的众多成员中,51系列单片机以其优越的性能、成熟的技术及高可靠性和高性能价格比,迅速占领了工业测控和自动化工程应用的主要市场,

在8位单片机的基础上,又推出超8位单片机,其功能进一步加强,同时16位单片机也相继产生,代表产品有Intel公司的MCS-96系列以及ATMEL推出的AVR单片机。

4.计算机能够识别的数值是什么?

为什么要引进十六进制数?

在计算机中,由于所采用的电子逻辑器件仅能存储和识别两种状态的特点,计算机内部一切信息存储、处理和传送均采用二进制数的形式。

可以说,二进制数是计算机硬件能直接识别并进行处理的惟一形式。

十六进制数可以简化表示二进制数。

5.数值转换。

(1)37=(100101)B=(25)H

(2)12.875=(1100.111)B=(0CE)H

(3)10110011B=(0B3)H=(179)10

(4)10111.101B=(17.A)H=(23.625)10

(5)56H=(01010110)B=(86)10

(6)3DFH=(001111011111)B=(991)10

(7)1A.FH=(11010.1111)B=(26.9375)10

(8)3C4DH=(11110001001101)B=()10

6.对于二进制数10001001B,若理解为无符号数,则该数对应十进制数为多少?

若理解为有符号数,则该数对应十进制数为多少?

若理解为BCD数,则该数对应十进制数为多少?

137-11989

7.列出下列数据的反码、原码和补码。

(1)+123

(2)-127(3)+45(4)-278

(1)011110110111101101111011

(2)100000001111111110000001

(3)101101101101101101

(4)111111*********11000000100010110111111*********0

8.简述单片机的仿真过程和开发过程。

可以使用protues仿真软件首先建立电路原理图,然后调入由keil编译连接的.hex文件(参考本章项目实例);

开发过程:

(参考第8章)

第2章

1.51单片机包括哪些主要逻辑功能部件?

各功能部件的主要作用是什么?

简单说明不同型号的差别。

8051单片机内部由CPU、4KB的ROM、128B的RAM、4个8位的I/O并行端口、一个串行口、两个16位定时/计数器及中断系统等组成。

2.程序状态字寄存器PSW各位的定义是什么?

PSW是一个8位寄存器,用于寄存当前指令执行后的某些状态,即反映指令执行结果的一些特征信息。

Cy(PSW.7):

即PSW的D7位,进位/借位标志。

AC(PSW.6):

即PSW的D6位,辅助进位标志。

F0(PSW.5)及F1(PSE.1):

即PSW的D5位、D1位,用户标志位。

RS1及RS0(PSW.4及PSW.3):

即PSW的D4位、D3位,寄存器组选择控制位。

OV(PSW.2):

即PSW的D2位,溢出标志。

3.51存储器结构的主要特点是什么?

程序存储器和数据存储器各有何不同?

MCS-51单片机的存储器结构与一般微机存储器的配置方法不同,一般微机把程序和数据共存同一存储空间,各存储单元对应惟一的地址。

而MCS-51的存储器把程序和数据的存储空间严格区分开。

数据存储器用于存放程序运算的中间结果、状态标志位等。

程序存储器用于存放已编制好的程序及程序中用到的常数。

4.51单片机内部RAM可分为几个区?

各区的主要作用是什么?

内部数据存储器分为高、低128B两大部分。

低128B为RAM区,地址空间为00H~7FH,可分为:

寄存器区、位寻址区、堆栈及数据存储区。

存放程序运算的中间结果、状态标志位等。

高128B为特殊功能寄存器(SFR)区,地址空间为80H~FFH,其中仅有21个字节单

元是有定义的。

5.51单片机的P0~P3四个I/O端口在结构上有何异同?

使用时应注意哪些事项?

P0口是一个8位漏极开路型双向I/O端口。

P1口是一个内部带上拉电阻的8位准双向I/O端口。

P2口也是一个内部带上拉电阻的8位准双向I/O端口

P3口是一个内部带上拉电阻的8位多功能双向I/O端口。

在使用时应注意以下方面:

①P0~P3都是准双向I/O口,即CPU在读取数据时,必须先向相应端口的锁存器写入“1”。

各端口名称与锁存器名称在编程时相同,均可用P0~P3表示。

当系统复位时,P0~P3端口锁存器全为“1”,故可直接对其进行读取数据。

②P0口每一输出位可驱动8个LS型TTL负载,P0口可作通用输入、输出端口使用,此时,若要驱动NMOS或其他拉电流负载时,需外接上拉电阻,才能使该位高电平输出有效。

在单片机进行外部存储器扩展时,P0口必须作为地址/数据复用线使用,此时,不必外接上拉电阻,P0也不能作通用I/O口使用。

③P1、P2、P3口输出均接有内部上拉电阻,输入端无需外接上拉电阻,每一位输出可以驱动4个LS型TTL电路。

④P0、P2口除可以作通用I/O端口、以实现与外部进行数据交换外,更主要的是,当CPU访问外部存储器时,CPU将自动地把外部存储器的地址线信号(16位)送P0、P2口,作为地址总线(P0口输出低8位地址,P2口输出高8位地址),向外部存储器输出16位存储单元地址。

在控制信号作用下,该地址低8位被锁存后,P0口自动切换为数据总线,这时经P0口可向外部存储器进行读、写数据操作。

此时,P2口不再作通用I/O端口,P0口为地址/数据复用口。

6.指出8051可进行位寻址的存储空间。

00~7FH(即20H.0~2FH.7)及SFR地址能被8整除的寄存器中的各位。

7.在访问外部ROM或RAM时,P0和P2口各用来传送什么信号?

P0口为什么要采用片外地址锁存器?

P0口传送地址低八位后可复用数据线,所以,P0口要采用片外地址锁存器。

P2口传送地址高八位。

8.什么是时钟周期?

什么是机器周期?

什么是指令周期?

当振荡频率为12MHz时,一个机器周期为多少微秒?

时钟周期:

也称振荡周期,即振荡器的振荡频率fosc的倒数,是时序中最小的时间单位。

机器周期:

执行一条指令的过程可分为若干个阶段,每一阶段完成一规定的操作,完成一个规定操作所需要的时间称为一个机器周期,一个机器周期包含12个时钟周期。

当振荡频率为12MHz时,一个机器周期为12/(12×1000000)秒=1微秒

指令周期:

定义为执行一条指令所用的时间。

9.51单片机有几种复位方法?

复位后,CPU从程序存储器的哪一个单元开始执行程序?

MCS-51的复位电路包括上电复位电路和按键(外部)复位电路0000H

10.8051单片机引脚ALE的作用是什么?

当8051不外接RAM和ROM时,ALE上输出的脉冲频率是多少?

其作用是什么?

地址锁存使能输出ALE:

当单片机访问外部存储器时,外部存储器的16位地址信号由P0口输出低8位,P2口输出高8位,ALE可用作低8位地址锁存控制信号;当不用作外部存储器地址锁存控制信号时,该引脚仍以时钟振荡频率的1/6固定地输出正脉冲,可以驱动8个LS型TTL负载。

第3章

1.MCS-51汇编指令格式是什么,如何通过汇编指令格式来判断指令字节数?

MCS-51指令系统中的每一条指令都有两级指令格式:

●CPU可直接识别并执行的机器语言指令。

●汇编语言指令(简称汇编指令)。

MCS-51汇编语言指令格式由以下几个部分组成:

[标号:

]操作码[目的操作数][,源操作数][;注释]

其中,[]中的项表示为可选项。

指令寻址方式是判断指令字节数的依据之一。

2.有哪几种寻址方式?

其特征对象分别是什么?

做表说明。

MCS-51指令系统的寻址方式有以下7种:

立即寻址方式:

操作数直接出现在指令中。

直接寻址方式中:

操作数的单元地址直接出现在指令中。

寄存器寻址方式中:

寄存器中的内容就是操作数。

寄存器间接寻址方式中,指定寄存器中的内容是操作数的地址,该地址对应存储单元的内容才是操作数。

变址寻址方式是以程序指针PC或数据指针DPTR为基址寄存器,以累加器A作为变址寄存器,两者内容相加(即基地址+偏移量)形成16位的操作数地址,

相对寻址是以程序计数器PC的当前值作为基地址,与指令中的第二字节给出的相对偏移量rel进行相加,所得和为程序的转移地址。

位地址:

内部RAM地址空间的可进行位寻址的128位和SFR地址空间的可位寻址的11个8位寄存器的88位。

位寻址给出的是直接地址。

3.位寻址和字节寻址如何区分?

在使用时有何不同?

由寻址方式可以看出,不同的寻址方式所寻址的存储空间是不同的。

正确地使用寻址方式不仅取决于寻址方式的形式,而且取决于寻址方式所对应的存储空间。

字节寻址必须是对8位存储单元,位寻址的存储空间只能是片内RAM的20H~2FH字节地址中的所有位(位地址为00H~7FH)和部分SFR的位,决不能是该范围之外的任何单元的任何位。

4.要访问专用寄存器和片外数据寄存器,应采用什么寻址方式?

举例说明。

访问专用寄存器:

可采用直接寻址或寄存器寻址。

访问片外数据寄存器:

寄存器间接寻址

5.什么是堆栈?

其主要作用是什么?

如何使用?

堆栈是后进先出的数据存储区

一般用于中断处理过程中,若需要保护现场数据(如内部RAM单元的内容),可使用入栈指令,将数据压入堆栈,中断处理过程执行完后,再使用出栈指令恢复现场数据。

6.编程将片外数据存储器2000H~20FFH单元内容清零。

MOVDPTR,#2000H

MOVA,#0

MOVR3,#100H

LOP:

MOV@DPTR,A

INCDPTR

DJNZR3,LOP

7.已知A=83H,R0=17H,(17H)=34H,写出下列程序段执行完后的A中的内容。

ORLA,#17H

ANL17H,A

XRLA,@R0

CPLA

(A)=11001011B=0CBH

8.已知单片机的fosc=6MHz,分别设计延时0.1s、1s、1min的子程序。

这里取单片机常用的晶振频率为12MHz,一个机器周期为1µs。

(若fosc=6MHz,读者可参考下列程序修改)

延时1ms的子程序:

执行时间(机器周期)

DELAY:

MOVR7,#0FFH1

LOOP:

NOP1

NOP1

DJNZR7,LOOP2

RET2

该程序段的总的执行时间为:

(1+4×255+2)μs=1023µs≈1ms

延时时间为100ms的子程序:

DELAY:

MOVR5,#64H对延时1ms的子程序循环100次。

LOP1:

MOVR7,#0FFH

LOOP:

NOP

NOP

DJNZR7,LOOP

DJNZR5,LOP1

RET

延时时间为1s的子程序:

DELAY1:

MOVR3,#0AH对延时100ms的子程序循环10次

DELAY:

MOVR5,#64H。

LOP1:

MOVR7,#0FFH

LOOP:

NOP

NOP

DJNZR7,LOOP

DJNZR5,LOP1

DJNZR3,DELAY

RET

延时时间为60s的子程序:

对延时1s的子程序循环60次

9.MCS-51汇编语言中有哪些常用的伪指令?

各起什么作用?

BIT(地址符号命令)

END(结束汇编)

EQU(等值)

DB(定义字节)

DW(定义字)

DS(定义存储单元)

ORG(汇编起始地址)

10.比较下列各题中的两条指令是否相同,若不同,请指出其区别?

①MOVA,R1;MOVACC,R1指令功能相同,寻址方式表示不同

②MOVA,P0;MOVA,80H指令功能相同,寻址方式表示不同

③LOOP:

SJMPLOOP;SJMP$指令功能相同

11.下列程序段汇编后,从3000H开始各有关存储单元的内容是什么?

ORG3000H

TAB1EQU1234H

TAB2EQU5678H

DB65,13,"A"

DWTAB1,TAB2,9ABCH

ORG3000H

TAB1:

EQU1234H

TAB2:

EQU5678H

DB65,13,"abcABC"

DWTAB1,TAB2,9ABCH

3000H:

65

3001H:

13

3002H:

‘A’

3003H:

34H

3004H:

12H

3005H:

78H

3006H:

56H

3007H:

BCH

3008H:

9AH

12.为了提高汇编语言程序的可读性和编译效率,在编写时应注意哪些问题?

(1)把要解决的问题化成一个个具有一定独立性的功能模块,各模块尽量采用子程序完成其功能。

(2)力求少用无条件转移指令,尽量采用循环结构。

(3)对主要的程序段要下功夫精心设计,这样会收到事半功倍的效果。

(4)能用8位数据解决问题的就不要使用16位数据。

(5)累加器是信息传递的枢纽,在调用子程序时应通过累加器传送子程序的参数,通过累加器向主程序传送返回参数。

所以,在子程序中一般不把累加器推入堆栈。

若需保护累加器的内容时,应先把累加器的内容存入其他寄存器单元,然后再调用子程序。

(6)为了保证程序运行的安全可靠,应考虑使用软件抗干扰技术,如数字滤波技术、指令冗余技术、软件陷井技术,用汇编语言程序实现这些技术,不需要增加硬件成本,可靠性高,稳定性好,方便灵活。

13.有一输入设备,其端口地址为20H,要求在1秒钟时间内连续采样10次读取该端口数据,求其算术平均值,结果存放在内部RAM区20H单元。

MOVR0,#20H

MOVR2,#0

MOVA,#0

MOVR4,#0

LOP:

MOVR3,#0AH

IN:

ACALLDELAY

MOVXA,@R0

MOVR2,A

MOVA,R4

ADDA,R2

MOVR4,A

DJNZR3,IN

MOVB,#0AH

DIVAB

MOV20H,A

AJMPLOP

DELAY:

MOVR5,#64H延时时间为0.1s的子程序:

LOP1:

MOVR7,#0FFH

LOOP:

NOP

NOP

DJNZR7,LOOP

DJNZR5,LOP1

RET

END

14.现需对外部某2个信号进行异或操作,请使用单片机完成其要求。

MOVDPTR,#2000H

MOVXA,@DPTR

MOV20H,A

INCDPTR

MOVXA,@DPTR

XRLA,20H

15.简单说明两条查表指令使用上的区别。

查表是程序设计中使用的基本方法。

只要适当地组织表格,就可以十分方便地利用表格进行多种代码转换和算术运算等。

MOVCA,@A+PC与MOVCA,@A+DPTR两条指令的区别:

前者查表的范围与存放该指令的地址有关,由于PC的值已经确定及8位累加器A的限制,数据表格只能存放在该指令后面的256个字节单元之内。

而后者查表范围通过改变DPTR的值可达整个程序存储器64KB的任何地址空间(即DPTR的值为表格的首地址),其数据表格可以为各个程序模块共享。

将要查表的数据字作为偏移量送累加器A中,通过改变变址寄存器A的内容即可改变表格中的位置,执行该指令即可获得所需的内容(即将该位置单元的内容传送给A)。

因此,可以根据需要设计表格的内容,将A的内容实现换码。

第4章

1.C51扩展了哪些数据类型?

sbitsfrsfr16bit

2.简述C51存储器类型关键字与8051存储空间的对应关系。

程序存储器(code)

内部数据存储器:

data内部RAM直接寻址128B(0x00~0x7F)

idata内部RAM间接寻址256B(0x00~0xFF)

bdata内部RAM16B(0x20~0x2F)的128位进行位寻址

外部数据存储器:

xdata外部存储器64KB的任何单元

pdata访问外部存储器(一页)低256B

3.在定义inta=1,b=1后,分别指出表达式b=a、b=a++和b=++a执行后变量a和b的值。

b=a;

b=a++;a=2b=1

b=++a;a=2b=2

4.用C51编程实现当P1.0输入为高电平时,P1.2输出控制信号灯点亮。

#include

sbitkey1=P1^0;

sbitled=P1^2;

voidmain()

{bita;

for(;;)

{key1=1;

a=key1;

if(a)led=1;

elseled=0;

}

while

(1);

}

5.使用选择结构编写程序,当输入的数字为“1”、“2”、“3”、“4”时,输出显示“A”、“B”、“C”、“D”,当输入数字“0”时,程序结束。

#include

voidmain()

{charch;

SCON=0x52;/*对串口实现初始化,以便调试时调用scanf()和printf()*/

TMOD=0x20;/*在keilc串行窗口#0中输入或显示数据*/

TH1=0Xf3;/*若不使用scanf()和printf()函数,则程序中不需要蓝色语句*/

TR1=1;

printf("请输入:

");

while

(1)

{scanf("%c",&ch);

switch(ch)

{

case‘1’:

printf("A");break;

case‘2’:

printf("B");break;

case‘3’:

printf("C");break;

case‘4’:

printf("D");break;

case‘0’:

break;

default:

printf("输入错误\n");

}

if(ch==’0’)break;

}

while();

}

6.编一个函数sum,求数组a中各元素的数据和。

要求在main函数中输入数组元素的数据,通过调用sum函数并输出返回的数据和。

#include

intsum(intb[],intn)

{inti,s=0;

for(i=0;i

s+=b[i];

returns;

}

voidmain()

{inta[10]={10,20,30,40,50,90,80,70,60,0}i,total;

SCON=0x52;/*对串口实现初始化,以便调试时调用scanf()和printf()*/

TMOD=0x20;/*在keilc串行窗口#0中可以输入或显示数据*/

TH1=0Xf3;/*若不使用scanf()和printf()函数,则程序中不需要蓝色语句*/

TR1=1;

total=sum(a,10);

printf("%d",total);

while

(1);

}

7.编一个函数len,求一个字符串s的长度。

要求在main函数中输入字符串,通过调用len函数并输出返回的字符串长度。

#include“string.h”

#include

intlen(char*s)

{intn;

n=strlen(s);

returnn;

}

voidmain()

{char*ch=”china”;

inta;

a=len(ch);

while

(1);

}

8.C51中断函数如何定义,在使用时应注意哪些问题?

C51中,中断服务程序是以中断函数的形式出现的。

单片机中断源以对应中断号的形式出现在C51中断函数定义中

中断函数定义语法格式如下:

void函数名(void)interruptn[usingn]

{

函数体

}

关键字interrupt定义该函数为中断服务函数,n为中断号。

使用时应注意:

1)在中断函数中不能使用参数。

2)在中断函数中不能存在返回值。

3)中断函数的执行是由中断源的中断请求后系统调用的。

4)中断函数的中断号在不同的单片机中其数量也不相同,具体情况察看具体的处理器手册。

9.用C51编写流水灯控制程序,要求由8051的P1口控制8个发光二极管(采用共阳极连接)依次轮流点亮,循环不止。

#include

#include

#defineucharunsignedchar

#defineledP1

voiddelay(ucharm);//声明延时函数

voidmain()

{

uchars_data=0xFE;

while

(1)

{

led=~s_data;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1