单片机基础知识ppt课件.pptx
高远制作,单片机(mcu)学习,目录,第一章 如何学习单片机,第二章 单片机结构及介绍,第三章 单片机C语言介绍,第四章 单片机对外输出,第五章 单片机外部接收,第六章 单片机中断及定时器,第七章 多种显示,第八章 综合应用,学习单片机方法?,实践第一。补充必要的理论知识,即缺什么补什么。做工程项目积累经验。(可在网络上搜集题目,也可自己有什么想法大胆的去试验),学单片机需要学什么?,1、学单片机需要什么基础?2、什么是单片机、单片机能做什么、怎么开始学习单片机。3、学单片机需要的一些预备知识4、C51基础知识(不是全部c语言)。5、KEIL工程建立详细介绍及KEIL软件使用方法6、从点亮一个发光二极管开始,单片机能做什么,工业自动化:数据采集、测控技术。智能仪器仪表:数字示波器、数字信号源、数字万用表、感应电流表等。消费类电子产品:洗衣机、电冰箱、空调机、电视机、微波炉、手机、IC卡、汽车电子设备等。通讯方面:调制解调器、程控交换技术、手机、小灵通等。武器装备:飞机、军舰、坦克、导弹、航天飞机、鱼雷制导、智能武器等。,凡是与控制或简单计算有关的电子设备都可以用单片机来实现,根据具体实际情况还可以选择不同性能的单片机,如:atmel,stc,pic,avr,凌阳,80C51,arm等,将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,再配上监控程序(固化在ROM中),就构成了一台单板微型计算机(简称单板机)。,什么是单板机?,单板机,什么是单片机?,单片机长啥样?,学单片机需要什么基础?需要掌握很基本的数电/模电知识,如二进制、十进制、十六进制之间的转换,与、或、非逻辑关系等;对各种器件的概念基本上是从0开始;如果要用C语言编程,需具备简单的C语言基础;,单片机结构 在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。 Intel公司推出了MCS-51系列单片机:集成 8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。,一般的单片机有2种基本结构形式:一种是在通用微型计算机中广泛采用的将程序存储器和数据存储器合用一个存储空间的结构,称为普林斯顿(Princeton)结构或称冯诺依曼结构; 另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,称为哈佛(Har-vard)结构。Intel公司的MCS-51和80C51系列单片机采用的是哈佛结构。目前的单片机以采用程序存储器和数据存储器截然分开的结构较多。,单片机的发展过程概述,一般根据控制应用需要: 又可设计成通用单片机、专用单片机 按内部数据总线的宽度: 单片机分为4位、8位、16位及32位等。,Intel 8位单片机的发展 第一代:以1976年推出的MCS-48系列为代表。 第二代:以MCS-51的8051为代表的单片机, 第三代:以51系列、AVR、PIC等为代表。,ATMEL公司所生产的ATMEL89系列单片机(简称89系列单片机),就是基于Intel公司的MCS-5l系列而研制的,该公司的技术优势在于Flash存储器技术。 应用较多的有:AT89C51系列 STC89C51/52系列 SST89系列 AT-tiny、AT90/、ATmega等系列的AVR单片机 这些都是是一种可下载的Flash单片机,它和IBM微机通信进行下载程序十分方便。,ATMEL单片机,Philips公司的的单片机都属于MCS-51系列兼容的单片机。 Maxim-Dallas单片机 WinBond单片机 Motorola单片机其他公司的单片机 1)NEC单片机; 2)东芝单片机; 3)Epson单片机; 提示:经常上网查询,关注发展动态,Philips单片机,预备知识,电平特性2进制与16进制的表示及转换二进制数的逻辑运算8051单片机介绍C51基础知识(用到哪学到哪),关于电平特性,数字电路中只有两种电平:高和低(本课程中)定义单片机为TTL电平: 高 +5V 低 0VRS232电平:计算机的串口 高 -12V 低+12V 所以计算机与单片机之间通讯时需要加电平转换芯片max232。当我们用单片机跟电脑通信的时候,我们要通过各种元器件将单片机的电平转换为计算机可识别的电平才能跟电脑进行通信。,返回,二进制由于数字电路中的只有两种电平的特性,计算机中使用的数字采用都是二进制的。二进制是使用0和1两个数码来表示的数,它的基数是2,进位规则是“逢二进一”。,十六进制十六进制的基数是F,进位规则是“逢十六进一”。,返回,数字电路中的两种电平特性决定了它0 0 6 1101 17 1112 10810003 11910014 1001010105 10111 1011,二进制,返回,十六进制,是二进制的简短表示形式。 十进制中的0-15分别表示为十六进制的0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F熟练掌握二进制与十六进制之间的转换。 规律:一般把四个二进制数放在一起转换成一个十六进制数,转换时先把二进制数转换成十进制数,再把十进制数转换成十六进制数。,各种进位制的对应关系,二进制逻辑运算“与”运算:有0得01&1=1 ;1&0=0 ;0&0=0 ;“或”运算:有1得1 1|1=1 ;1|0=1 ;0|0=0;“非”运算:1的非得0,0的非得1。1=0;0=1;“异或”运算:必须不同,否则没有(0)11=0;10=1;00=0;,返回,80C51系列介绍,80C51是MCS-51系列中的一个典型品种;其它厂商以8051为基核开发出的CMOS工艺单片机产品统称为80C51系列。当前常用的80C51系列单片机主要产品有:, Intel的:80C31、80C51、87C51,80C32、80C52、87C52等; ATMEL的:89C51、89C52、89C2051等; Philips、华邦、Dallas 、STC Siemens(Infineon)等公司的许多产品 。补充:关于型号的介绍,80C51的引脚封装,返回,总线(BUS)是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是CPU内部之间的连线。外部总线是指CPU与其它部件之间的连线。 外部总线有三种: 数据总线DB(Data Bus), 地址总线 AB(Address Bus),控制总线 CBControl Bus)。,CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;,五个中断源的中断控制系统;一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。,上拉电阻就是将不确定的信号通过一个电阻拉到高电平,同时此电阻起到一个限流的作用,下拉就是下拉到低电平。1、OC门要输出高电平,外部必须加上拉电阻。2、加大普通IO口的驱动能力。3、起到限流的作用。4、抵抗电磁干扰。, PSEN:外ROM读选通信号 RST/VPD:复位/备用电源。 RST(Reset)功能:复位信号输入端。 VPD功能:在Vcc掉电情况下,接备用电源。 EA/Vpp:内外ROM选择/片内EPROM编程电源。 EA功能:内外ROM选择端。 Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。 4.I/O线 80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。,管脚作用,1、从降低功耗方面考虑应该足够大,因为电阻越大,电流越小。2、从确保足够的引脚驱动能力考虑应该足够小,电阻越小,电流才能越大。3、开漏输出时,过大的上拉电阻会导致信号上升沿变缓。,上下拉电阻的选取原则,管脚作用, 电源: VCC - 芯片电源,接+5V; VSS - 接地端; 时钟: XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 控制线:控制线共有4根, ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址 PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。,单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。,P0.0P0.7 P0口8位双向口线(在引脚的3932号端子). P1.0P1.7 P1口8位准双向口线(在引脚的18号端子). P2.0P2.7 P2口8位准双向口线(在引脚的2128号端子). P3.0P3.7 P2口8位准双向口线(在引脚的1017号端子).,P0口有三个功能: 1、外部扩展存储器时,当做数据总线(如图1中的D0D7为数据总线接口) 2、外部扩展存储器时,当作地址总线(如图1中的A0A7为地址总线接口) 3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻.,管脚作用,P1口只做I/O口使用:其内部有上拉电阻.,P2口有两个功能: 1、扩展外部存储器时,当作地址总线使用 2、做一般I/O口使用,其内部有上拉电阻;,P3口有两个功能: 除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明. 有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的, 即:编程脉冲:30脚(ALE/PROG) 编程电压(25V):31脚(EA/Vpp,管脚作用,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外部读控制,单片机标号信息,芯片全部标号为STC 89C51RC 40C-PDIP 0707CU8138.00D,标识解释如下:,1、STC-前缀,表示芯片为STC公司生产的产品。其他前缀还有如AT,i,Winbond等。2、8-表示该芯片为8051内核芯片。 3、 9-表示内部含Flash E2PROM存储器。还有如80C51中的0表示内部含Mask ROM(掩模ROM)存储器;如87C51中7表示内部含EPROM存储器(紫外线可擦除ROM)。 4、C-表示该器件为CMOS产品。还有如89LV52和89LE58中的LV和LE都表示该 芯片为低电压产品(通常为3.3V电压供电);而89S52中的S表示该 芯片含有可串行下载功能的Flash存储器,即具有ISP可在线编程功能。,5、5-固定不变。 6、1-表示该芯片内部程序存储空间的大小,1为4KB,2为8KB,3为12KB,即该数乘上4KB就是该芯片内部的程序存储空间大小。程序空间大小决定了一个芯片所能装入执行代码的多少。 7、RC-STC单片机内部RAM(随机读写存储器)为512B。8、还有如RD+表示内部RAM为1290B。 9、40-表示芯片外部晶振最高可接入40MHz。对AT单片机数值一般为24,表示其外部晶振最高为24MHz。,单片机标号信息,10、C-产品级别,表示芯片使用温度范围。C表示商业级,温度范围在0+70I表示工 业用产品,温度范围在-40+85。A表示汽车用产品,温度范围在-40+125。M表 示军用产品,温度范围在-55+150。 PDIP-产品封装型号。PDIP表示双列直插式。 0707-表示本批芯片生产日期为07年第7周。 CU8138.00D-芯片制造工艺或处理工艺。,单片机标号信息,单片机最小系统,1.电源电路2.复位电路3.时钟电路4.下载电路,C51中的基础语句,C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。目前,使用C语言进行程序设计已经成为软件开发的一个主流。用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进、扩充和移植。,C51知识,一个简单的单片机C程序要有什么#includevoid main()while(1);包涵头文件程序主函数(其实课堂上学习 C语言的很大一部分内容在初期单片机编程中都用不到,因此没必要因为觉的自己的 C 语言基础不是很好而对单片机望而止步! ),C语言中常用的语句if-else语句if(表达式) 语句1; else 语句2; 其语义是:如果表达式的值为真(非0),则执行语句1,否则执行语句2 。例如:if (ab)c=0;else c=1;,while语句while语句的一般形式为: while(表达式)语句其中表达式是循环条件,语句为循环体。 while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。例如:while(i10)i=i+1;,do-while 语句do 语句 while(表达式);这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。例如: doa=a+1;while(a10);,for语句for(表达式1;表达式2;表达式3) 语句它的执行过程如下:1)先求解表达式1。2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。3)求解表达式3。4)转回上面第2)步继续执行。5)循环结束,执行for语句下面的一个语句。例如:for(a=0;a10;a+)/a+相当于a=a+1;b=0;,switch(表达式) case常量表达式1:语句1; case常量表达式2:语句2; case常量表达式n:语句n; default :语句n+1; 其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。,例如:switch(a)case(0): b=0;break;case(1): b=1;break;default: b=3;/被 break 语句的含义是跳出这个switch语句,如果没有这条语句那么则会从满足条件的地方(即与switch(表达式)括号中表达式匹配的case)开始执行,直到switch结构结束。当break语句用于do-while、for、while循环语句中时,可使程序终止循环。,函数的定义返回变量类型 函数名(输入变量类型)函数体;如:unsigned char read(unsigned char addr)unsigned char dat;/定义一个变量存放返回值(do anything you want);/函数中的程序。return dat;/返回函数的返回值函数的调用在函数调用之前要在主函数前面加入上该函数的声明。(或者你可以放在头文件里面,包含该头文件时,就可以声明了。),C51的数据类型扩充定义,sfr:特殊功能寄存器声明sfr 变量名=地址值;特殊功能寄存器在reg51.H这个头文件里面都帮我们定义好了,所以平时我们就不要自己去定义寄存器的名字。sbit:特殊功能位声明sbit 变量名=地址值;*在给某个引脚取名的时候经常会用到。bit:位变量声明*用来定义位数据变量例:sfr SCON = 0X98;sbit LED = P02;,C51中常用到的一些预处理命令#define#define A P0(注意后面不用加分号)typedeftypedef unsigned char uint;(后面要加分号)重新定义一些常用的关键词,可以增强程序的可移植性,因为在不同的编译软件上面,C语言的数据类型的关键词的位宽是不一样的。#ifndef#endif条件编译,常用于头文件的定义还有一些程序条件编译,类型,符号,关键字,数的表示范围,所占位数,整型,字符型,实型,有,无,(signed) int,16,-3276832767,(signed) short,16,-3276832767,(signed) long,32,-21474836482147483647,16,unsigned int,065535,32,04294967295,unsigned long int,unsigned short int,16,065535,有,float,32,3.4e-383.4e38,有,double,64,1.7e-3081.7e308,有,char,8,-128127,无,unsigned char,8,0255,C51基本数据类型,C语言中的基本数据类型,类型,符号,关键字,数的表示范围,所占位数,整型,字符型,实型,有,无,(signed) int,16,-3276832767,(signed) short,16,-3276832767,(signed) long,32,-21474836482147483647,16,unsigned int,065535,32,04294967295,unsigned long int,unsigned short int,16,065535,有,float,32,3.4e-383.4e38,有,double,64,1.7e-3081.7e308,有,char,8,-128127,无,unsigned char,8,0255,点亮一个灯,格式:1、头文件 2 、位定义3、主函数例如:#include sbit led=P10; void main()led=1;,延时,实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。,使用定时器/计数器实现精确延时,单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 s和2 s,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 s。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。,在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的,2.1 短暂延时 可以在C文件中通过使用带_NOP_( )语句的函数实现,定义一系列不同的延时函数,如Delay10us( )、Delay25us( )、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。,软件延时与时间计算,2.2 使用示波器确定延时时间 利用示波器来测定延时程序执行时间。方法如下:编写一个实现延时的函数,在该函数的开始置某个I/O口线如P1.0为高电平,在函数的最后清P1.0为低电平。在主程序中循环调用该延时函数,通过示波器测量P1.0引脚上的高电平时间即可确定延时函数的执行时间。,方法如下: sbit T_point = P10; void Dly1ms(void) unsigned int i,j; while (1) T_point = 1; for(i=0;i2;i+) for(j=0;j124;j+); T_point = 0; for(i=0;i1;i+) for(j=0;j124;j+); void main (void) Dly1ms(); ,单片机的周期,机器周期和指令周期 (1) 时钟周期: 也称振荡周期, 是指为单片机提供时钟脉冲信号的振荡源的周期, (2) 状态周期: 每个状态周期为时钟周期的 2 倍, 是振荡周期经二分频后得到的。 (3) 机器周期: 一个机器周期包含 6 个状态周期S1S6, 也就是 12 个时钟周期。 在一个机器周期内, CPU可以完成一个独立的操作。 (4) 指令周期: 它是指CPU完成一条操作所需的全部时间。 每条指令执行时间都是有一个或几个机器周期组成。MCS - 51 系统中, 有单周期指令、双周期指令和四周期指令。,感谢您的观看!,