单片机应用与电子设计竞赛PPT格式课件下载.pptx
- 文档编号:655899
- 上传时间:2023-04-29
- 格式:PPTX
- 页数:152
- 大小:962.88KB
单片机应用与电子设计竞赛PPT格式课件下载.pptx
《单片机应用与电子设计竞赛PPT格式课件下载.pptx》由会员分享,可在线阅读,更多相关《单片机应用与电子设计竞赛PPT格式课件下载.pptx(152页珍藏版)》请在冰点文库上搜索。
XTAL1(19)输入和XTAL2(18)输出。
5、P0口(32-39):
是一个8位漏极开路型双向I/0口,需外部上拉电阻;
访问外部存储器时,它是分时传送的低字节地址和数据;
能以吸收电流的方式驱动八个LSTTL负载。
6、P1口(1-8):
有内部上拉电阻的8位准双向I/0口外部可拉低但不能拉高,输入检测时应先置高。
能以吸收电流的方式驱动四个LSTTL负载。
7、P2口(21-28):
除与P1相同外。
P2口在访问外部存储器时,它输出高8位地址。
8、P3口(10-17):
第一功能与P1同。
P3口还有第二功能。
P3口第二功能:
I/O口应注意问题,1、上电复位时所有I/O口全部位“1”,设计时应注意,必要时可用硬件反向或软件调整。
2、I/O口的吸收电流与输出电流不同,注意其驱动能力,选用合理的驱动方式。
1、状态字PSW:
CYACFORS1RS0OVP可单独位操作。
CY:
进位标志。
最高位D7进位或借位时置1。
AC:
辅助进位标志。
半进位D3FO:
用户标志位。
自定义。
RS1RSO:
选择工作寄存组OV:
溢出标志位。
P:
奇偶校验。
运算结果A的内容偶数个1时,P=0;
奇数个1时,P=1,部分专用寄存器,2、堆栈及堆栈指针SP堆栈特殊的存储单元,主要用于保护数据。
操作为压入、弹出,后进先出。
堆栈的栈顶由SP决定。
堆栈的地址随操作自动增加或减少。
上电时SP值为07,在程序的初始化中注意设置SP。
3、数据指针DPTR:
16位数据指针,可分为DPH、DPL,作为地址寄存器,可寻址64K,常用于查表,有专门的指令4、程序计数器PC:
16位程序计数指针。
每当从存储器中取出一条指令并加以执行时,PC的值自动加一,总是指向将要取出的下一条指令的地址。
通用数据寄存器:
007FH,1、通用工作寄存器区:
001FH4组(每组都称ROR7,由用户在程序中选择RS1RS0),*当应用程序有多个中断时特别有用,2、位寻址区20H2FH:
可以8位一起操作,也可以按位操作。
一般用作状态、标志。
如:
20H.0,20H.1,20H.2.20H.73、30H7FH:
一般数据RAM,通常SP设在这区域(如30H),用户可任意使用。
4、80HFFH:
(8052、89C52才有)扩展RAM,不能直接寻址,须间接寻址。
MOVR0,#90HMOVR0,A5、程序存储器0000FFFFH(*注意与/EA配合)内部00000FFFH(00001FFFH)外部1000FFFFH(2000FFFFH)*(尽量使用大容量CPU不外扩程序存储器)*特别要求:
1、程序的第一条指令为0000H,6、中断服务程序的入口地址:
0003H000BH0013H001BH0023H,外部中断0(/INT0)定时器0溢出中断外部中断1(/INT1)定时器1溢出中断串行口中断,002BH定时器2溢出中断(8052才有)7、外部数据存储器:
最大64K(P0低位地址,P2高位地址)*综上所述,尽可使用更多资源的89C52CPU。
第二部份,单片机应用系统的仿真调试,一、单片机仿真及平台介绍1、仿真与仿真机:
仿真的主要目的是人工运行程序来排除错误。
一个单片机应用系统包括单片机部份及为达到使用目的而设计的应用电路,仿真就是利用仿真机来代替电路板上(称目标机)的单片机,对应用电路部份进行测试、调试。
仿真有软件仿真和硬件仿真两种,软件仿真用于用于排除软件错误;
硬件仿真借助仿真机进行,用于排除一些硬件错误。
硬件仿真时仿真机代替目标机的CPU,由仿真机向目标机的应用电路部份提供各种信号、数据,进行调试。
这种仿真可以通过单步、断点、连续运行等多种方法来运行程序,并能观察到单片机内部的变化,便于改正各种的错误。
51单片机仿真软件有很多,最常用的有WAVE、KEIL、PROTEUS。
根据多年使用和我校设备现状,建议使用WAVE仿真软件。
第三部分单片机的指令系统和软件编程,一、C语言和汇编语言在开发单片机时各有哪些优缺点?
汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。
其主要优点是占用资源少、程序执行效率高。
但是不同的CPU,其汇编语言可能有所差异,所以不易移植。
C语言是一种结构化的高级语言。
其优点是可读性好,移植容易,是普遍使用的一种计算机语言。
缺点是占用资源较多,执行效率没有汇编高。
二、单片机开发采用哪种语言比较好?
对于有复杂运算的用C语言较好;
对于采集等时间要求严格的用汇编好。
由于内部ROM、RAM等资源有限,使用C语言编写,一条指令编译后,生成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。
而汇编语言一条指令就对应一个机器码,每一步执行什么动作都很清楚,调试起来也比较方便。
初学者还可以对单片机的执行有更深的了解,所以我们还是建议采用汇编语言比较好。
*竞赛建议采用汇编语言和WAVE仿真平台(除非你十分熟悉C语言及其调试环境)。
单片机的指令系统和软件编程,1、机器语言(机器码):
二进制码(BIN)或16进制(HEX)二进制代码(11100101B,00110000B)16进制表示(E5H,30H)2、汇编语言:
助记符(需要汇编成机器码)如:
MOVA,30H,二进制代码E530E5操作码30H源地址,A-30H30操作数A目标地址,要使左图灯亮,程序应SETBP2.3;
置某位为“1”,相当于接高电平(位操作,对某位或I/O口操作)要使右图灯亮,程序应CLRP2.2;
清某位为“0”,相当于接低电平(位操作,对某位或I/O口操作)上两条指令是对I/O口位操作。
51的所有I/O口都可以位操作,也可以整个I/O口8位同时操作。
P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0MOVP2,#00001000B或MOVP2,#08H*两个灯都亮时,注意观察两个LED的亮度,由此可知I/O口的输出电流和吸收电流不一样,产生频率1KHz的声音-晶振12M,LOOP:
SETBP2.1;
喇叭控制脚高延时500US,CLRP2.1,;
喇叭控制脚低,延时500US转到LOOP循环,在单片机指令中,循环左(右)移很容易搞错循环右移RRA;
原来A=01011010B,右移后A=00101101B循环左移RLA;
原来A=01011010B,左移后A=10110100B,较难掌握并容易错的指令,带进位循环左移RLCA;
原来A=01001101B,进位位C=1,左移后A=10011011B,C=0;
再移一次后,带进位循环左(右)移:
带进位循环右移RRCA;
原来A=01011010B,进位位C=1,右移后A=10101101B,C=0;
再移一次后,A=01010110B,C=1,比较容易错的MOV指令,在MOV指令中,有一条指令也很容易出错:
MOVA,RnRn为间接指令,只有两个R0、R1,本指令意思是以Rn中的数据作为地址,将该地址中的数送给A*MOVA,Rn不支持R2、R3,.,第三部分显示器及其显示方式,数码管显示器有两种不同的形式:
一种是8个发光二极管的阳极都连在一起的,称为共阳极;
另一种是8个发光二极管的阴极都连在一起的,称为共阴极。
规则排列时数字的显示,不规则排列时,可以通过送数,使每次亮一段(位)测得各段的值,然后进行编码。
MOVP2,#11110000B;
送位控制I/O线,画一个8字形,把测得的值标到对应的位置,便可得到字符编码,如:
要得到1的字符码,1为B、C亮,则B+C=08H+40H=48H。
同理可得其他各码。
数码管屏幕显示方式静态显示,1、静态显示在单片机应用系统中,显示器显示常用两种方法:
静态显示和动态扫描显示。
所谓静态显示,就是每个显示器都要单独一个具有锁存功能的器件,用于锁存笔划段字形代码。
单片机只要把显示的字形代码送到接口电路(锁存器)就不用管它了,直到要显示新的数据时,再发送新的字形码,使用这种方法单片机软件简单,但成本高。
(竞赛时可以选这种)*锁存的器件很多,如串并转换电路74LS16。
动态显示,2、动态扫描显示(产品开发采用这种方式)动态显示是单片机中应用最为广泛的一种显示方式之一。
其接法是把所有显示器的8个笔划段A-H同名端连在一起,而每一个显示器的公共端各自独立地接一个I/O线控制(三极管)。
CPU将字段输出口送字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于公共端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。
*而所谓动态扫描就是指采用分时的方法,轮流控制各个显示器的公共端,使各个显示器轮流点亮。
动态显示每次只显示一个字。
显示1234方法如下:
送显示1的代码到P0,送控制公共端的I/O线P2.x,延时几毫秒;
送显示2的代码到P0,12341234在轮流显示过程中,每位显示器的显示时间是极为短暂的,但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要速度足够快,给人的印象就是一组稳定的显示数据1234,不会有闪烁感。
不论动态或静态显示,显示代码是编程时编好的显示时根据数值取出来显示,常用查表指令。
MOVDPTR,#DISPLAY_TABLEMOVCA,A+DPTR(查表指令)把数据指针(表指针)所指地址的内容送给累加器AAA+DPTR其中DPTR为表头指针,是一个16位的地址,由DPH和DPL组成(DPTR=DPH+DPL)。
A为偏移量,这是因为有时数不是在表头而是在表中间,离表头有一定的偏移。
*注意:
MOVC与MOV指令的区别,第四部分标准输入设备-键盘,一、键盘接口与编程,键盘是由若干按键组成的开关矩阵,它是计算机最常用的输入设备。
键盘有硬件译码和软件译码。
硬件译码是采用译码电路进行译码,电路复杂,成本高,一般很少采用。
软件译码直接采用软件来识别,不增加成本,一般单片机系统都采用软件来译码,它具有结构简单,使用灵活等特点。
按键开关的抖动问题由于按键是机械触点,当机械触点断开、闭合时,会有抖动,P1.0输入端的波形如图所示。
这种抖动对于人感觉不到,但对计算机来说,则完全可以检测到,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。
你只按了一次按键,可是计算机却已执行了多次。
为使CPU能正确地读出P1口的状态,对每一次按键只作一次响应,就必须考虑如何去除这些抖动,常用去抖动的方法:
硬件方法和软件方法。
硬件去抖动是加一些能延时的元器件,如电容,而单片机中常用软件法。
软件去抖动就是在单片机获得P1.0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P1.0口,如果仍为低,说明S1的确按下了,这实际上是避开了按键按下时(前沿)的抖动时间。
而在检测到按键释放后(P1.0为高)再延时5到10毫秒,消除后沿的抖动,然后再对键值处理。
(1)矩阵式键盘的结构与工作原理:
当需要的键数比较多时,为减少占用I/O口,通常将按键排列成矩阵。
矩阵方式一个端口(如P1口)就可以构成4*4=16个按键,比直接将端口线用于键盘多出了一倍,线数越多,区别越明显,如:
再多加一条线就可以构成20键的键盘,多出四个键;
而直接用端口线则只能多出一个键。
上图中,行所接的I/O口为输出,列所接的I/O口为输入,输入上拉电阻。
(2)矩阵式键盘按键识别法按键识别常用逐行查询法,可分两步进行:
第一步判断键盘中有无键按下:
将全部行线P1.0-P1.3置低电平,然后检测列线的状态。
只要有一列为低电平,则键盘中有键被按下,若所有列线均为高电平,则键盘中无键按下。
第二步判断闭合键所在的位置:
确认有键按下后,依次将每根行线置为低电平,其它行线为高电平;
逐行检测各列线的电平状态。
若某列为低,则该列线与低电平的行线交叉处的按键就是闭合的按键。
行线:
输出,列线:
输入,输出0FEH,0FDH,0FBH,0F7H1=7E4=7=2=5=8=,第五部份中断,一、什么是中断:
当CPU正在处理某项事件时,外部或内部发生了紧急事件,要求CPU暂停正在处理的的工作转去处理紧急事件,待处理完以后回到原来被中断的地方,继续执行被中断的程序,这过程称中断。
计算机中断嵌套当CPU正在执行中断服务程序时,又有中断优先级更高的中断申请产生,这时CPU就会暂停当前的中断服务转而处理高级中断申请,待高级中断处理程序完毕,再返回原中断程序断点处继续执行,这一过程称为中断嵌套。
二、中断的优先级处理:
单片机中断有优先级。
优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况。
两个中断同时发生,CPU先响应优先级高的中断再响应优先级低的中断。
当一个中断已产生,又有一个中断再产生时如果再产生的中断优先级高于前一个中断,再产生的中断被响应,产生中断嵌套,否则再产生的中断被忽略。
单片机的五个中断源的自然优先级外中断0定时器0外中断1定时器1串口,三、中断的响应过程和中断入口,中断响应:
中断响应可以分为几个步骤:
1、保护断点,即保存下一个将要执行的指令地址,把这个地址送入堆栈。
2、寻找中断入口,根据不同的中断源所产生的中断,查找不同的入口地址。
以上两点是由计算机自动完成的,与编程者无关。
3、执行中断处理程序(中断服务程序)。
4、中断返回:
执行完中断指令后,就从中断处返回到主程序继续执行。
中断入口:
单片机五个中断源,有五个相应的地址。
每个中断产生后CPU都到相应的地方(中断服务入口地址)去找处理这个中断的程序(中断服务入口地址)。
当然在去之前要保存下一条将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。
中断请求源入口地址:
外中断0IE0入口地址:
0003H定时器0TF0入口地址:
000BH外中断1IE1入口地址:
0013H定时器1TF1入口地址:
001BH串行口RI(TI)入口地址:
0023H(编写程序时应把中断程序放在那儿,否则中断程序就不能被执行)每个地址只有8个单元,当中断程序大于8个单元时,就得放到其他地方,并在入口地址处放一条转移指令转到放程序的地方。
一个完整的主程序看起来应该是这样的:
START:
。
这样写的目的是为了留出其他中断源的入口地址,如果没有这样,将把中断程序当主程序执行。
当然,在程序中没用中断时,主程序可以直接从0000H开始。
四、MCS-51中断系统的结构:
中断有关的寄存器有4个:
IE、IP、TCON和SCON,分别用来控制中断的开关、各种中断源的优先级和中断类型。
上电复位后4个寄存器全部为零。
1、中断允许寄存器IE中断的允许或禁止是由可位寻址的中断允许寄存器IE来控制的,如果某位为“1”,对应的中断将被允许。
EA是总开关,如果它等于0,所有中断都不允许。
ES串行口中断允许ET1定时器1中断允许EX1外中断1中断允许。
ET0定时器0中断允许EX0外中断0中断允许。
2、五个中断优先级有一定的排序(由低位到高位依次降低)外中断0定时器0外中断1定时器1,串口*这是自然优先级,上电时就这样排好,可以通过IP改变它。
3、中断优先级控制寄存器IP中断优先级控制是由可位寻址的中断优先级寄存器IP来控制的,用来改变中断优先级。
IP:
D7D6D5D4-PS,D3D2D1PT1PX1PT0,D0PX0,串口定时器1外中断1定时器0外中断0如果某位为1,则优先级最高,称高优先级。
TCON是定时/计数器控制寄存器,其中四位与中断有关,IT0IE0:
外中断0请求标志位。
当有外部中断请求时,由硬件自动置位IE0CPU响应中断后,硬件自动将IE0清0。
IE1:
外中断1中断请求标志位。
(置1、清0同IE0)TF0:
定时器T0的溢出中断标记。
当T0计数产生溢出时,由硬件置位TF0。
CPU响应中断后,硬件自动将TF0清0。
TF1:
定时器T1的溢出中断标记。
(置1、清0同IF0),
(2)SCON是串行口控制寄存器,其中低2位锁存串行口的接收中断和发送中断标志TI、RI(串行口发送、接收中断)。
执行中断服务程序后,硬件不会自动将TI、RI清0,程序员必须把它清0,重复产生中断。
SCON-D7D6D5D4D3D2-,D1D0TIRI,5个中断请求源分为内部中断和外部中断外部中断请求源(2个)即外中断0和1,由外部引脚引入的,在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。
内部中断请求源(3个):
由内部定时器0、定时器1溢出、串行口发送、接收中断产生。
五、外中断触发方式:
两个外中断的触发方式由TCON寄存器中的IT0和IT1决定:
IT0:
INT0触发方式控制位。
可由软件进行置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变(下降沿)触发方式。
IT1:
INT1触发方式控制位。
(置位、复位和触发方式与IT0同),五、多个外中断源的设计:
当需要多个外中断时,可以用与的方式进行扩充,几个外中断接到一个外中断触发端,同时每个中断接到一个I/O口,当中断时查询I/O口得知哪个中断源触发。
六、中断优先级的归纳:
优先级:
单片机采用了自然优先级和人工设置高、低优先级的策略,即可以由程序员设定哪些中断是高优先级、哪些中断是低优先级。
由于只有两级,必有一些中断处于同一级别,处于同一级别的,就由自然优先级确定。
开机时,每个中断都处于同一级别的优先级但我们可以用指令对优先级进行设置。
中断优先级由中断优先级寄存器IP来改变,IP中某位设为1,相应的中断就是高优先级,否则就是低优先级。
七、中断响应过程:
1、下列三种情况之一CPU不会立即响应中断:
CPU正在处理一个同级或更高级别的中断请求。
(自然优先级的局限)现行的机器周期不是当前正执行指令的最后一个周期。
由于单片机有单周期、双周期、三周期指令,当前执行指令是单字节没问题,如果是双字节或三字节的,就要等整条指令都执行完了,才能响应中断。
当前正执行的指令是返回指令RETI或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才应中断。
2、中断响应过程CPU响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,到相应的中断入口地址去取指令,程序就转到中断入口处执行。
*这些工作都是由硬件来完成的,不必我们去考虑。
3、中断请求的撤除CPU响应中断请求后,在中断返回(执行RETI指令)前,必须撤除请求,否则会错误地再一次引起中断过程。
中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,这样程序就会从被中断打断的地方继续往下执行了。
注意:
CPU所做的保护工作是很有限的,只保护了一个地址,而其它的所有东西都不保护,如果你在主程序中用到了如Acc、PSW等,在中断程序中也用到它们,又要保证回到主程序后与执行中断以前的数据相同,就得自己把它们保护起来。
*子程序返回REI与中断返回RETI有何区别?
第6部分单片机内部定时器/计数器,单片机计数器的几点要点,单片机中有两个计数器,分别称之为T0和T1,这两个计数器分别都是由两个8位的RAM单元THx、TLx组成的,即每个计数器都是16位的计数器,最大的计数量是65536。
单片机计数器采用加法计数,计数器可以作为计数器用。
也可以作定时器用。
要达到某一定时值,采用预置数,通过预置数达到任意计数及任意定时的目的。
*与单片机相关的寄存器TMOD、TCON、THx、TLx初上电时全部为零,*计数器计满溢出后,计数器里面的值变成了0,下一次将要计满65536次后才会溢出(因为容器那么大),为保证每一次计数都一样,计满之后我们必须重新预置数(初值)。
因为每次溢出时必须执行一段程序,在这段程序中把预置数送入计数器中,保证每一次计数都一样。
这种的计数器方式称加法计数器。
预置的数称初值。
加法计数器是计满溢出时才申请中断,所以在给计数器赋初值时,不能直接输入所需的计数值,而应输入的是计数器计数的最大值与计数值的差值,设最大值为M,计数值为N,初值为X,则X的计算方法如下:
计数状态:
X=MN定时状态:
X=M定时时间/T而T=12晶振频率,6.2定时器方式和控制寄存器一、定时器/计数器的工作方式寄存器TMOD,1、图1中,TMOD被分成两部份,每部份4位。
分别用于控制T1和T0,M1和M0为工作方式控制位。
2.C/T定时器方式或计数器方式选择位定时/计数器既可作定时用也可作计数用,到底作什么用,由我们根据需要决定。
如果C/T为0就是用作定时器,如果C/T为1就是用作计数器。
一个定时/计数器同一时刻要么作定时,要么作计数,不能同时又作定时又用作计数。
3.GATE定时器/计数器运行门控标志位GATE=0时,GATE经非门后为1,进入或门,或门总是输出1,和或门的另一个输入端INT1无关,在这种情况下,开关的打开、合上只取决于TR1,只要TR1是1,开关就合上,脉冲就能过来。
而如果TR1等于0则开关打开,计数脉冲无法通过,因此定时/计数是否工作,只取决于TR1。
GATE=1时,计数脉冲通路上的开关不仅要由TR1来控制,而且还要受到INT1引脚的控制,只有TR1为1,且INT1引脚也是高电平,开关才合上,计数脉冲才可通过。
利用这个特性,可以用来测量一个高电平信号的宽度。
2、启停和中断控制寄存器TCON:
TCON高4位用于定时/计数器。
TF0、TF1计数溢出标志,当计数溢出后TF0(TF1)就由0变为1。
(申请中断,在中断响应后自动恢复0。
TF产生的中断申请是否被接受,还需要由中断是否开放来决定)TR0、TR1为运行控制位,当它为1时启动计数,为0停止计数,可用指令SETB来置位以启动计数器/定时器运行,用指令CLR来关闭定时/,定时/计数器的工作方式,1、工作方式0工作方式0为13位定时/计数方式。
它由TLx)的低5位和THx)的8位构成13位的计数器,此时TLx的高3位未用。
2、工作方式1,工作方式1是16位的定时/计数方式,其它特性与工作方式0相同。
3、工作方式2(8位自动装载)工作方式2是8位自动再装入预置数工作方式。
我们知道当定时器溢出时,要运行一段程序重装预置数,所以采用工作方式0或1都要在溢出后做一个重置预置数的工作,需要重置的时间。
当需要精确计时,就需要工作方式2。
在工作方式2,只有低8位参与计数,而高8位不参与计数,用作预置数的存放,每当计数溢出,就会打开高、低8位之间的开关,预置数进入低8位。
这是由硬件自动完成的,不需要由人工干预。
通常这种工作方式用于波特率
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 应用 电子设计 竞赛