《51单片机超详细教程PPT(超赞).ppt》由会员分享,可在线阅读,更多相关《51单片机超详细教程PPT(超赞).ppt(242页珍藏版)》请在三一办公上搜索。
1、全国高职高专规划教材精品与示范系列,单片机应用技术(C语言版),王静霞 主 编,本章内容什么是单片机 MCS-51内部组成及信号引脚单片机最小系统电路MCS-51存储器结构,第1章 单片机硬件系统,什么是单片机,单片微型计算机(Single Chip Microcomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(Central Processing Unit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。单片机内部基本结构如图1.7所
2、示。由于它的结构与指令功能都是按照工业控制要求设计的,故又称为微控制器(Micro-Controller Unit,简称MCU)。,什么是单片机,单片机应用系统,单片机应用系统由硬件和软件组成,硬件是应用系统的基础,软件是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可,单片机种类,目前8位单片机仍是单片机的主流机型;,生产厂商:,单片机的发展经历了由4位机到8位机,再到16位机的发展过程,美国微芯片公司:PIC16C系列、PIC17C系列、PIC1400系列,美国英特尔公司的MCS-48和MCS-51系列,美国摩托罗拉公司的MC68HC05系列和
3、MC68HC11系列,美国齐洛格公司的Z8系列,日本电气公司的PD78系列,美国莫斯特克公司和仙童公司合作生产的F8(3870)系列等。,单片机硬件结构,中央处理器CPU:8位,运算和控制功能,内部RAM:共256个RAM单元,用户使用前128个单元,用于存放可读写数据,后128个单元被专用寄存器占用。,内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表格。,定时/计数器:两个16位的定时/计数器,实现定时或计数功能。,并行I/O口:4个8位的I/O口P0、P1、P2、P3。,串行口:一个全双工串行口。,中断控制系统:5个中断源(外中断2个,定时/计数中断2 个,串行中断1个),时钟电路
4、:可产生时钟脉冲序列,允许晶振频率6MHZ和12MHZ,复位电路,8051单片机的基本组成,中央处理器CPU:8位,运算和控制功能内部RAM:共256个RAM单元,用户使用前128个单元,用于存放可读写数据,后128个单元被专用寄存器占用。内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表格。定时/计数器:两个16位的定时/计数器,实现定时或计数功能。并行I/O口:4个8位的I/O口P0、P1、P2、P3。串行口:一个全双工串行口。中断控制系统:5个中断源(外中断2个,定时/计数中断2个,串行中断1个)时钟电路:可产生时钟脉冲序列,允许晶振频率6MHZ和12MHZ,MCS-51单片机信号
5、引脚简介,P3口线的第二功能,VCC,VSS,XTAL2XTAL1,RST,P0.0P0.1P0.2 P0.3 P0.4 P0.5 P0.6 P0.7,P1.0P1.1P1.2 P1.3 P1.4 P1.5 P1.6 P1.7,P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0,ALE,P3.0P3.1P3.2 P3.3 P3.4 P3.5 P3.6 P3.7,2、振荡电路:XTAL1、XTAL2,3、复位引脚:RST,4、并行口:P0、P1、P2、P3,7、ALE:地址锁存控制信号,1、电源线:VCC(+5V)、VSS(地),时钟电路与复位电路(1)时钟振荡电路,
6、时 序,关于MCS-51系列单片机的时序概念有4个,可用定时单位来说明,从小到大依次是:节拍、状态、机器周期和指令周期,下面分别加以说明。1)节拍与状态 把振荡脉冲的周期定义为节拍,用P表示,也就是晶振的振荡频率fosc。2)状态 振荡脉冲fosc经过二分频后,就是单片机时钟信号的周期,定义为状态,用S表示。一个状态包含两个节拍,其前半周期对应的节拍叫P1,后半周期对应的节拍叫P2。3)机器周期 MCS-51系列单片机采用定时控制方式,有固定的机器周期。规定一个机器周期的宽度为6个状态,即12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。小提示 当振荡脉冲频率为12 MHz时,一个机器周
7、期为1s;当振荡脉冲频率为6 MHz时,一个机器周期为2 s。,(2)复位电路,单片机复位条件:必须使RST引脚持续2微秒高电平(外部时钟12MHz),存储器,80318751805189C51,256B(字节),4K,(1)程序存储器,程序存储器,内部,外部,(PC),程序存储器资源分布,中断入口地址,在单片机C语言程序设计中,用户无需考虑程序的存放地址,编译程序会在编译过程中按照上述规定,自动安排程序的存放地址。例如:C语言是从main()函数开始执行的,编译程序会在程序存储器的0000H处自动存放一条转移指令,跳转到main()函数存放的地址;中断函数也会按照中断类型号,自动由编译程序安
8、排存放在程序存储器相应的地址中。因此,读者只需了解程序存储器的结构就可以了。,内部,外部,(2)数据存储器,数据存储器,RAM,专用寄存器,内部RAM存储器,工作寄存器区选择位RS0、RS1,注意:一个单元地址对应有8个位地址MSBMost Significant Bit(最高有效位)LSB Least Significant Bit(最低有效位),RAM位寻址区位地址表,高128个单元,离散分布有21个特殊功能寄存器SFR。,11个可以进行位寻址。,特别提示:对SFR只能使用直接寻址方式,书写时可使用寄存器符号,也可用寄存器单元地址。,在单片机的C语言程序设计中,可以通过关键字sfr来定义所
9、有特殊功能寄存器,从而在程序中直接访问它们,例如:sfr P1=0 x90;/特殊功能寄存器P1的地址是90H,对应P1口的8个I/O引脚在程序中就可以直接使用P1这个特殊功能寄存器了,下面语句是合法的:P1=0 x00;/将P1口的8位I/O口全部清0C语言中,还可以通过关键字sbit来定义特殊功能寄存器中的可寻址位,在程序ex1_1.c中,采用了下面语句定义P1口的第0位:sbit P1_0=P10;通常情况下,这些特殊功能寄存器已经在头文件reg51.h中定义了,只要在程序中包含了该头文件,就可以直接使用已定义的特殊功能寄存器。如果没有头文件reg51.h,或者该文件中只定义了部分特殊功
10、能寄存器和位,用户也可以在程序中自行定义。,AVR,单片机,C语言,C51,编程基础,实例,好资料,AVR,单片机,C语言,C51,编程基础,实例,好资料,本章内容单片机开发系统及功能Keil C51软件的使用,第2章 单片机开发系统,单片机开发系统及功能,单片机开发系统是单片机应用系统设计的必需工具,包括计算机、单片机在线仿真器、工具软件、编程器等。在线仿真功能调试功能 1)运行控制功能 2)目标系统状态的读出修改功能辅助设计功能 1)程序设计语言 2)程序编译程序固化功能,Keil C51软件的使用,Keil C51启动窗口,Keil C51软件的使用,建立工程文件,Keil C51软件的
11、使用,选择目标CPU,Keil C51软件的使用,图2.17 文本编缉窗口,Keil C51软件的使用,增加文件到组中,Keil C51软件的使用,选择文件类型,Keil C51软件的使用,目标属性,Keil C51软件的使用,产生执行文件,Keil C51软件的使用,选择仿真方式,Keil C51软件的使用,Keil C51内建了一个仿真CPU来模拟执行程序,该仿真CPU功能强大,可以在没有硬件和仿真器的情况下进行程序的调试。不过,软件模拟与真实的硬件执行程序还是有区别的,其中最明显的就是时序,具体表现在程序执行的速度和用户使用的计算机有关,计算机性能越好,运行速度越快。,本章内容单片机开发
12、系统及功能Keil C51软件的使用,第2章 单片机开发系统,单片机开发系统及功能,单片机开发系统是单片机应用系统设计的必需工具,包括计算机、单片机在线仿真器、工具软件、编程器等。在线仿真功能调试功能 1)运行控制功能 2)目标系统状态的读出修改功能辅助设计功能 1)程序设计语言 2)程序编译程序固化功能,Keil C51软件的使用,Keil C51启动窗口,Keil C51软件的使用,建立工程文件,Keil C51软件的使用,选择目标CPU,Keil C51软件的使用,图2.17 文本编缉窗口,Keil C51软件的使用,增加文件到组中,Keil C51软件的使用,选择文件类型,Keil C
13、51软件的使用,目标属性,Keil C51软件的使用,产生执行文件,Keil C51软件的使用,选择仿真方式,Keil C51软件的使用,Keil C51内建了一个仿真CPU来模拟执行程序,该仿真CPU功能强大,可以在没有硬件和仿真器的情况下进行程序的调试。不过,软件模拟与真实的硬件执行程序还是有区别的,其中最明显的就是时序,具体表现在程序执行的速度和用户使用的计算机有关,计算机性能越好,运行速度越快。,本章内容并行I/O口电路结构认识C语言C语言的基本语句C语言数据与运算数组的概念,第3章 单片机并行I/O口应用,并行I/O口电路结构,MCS-51系列单片机共有四个8位并行I/O口,分别用P
14、0、P1、P2、P3表示。每个I/O口既可以按位操作使用单个引脚,也可以按字节操作使用8个引脚。,P0口的结构,P0口逻辑电路,当P0口作为输出口使用时,内部总线将数据送入锁存器,内部的写脉冲加在锁存器时钟端CP上,锁存数据到Q、端。经过MUX,T2反相后正好是内部总线的数据,送到P0口引脚输出。当P0口作为输入口使用时,应区分读引脚和读端口两种情况,所谓读引脚,就是读芯片引脚的状态,这时使用下方的数据缓冲器,由“读引脚”信号把缓冲器打开,把端口引脚上的数据从缓冲器通过内部总线读进来。读端口是指通过上面的缓冲器读锁存器Q端的状态。读端口是为了适应对I/O口进行“读-修改-写”操作语句的需要。例
15、如下面的C51语句:P0=P0/将P0口的低4位引脚清0输出,P0口的结构,除了I/O功能以外,在进行单片机系统扩展时,P0口是作为单片机系统的地址/数据线使用的,一般称为地址/数据分时复用引脚。当输出地址或数据时,由内部发出控制信号,使“控制”端为高电平,打开与门,并使多路开关MUX处于内部地址/数据线与驱动场效应管栅极反相接通状态。此时,输出驱动电路由于两个FET处于反相,形成推拉式电路结构,使负载能力大为提高。输入数据时,数据信号直接从引脚通过输入缓冲器进入内部总线。,P0口的结构,P1口的结构,P1口逻辑电路,P1口是准双向口,只能作为通用I/O口使用。P1口作为输出口使用时,无需再外
16、接上拉电阻。P1口作为输入口使用时,应区分读引脚和读端口。读引脚时,必须先向电路中的锁存器写入“1”,使输出级的FET截止。,P1口的结构,P2口的结构,P2口逻辑电路,P2口是准双向口,在实际应用中,可以用于为系统提供高8位地址,也能作为通用I/O口使用。P2口作为通用I/O口的输出口使用时,与P1口一样无需再外接上拉电阻。P2口作为通用I/O口的输入口使用时,应区分读引脚和读端口。读引脚时,必须先向锁存器写入“1”。,P2口的结构,P3口的结构,P3口逻辑电路,P3口是准双向口,可以作为通用I/O口使用,还可以作为第二功能使用。作为第二功能使用的端口,不能同时当作通用I/O口使用,但其他未
17、被使用的端口仍可作为通用I/O口使用。P3口作为通用I/O的输出口使用时,不用外接上拉电阻。,P3口的结构,认识C语言,C语言程序以函数形式组织程序结构,C程序中的函数与其他语言中所描述的“子程序”或“过程”的概念是一样的。,C程序基本结构,认识C语言,一个C语言源程序是由一个或若干个函数组成,每一个函数完成相对独立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列顺序如何,最后在主函数中结束整个程序。C语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。C语言程序使用“;”作为语句的结束符,一
18、条语句可以多行书写,也可以一行书写多条语句。,认识C语言,结构化语言丰富的数据类型便于维护管理与汇编语言相比,C语言的优点如下:不要求编程者详细了解单片机的指令系统,但需了解单片机的存储器结构;寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理;结构清晰,程序可读性强;编译器提供了很多标准库函数,具有较强的数据处理能力。,C语言的基本语句,语言程序的执行部分由语句组成。C语言提供了丰富的程序控制语句,按照结构化程序设计的基本结构:顺序结构、选择结构和循环结构,组成各种复杂程序。这些语句主要包括表达式语句、复合语句、选择语句和循环语句等。,表达式语句和复合语句,表达式语句是最基本的C语言
19、语句。表达式语句由表达式加上分号“;”组成,其一般形式如下:表达式;执行表达式语句就是计算表达式的值。在 C 语言中有一个特殊的表达式语句,称为空语句。空语句中只有一个分号“;”,程序执行空语句时需要占用一条指令的执行时间,但是什么也不做。在C51程序中常常把空语句作为循环体,用于消耗CPU时间等待事件发生的场合。,表达式语句和复合语句,把多个语句用大括号括起来,组合在一起形成具有一定功能的模块,这种由若干条语句组合而成的语句块称为复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。复合语句在程序运行时,中的各行单语句是依次顺序执行的。在C语言的函数中,函数体就是一个复合语句。,选择
20、语句,基本if语句的格式如下:if(表达式)语句组;if语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组”,否则跳过该语句组,继续执行下面的语句。,选择语句,if语句中的“表达式”通常为逻辑表达式或关系表达式,也可以是任何其他的表达式或类型数据,只要表达式的值非0即为“真”。以下语句都是合法的:if(3)if(x=8)if(P3_0)在if语句中,“表达式”必须用括号括起来。在if语句中,花括号“”里面的语句组如果只有一条语句,可以省略花括号。如“if(P3_0=0)P1_0=0;”语句,但是为了提高程序的可读性和防止程序书写错误,建议读者在任何情况下,都加上花括号。,选择语句,
21、if-else语句的一般格式如下:if(表达式)语句组1;else 语句组2;if-else语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组1”,否则执行“语句组2”,选择语句,if-else-if语句是由 if else 语句组成的嵌套,用来实现多个条件分支的选择,其一般格式如下:if(表达式1)语句组1;else if(表达式2)语句组2;else if(表达式n)语句组n;else 语句组n+1;,选择语句,选择语句,多分支选择的switch语句,其一般形式如下:switch(表达式)case常量表达式1:语句组1;break;case常量表达式2:语句组2;break;c
22、ase常量表达式n:语句组n;break;default:语句组n+1;该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应该常量表达式后的语句组,再执行break语句,跳出switch语句的执行,继续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同,则执行default后的语句组。,while语句用来实现“当型”循环,执行过程:首先判断表达式,当表达式的值为真(非0)时,反复执行循环体。为假(0)时执行循环体外面的语句。,循环体,格式:while(循环继续的条件表达式)语句组;,花括号不能丢掉!
23、,请问:下述程序实现了什么功能?main()int i,sum=0;while(i=10)sum=sum+i;i+;,循环语句,do-while语句用来实现“直到型”循环执行过程:先无条件执行一次循环体,然后判断条件表达式,当表达式的值为真(非0)时,返回执行循环体直到条件表达式为假(0)为止。,绝对不能少分号!,循环体,格式:do 循环体语句组;while(循环继续条件);,花括号不能丢掉!,请问:下述程序实现了什么功能?main()int i,sum=0;do sum=sum+i;i+;while(i=100);,循环语句,总循环次数已确定的情况下,可采用for语句形式为:for语句的一般
24、形式:for(循环变量赋初值;循环继续条件;循环变量增值)循环体语句组;,分隔符为分号,请问:下述程序实现了什么功能?main()int i,y=0;for(i=1;i=10;i+)y=y+i;,循环语句,for语句循环执行过程,for(循环变量赋初值;循环继续条件;循环变量增值)循环体语句组;,分隔符为分号,C语言数据与运算,1.赋值运算符2.算术运算符和算术表达式 3.关系运算符和关系表达4.逻辑运算符和逻辑表达式,赋值运算符,赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。符号为=。这里并不是等于的意思,只是赋值,等于用=表示。赋值语句左边必须是变量或寄存器,且必须先定义。
25、常量不能出现左边。,赋值运算符和赋值表达式,简单的赋值运算符:复合的赋值运算符,=,+=、-=、*=、%=、/=,i+=2 等价于 i=i+2 a*=b+5 等价于 a=a*(b+5)x%=3 等价于 x=x%3,算术运算符,(加法运算)(减法运算)*(乘法运算符)(除法运算符)%(求余运算符,或称模运算符)如:4%20+(变量自加1)-(变量自减1),注 意两个整数相除结果为整数,如8/5的结果为1,舍去小数部分。如果参加运算的两个数中有一个数为实数,则结果是实型。求余运算要求%两侧都是整型数据。,自增、自减运算,实战演练:请说明程序运行完后x,y,z,m,n的值分别是多少?main()in
26、t x=6,y,z,m,n;y=+x;z=x-;m=y/z;n=y%z;,自增运算符(+)和自减运算符(-):(1)前置运算变量、变量 即先增减、后运算。(2)后置运算变量、变量 即先运算、后增减。,关系运算符,关系运算符 优先级,=,=!=,低,高,关系表达式,用关系运算符将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式)连接起来的式子,称为关系表达式。关系表达式的值为逻辑值“真”或“假”,以1代表“真”,以0代表“假”。例如:(1)关系表达式“8=4”的值为,表达式的值为。(2)关系表达式“50”的值为,表达式的值为。,逻辑运算符及其优先级,逻辑运算符 优先级!(逻辑非)
27、&(逻辑与)|(逻辑或)注意:逻辑运算符与位操作运算符的区别。,逻辑表达式,用逻辑运算符将一个或多个表达式连接起来,进行逻辑运算的式子。逻辑量的真判断非0逻辑量的假判断0,若a=1,b=2,c=3,x=4,y=3,写出下各个表达式的值:(1)a+bc&b=c(2)!ab&b!=c|x+y=3(3)!(x=a)&(y=b)&0,0,0,0,例如:(1)xc 等效于(!a)&(bc),位运算,与操作按位与操作符:主要用途:取(或保留)1个数的某(些)位,其余各位置0。,位运算,或操作按位或操作符:|格式:x|y规则:对应位均为0时才为0,否则为1 例如,i=i|0 x0f;等同于 i|=0 x0f
28、;主要用途:将1个数的某(些)位置1,其余各位不变,位运算,异或操作按位异或操作符:格式:xy规则:对应位相同时为0,不同时为1 例如,i=i0 x0f;等同于 i=0 x0f;主要用途:使1个数的某(些)位翻转(即原来为1的位变为0,为0的变为1),其余各位不变。,位运算,按位取反操作按位取反操作符:格式:x规则:各位翻转,即原来为1的位变成0,原来为0的位变成1 例如,i=i;主要用途:间接地构造一个数,以增强程序的可移植性。,左移运算符“”的功能,是把“”左边的操作数的各二进制位全部右移若干位,移动的位数由“”右边的常数指定。进行右移运算时,如果是无符号数,则总是在其左端补“0”,位运算
29、,练习,1.若x=10,则!X的值为真或假?2.若a=3,b=2,则if(a&b)的值为真或假?3.5&0|8的值为?4.5 3&4|8 4 的结果为?,分隔符为分号,数组的概念,数组属于常用的数据类型,数组中的元素有固定数目和相同类型,数组元素的数据类型就是该数组的基本类型。例如,整型数据的有序集合称为整型数组,字符型数据的有序集合称为字符型数组。数组还分为一维、二维、三维和多维数组等,常用的是一维、二维和字符数组。,数组的基本特点,构造类形数据:由基本类型数据按照一定规则组成。数组:是有序数据的集合;数组中的每一个元素都属于同一个数据类型,用一个统一的数组名和下标来唯一地确定数组中的元素。
30、应用场合:需要处理的数据为数量已知的若干相同类型的数据时。注意:先定义,后使用。,一维数组的定义和引用,一维数组的定义:一般格式:类型标识符 数组名常量表达式;int array10;unsigned char num7;说明:数组名见名知意;数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。方括弧而非圆括弧;常量表达式:可以是常量或符号常量;表示数组元素的个数(也称数组长度)。不允许对数组大小作动态定义。数组元素下标从0开始。array0,array1,array9;,遵循标识符命名规则,数组元素的表达形式:数组名下标表达式Ar
31、ray4=100;array8=34;array10=56;注意:数组下标不能越界!一个数组元素具有和相同类型单个变量一样的属性,可以对它赋值和参与各种运算。,一维数组的引用,一般格式:数据类型 数组名常量表达式初值表1.定义时赋初值;int score5=1,2,3,4,5;2.给一部分元素赋值;int score5=1,2;3.使所有元素为0;int score5=0;4.给全部数组元素赋初值时,可以不指定数组长度;int score=1,2,3,4,5;,一维数组的初始化,本章内容定时/计数器 C语言的函数 中断系统,第4章 定时与中断系统,定时/计数器,8051单片机内部有两个16位的
32、可编程定时/计数器,称为T0(T0)和T1(T1),定时/计数器,8051定时器/计数器逻辑结构,定时/计数器,设置定时/计数器工作方式通过对方式寄存器TMOD的设置,确定相应的定时/计数器是定时功能还是计数功能,工作方式以及启动方法。定时/计数器工作方式有四种:方式0、方式1、方式2和方式3。定时/计数器启动方式有两种:软件启动和硬软件共同启动。除了从控制寄存器TCON发出的软件启动信号外,还有外部启动信号引脚,这两个引脚也是单片机的外部中断输入引脚。,定时/计数器,设置计数初值T0、T1是16位加法计数器,分别由两个8位专用寄存器组成,T0由TH0和TL0组成,T1由TH1和TL1组成。T
33、L0、TL1、TH0、TH1的访问地址依次为8AH8DH,每个寄存器均可被单独访问,因此可以被设置为8位、13位或16位计数器使用。在计数器允许的计数范围内,计数器可以从任何值开始计数,对于加1计数器,当计到最大值时(对于8位计数器,当计数值从255再加1时,计数值变为0),产生溢出。定时/计数器允许用户编程设定开始计数的数值,称为赋初值。初值不同,则计数器产生溢出时,计数个数也不同。例如:对于8位计数器,当初值设为100时,再加1计数156个,计数器就产生溢出;当初值设为200时,再加1计数56个,计数器产生溢出。,定时/计数器,启动定时/计数器根据设置的定时/计数器启动方式,启动定时/计数
34、器。如果采用软件启动,则需要把控制寄存器中的TR0或TR1置1;如果采用硬软共同启动方式,不仅需要把控制寄存器中的TR0或TR1置1,还需要相应外部启动信号为高电平。,定时器的方式寄存器TMOD,作用:TMOD用来确定两个定时器的工作方式。低半字节设置定时器T0,高半字节设置定时器T1。字节地址:89H,不可以位寻址。格式:D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 GATE C/T M1 M0 定时器1 定时器0,各位的含义:C/T:功能选择位。0为定时器方式;1为计数器方式。M1,M0:方式选择位。可以选择为四种工作方式0、1、2、3之1。四种工作方式的区
35、别后面讲解。,GATE:门控位。0:只要软件控制位TR0或TR1置1即可启动定时器开始工作;1:只有INT0或INT1引脚为高电平,且TR0或TR1置1时,才能启动相应的定时器开始工作。,返回,TF0,TH0,TL0,12分频,OSC,中断,高8位,低5位,控制,+,T0(P3.4),TR0,GATE,INT0(P3.2),C/T=0,C/T=1,例如:设定时器T0为定时工作方式,要求用软件启动 定时器T0工作,按方式1工作;定时器T1为计数 工作方式,要求软件启动,工作方式为方式2。则根据TMOD各位的定义可知,其控制字为:,即控制字为61H,其指令形式为:MOV TMOD,#61H,定时器
36、的控制寄存器TCON,作用:TMOD用来控制两个定时器的启动、停止,表明定时器的溢出、中断情况。字节地址:88H,可以位寻址。系统复位时,所有位均清零。格式:D7 D6 D5 D4 D3 D2 D1 D0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,各位的含义:TCON中的低4位与中断有关,在中断章节中讨论。TF1(8FH):定时器1溢出标志。计满后自动置1。TR1(8EH):定时器1运行控制位。由软件清零关闭定时器1。当GATE=0时,TR1 软件置1即启动定时器1。(SETB TR1)当GATE=1时,且INT1为高电平时,TR1置1启动定时器1;,定时器的四种工作方式
37、,方式的选择:根据M1,M0来选择。00:方式0 01:方式1 10:方式2 11:方式3,主要特点:方式0:13位定时器。TH0的8位+TL0的低5位 方式1:16位定时器。TH0的8位+TL0的8位 方式2:能重复置初始值的8位定时器。TL0和TH0必须赋相同的值。方式3:只适用于定时器0,T0被拆成两个独立的8位定时器TL0,TH0。其中:TL0与方式0、1相同,可定时或计数。用定时器T0的 GATE、C/T、TR0、TF0、T0、和INT0控制。TH0只可用作简单的内部定时功能。占用T1的控制位TF1、TR1和INT1,启动关闭仅受TR1控制。,定时器的方式0、1示意图,返回,TF0,
38、TH0,TL0,12分频,OSC,中断,高8位,8位或低5位,控制,+,T0(P3.4),TR0,GATE,INT0(P3.2),C/T=0,C/T=1,定时器的方式2示意图,TH0,8位,0,溢出,定时器的初始值的计算,对于不同的工作方式,计数器位数不同,故最大计数值M也不同:方式0:M=213=8192 方式1:M=216=65536 方式2:M=28=256 方式3:定时器0分为2个8位计数器,每个M均为256。因为定时/计数器是作加1计数,并在计满溢出时产生中断,因此初值X的计算如下:X=M 计数值 计算出来的结果X转换为16进制数后分别写入TL0(TL1)、TH0(TH1)。注意!方
39、式0时初始值写入时,对于TL不用的高3位应填入0!,用T1、工作方式0实现1秒延时函数,晶振频率为12MHz。方式0采用13位计数器,其最大定时时间为:81921s=8.192ms,因此,定时时间不可能象任务7中一样选择50ms,可选择定时时间为5ms,再循环200次。定时时间为5ms,则计数值为5ms/1s=5000,T1的初值为:X=M 计数值=8192 13位计数器中TL1的高3位未用,填写0,TH1占高8位,所以,X的实际填写值应为:X=0110001100011000B=6318H,举 例1,用T1方式0实现任务7中1秒延时函数如下:void delay1s()unsigned ch
40、ar i;TMOD=0 x00;/置T1为工作方式0 for(i=0;i0 xc8;i+)/设置200次循环次数 TH1=0 x63;/设置定时器初值 TL1=0 x18;TR1=1;/启动T1 while(!TF1);/查询计数是否溢出,即定时5ms时间到,TF1=1 TF1=0;/5ms定时时间到,将定时器溢出标志位TF1清零,举 例1,用T1、工作方式2实现1秒延时,晶振频率为12MHz。因工作方式2是8位计数器,其最大定时时间为:2561s=256s,为实现1秒延时,可选择定时时间为250s,再循环4000次。定时时间选定后,可确定计数值为250,则T1的初值为:X=M 计数值=256
41、 250=6=6H。采用T1方式2工作,因此,TMOD=0 x20。,举 例2,用定时器工作方式2实现的1秒延时函数如下:void delay1s()unsigned int i;/i取值范围为04000,因此不能定义成unsigned char TMOD=0 x20;/设置T1为方式2 TH1=6;/设置定时器初值,放在for循环之外 TL1=6;for(i=0;i4000;i+)/设置4000次循环次数 TR1=1;/启动T1 while(!TF1);/查询计数是否溢出,即定时250s时间到,TF1=1 TF1=0;/250s定时时间到,将定时器溢出标志位TF1清零,举 例2,在C语言程序
42、中,子程序的作用是由函数来实现的,函数是C语言的基本组成模块,一个C语言程序就是由若干个模块化的函数组成的。C程序都是由一个主函数main()和若干个子函数构成,有且只有一个主函数,程序由主函数开始执行,主函数根据需要来调用其他函数,其它函数可以有多个。,C语言的函数,1.标准库函数 标准库函数是由C51的编译器提供的,用户不必定义这些函数,可以直接调用。KEIL C51编译器提供了100多个库函数供我们使用。常用的C51库函数包括一般I/O口函数、访问SFR地址函数等,在C51编译环境中,以头文件的形式给出。2.用户自定义函数 用户自定义函数是用户根据需要自行编写的函数,它必须先定义之后才能
43、被调用。,函数分类和定义,函数定义的一般形式是:函数类型 函数名(形式参数表)形式参数说明局部变量定义函数体语句 其中,“函数类型”说明了自定义函数返回值的类型。“函数名”是自定义函数的名字。“形式参数表”给出函数被调用时传递数据的形式参数,形式参数的类型必须要加以说明。ANSI C标准允许在形式参数表中对形式参数的类型进行说明。如果定义的是无参数函数,可以没有形式参数表,但是圆括号不能省略。“局部变量定义”是对在函数内部使用的局部变量进行定义。“函数体语句”是为完成函数的特定功能而设置的语句。,函数分类和定义,函数调用就是在一个函数体中引用另外一个已经定义的函数,前者称为主调用函数,后者称为
44、被调用函数,函数调用的一般格式为:函数名(实际参数列表);对于有参数类型的函数,若实际参数列表中有多个实参,则各参数之间用逗号隔开。实参与形参顺序对应,个数应相等,类型应一致。,函数调用,在一个函数中调用另一个函数需要具备如下条件:(1)被调用函数必须是已经存在的函数(库函数或者用户自己已经定义的函数。如果函数定义在调用之后,那么必须在调用之前(一般在程序头部)对函数进行声明。(2)如果程序使用了库函数,则要在程序的开头用include预处理命令将调用函数所需要的信息包含在本文件中。如果不是在本文件中定义的函数,那么在程序开始要用extern修饰符进行函数原型说明。,函数调用,中断是指通过硬件
45、来改变CPU的运行方向。计算机在执行程序的过程中,外部设备向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。,什么是中断,(1)中断服务程序:CPU响应中断后,转去执行相应的处理程序,该处理程序通常称之为中断服务程序。(2)主程序:原来正常运行的程序称为主程序。(3)断点:主程序被断开的位置(或地址)称为断点。(4)中断源:引起中断的原因,或能发出中断申请的来源,称为中断源。(5)中断请求:中断源要求服务的请求称为中断请求(或中断申请。,中断基本
46、概念,同步工作异常处理实时处理,中断特点,中断系统的结构,MCS-51中断系统内部结构示意图,MCS-51系列单片机中断源,中断标志,中断的开放和禁止,MCS-51系列单片机的5个中断源都是可屏蔽中断,中断系统内部设有一个专用寄存器IE,用于控制CPU对各中断源的开放或屏蔽。IE寄存器格式如下:,中断的开放和禁止,中断优先级,MCS-51系列单片机有两个中断优先级:高优先级和低优先级。每个中断源都可以通过设置中断优先级寄存器IP确定为高优先级中断或低优先级中断,实现二级嵌套。同一优先级别的中断源可能不止一个,因此,也需要进行优先权排队。同一优先级别的中断源采用自然优先级。中断优先级寄存器IP,
47、用于锁存各中断源优先级控制位。IP中的每一位均可由软件来置1或清0,1表示高优先级,0表示低优先级。,中断优先级,中断处理过程,中断响应中断响应是指CPU对中断源中断请求的响应。CPU并非任何时刻都能响应中断请求,而是在满足所有中断响应条件、且不存在任何一种中断阻断情况时才会响应。CPU响应中断的条件有:有中断源发出中断请求;中断总允许位EA 置 1;申请中断的中断源允许位置1。CPU响应中断的阻断情况有:CPU正在响应同级或更高优先级的中断;当前指令未执行完;正在执行中断返回或访问寄存器IE和IP。,中断处理过程,中断响应过程就是自动调用并执行中断函数的过程。C51编译器支持在C源程序中直接
48、以函数形式编写中断服务程序。常用的中断函数定义语法如下:void 函数名()interrupt n其中n为中断类型号,C51编译器允许031个中断,n取值范围031。下面给出了8051控制器所提供的5个中断源所对应的中断类型号和中断服务程序入口地址:中断源 n 入口地址外部中断0 00003H定时/计数器0 1000BH外部中断1 20013H定时/计数器1 3 001BH串行口 4 0023H,中断处理过程,中断响应时间中断响应时间是指从中断请求标志位置位到CPU开始执行中断服务程序的第一条语句所需要的时间。1)中断请求不被阻断的情况外部中断响应时间至少需要3个机器周期,这是最短的中断响应时
49、间。一般来说,若系统中只有一个中断源,则中断响应时间为3 8个机器周期。2)中断请求被阻断的情况如果系统不满足所有中断响应条件、或者存在任何一种中断阻断情况,那么中断请求将被阻断,中断响应时间将会延长。,本章内容单片机与LED数码管接口LED大屏幕显示器和接口字符LCD 液晶显示和接口单片机与键盘接口,第5章 显示和键盘接口技术,单片机与LED数码管接口,LED数码管结构及原理,单片机与LED数码管接口,LED数码管结构及原理,单片机与LED数码管接口,LED数码管字型编码,若将数值0送至单片机的P1口,数码管上不会显示数字“0”。显然,要使数码管显示出数字或字符,直接将相应的数字或字符送至数
50、码管的段控制端是不行的,必须使段控制端输出相应的字形编码。将单片机P1口的P1.0、P1.1 P1.7八个引脚依次与数码管的a、bf、dp八个段控制引脚相连接。如果使用的是共阳极数码管,COM端接+5V,要显示数字“0”,则数码管的a、b、c、d、e、f六个段应点亮,其它段熄灭,需向P1口传送数据11000000B(C0H),该数据就是与字符“0”相对应的共阳极字型编码。若共阴极的数码管COM端接地,要显示数字“1”,则数码管的b、c两段点亮,其他段熄灭,需向P1口传送数据00000110(06H),这就是字符“1”的共阴极字型码了。,单片机与LED数码管接口,LED静态显示,静态显示是指数码