版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机最小系统第一次课问题什么是单片机?单片机的特性是什么?单片机应用在哪些领域?常用的单片机有哪些系列?我们讲的MCS-51单片机是
型号。封装是
。有
引脚。22:16单片机的种类51系列单片机PIC系列单片机AVR系列单片机MSP430单片机22:16单片机能够工作的最小电路称为单片机最小系统电路最小系统电路包括:时钟电路复位电路电源电路最小系统22:16
时钟电路时钟信号的产生时钟电路用于产生单片机工作所需的时钟控制信号,其性能影响单片机系统的稳定性。时钟频率影响单片机运行速度。常用时钟电路有两种:内部时钟电路外部时钟电路22:16内部时钟电路电容C1和C2取20~40pF晶振范围:1.2~12MHZ一般选用:
6MHZ12MHZ11.0592MHZ(通信场合)22:16时序振荡周期时钟周期机器周期Tcy指令周期时钟周期为振荡周期的2倍执行一条指令所需要的时间。单周期指令,双周期指令和四周期指令振荡周期是单片机的基本时间单位。主频为fosc,则振荡周期是主频的倒数。22:16复位电路复位电路,就是利用它把电路恢复到起始状态,就像计算器的清零按钮的作用一样。
AT89S51单片机的RST端(9管脚)是复位端。当向RST端输入两个机器周期的高电平单片机就会复位,复位后单片机从0000H开始执行程序。22:16单片机复位方式22:16③单片机供电方法方法1:使用电源适配器22:16方法2:使用USB线供电引脚名称描述颜色1VCC电源红色2D-数据线-白色3D+数据线+绿色4GND地黑色22:1622:16方法3:自己制作单片机供电电源使用三端稳压器件7805制作单片机供电电源,电路图参考图1-11进行。22:1622:16方法4:电池供电纽扣电池干电池锂电池层叠电池22:1622:16④最小系统最小系统,是使用最少的外围元器件让单片机能够工作的电路。AT89C51单片机加上电源电路、复位电路和时钟电路就构成了单片机的最小系统。22:16作业:使用Proteus绘制最小系统Keil使用作业单灯闪烁程序第3次课-单灯闪烁CLICKHERETOADDATITLE22:16项目描述使用AT89c51单片机的一个引脚控制一个发光二极管以0.1秒的时间间隔闪烁。单片机要工作,必须有时钟电路、复位电路和电源电路,它们和单片机一起构成的电路称为单片机的最小系统,是单片机控制电路的基础,是必须掌握的单片机基本电路。发光二极管(LED,电路符号)是一种最常用的指示器件,近几年因其成本下降和节能的特点大量使用在照明设备中。发光二极管有极性之分,当有足够的正向电流(正极流向负极的电流,约10mA~30mA)通过时便会发光。发光二极管工作原理
发光二极管闪烁工作原理22:16单片机控制单灯闪烁的电路图22:16单片机控制单灯闪烁的程序#include<reg51.h> sbitP1_0=P1^0; voiddelay(unsignedchari); //延时函数声明voidmain() //主函数{while(1){P1_0=0; //点亮发光二极管delay(100); //调用延时函数,实际变量为100,实现0.1S延时。P1_0=1; //熄灭发光二极管;delay(100); //调用延时函数,实际变量为100,实现0.1S延时。}}voiddelay(unsignedchari) //延时函数,无符号字符型变量i为形式参数{unsignedcharj,k; //定义无符号字符型变量j和kfor(k=0;k<i;k++) //双重for循环语句实现软件延时for(j=0;j<124;j++); //采用12MHZ晶振,则此循环的时间约为1ms}PARTONE作业:发光二极管D1,D2分别接到单片机P1.0,P1.1端口上,编写程序使D1和D2同时闪烁,频率为2Hz22:16单片机数据类型MCS-51系列单片机的基本组成时钟电路CPUROMRAMT0T1中断系统串行接口并行接口P0P1P2P3TXDRXDINT0INT1定时计数器中央处理器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或11.0592复位电路单片机的存储结构MCS-51单片机存储器可以分成两大类:
RAM,CPU在运行时能随时进行数据的写入和读出,但在关闭电源时,其所存储的信息将丢失。它用来存放暂时性的输入输出数据、运算的中间结果或用作堆栈。
ROM,写入信息后不易改写的存储器。断电后,其中的信息保留不变。用来存放固定的程序或数据,如系统监控程序、常数表格等。
MCS-51单片机采用哈佛结构,就是将数据存储器(RAM)和程序存储(ROM)分开的存储器结构。MCS-51单片机存储区可分为4个区域片内数据存储区(IDATA)片外数据存储区(XDATA)片内程序存储区(CODE)片外程序存储区(CODE)C51编译器支持的存储器类型存储器类型描述data直接访问片内RAM,访问速度最快(128字节)bdata可位寻址的片内RAM,允许位寻址和字节寻址(16字节)idata间接访问片内RAM,允许访问整个内部RAM(256字节)pdata分页访问片外RAM(256字节)xdata访问外部数据存储器和总线方式扩展的外设端口地址(64K字节)code程序存储器(64K字节)KielC51中如何使用单片机资源标识符和关键字数据类型、常量和变量运算符和表达式KeilC51语句标识符和关键字标识符是在程序中定义的对象,可以是函数、变量、常量、数组、数据类型和程序语句等。一般由字母、数字和下划线组成,标识符的第一个字符必须是字母或下划线。关键字是一些固定名称或有特殊含义的标识符,在编程的时候不能另作它用,自己定义的标识符(如变量名)不能和关键字相同。并且关键字在源程序加入KeilC51项目文件以后颜色和其它内容不同,很容易区别。数据类型、常量和变量
KeilC51的数据类型和TC类似,也分为基本型和复合数据类型,主要使用基本类型中的char,int,float等,除了基本类型,KeilC51还扩展了bit,sbit,sfr,sfr16四种变量类型,其中bit和sbit也是常用的数据类型。KeilC51支持的数据类型22:16数据类型数据类型关键词长度值域字符型signedchar1字节-128~+127无符号字符型unsignedchar1字节0~255整型signedint2字节-32768~+32867无符号整型unsignedint2字节0~65535长整型signedlong4字节-2147483648~+2147483647无符号长整型unsignedlong4字节0~4294967295浮点型float4字节±1.176E-38~±3.40E+38指针*1~3字节对象地址位bit1位0或1特殊功能寄存器位sbit1位0或1特殊功能寄存器sfr1字节0~25516位特殊功能寄存器sfr162字节0~65535①位常量它的值是一个二进制数,为0或者1②整型常量
在C51中整型常量可以表示成以下几种形式:十进制整数。如123、0、-89等。十六进制整数。以0x开头表示,如0x34,-0x3B、0x1234、0xABFC等长整数。在整数后面加字母L,如104L在存储器中占四个字节。④字符型常量字符型常量是用单引号引起的字符,如‘a’、‘9’、‘F’等。对于字符型常量,在单片机中用ASCII码表示。例如
unsignedchara;a=‘9’;与a=0x39;等效⑤字符串型常量字符串型常量由双引号“”括起的字符组成。如“D”、“1234”、“ABCD”等。注意字符串常量与字符常量是不一样一个字符常量在计算机内只用一个字节存放一个字符串常量在内存中存放时不仅双引号内的字符一个占一个字节,而且系统会自动的在后面加一个转义字符“\0”作为字符串结束符。不要将字符常量和字符串常量混淆,如字符常量‘A’和字符串常量“A”是不一样的。(2)变量变量是一种在程序执行过程中其值能不断变化的量。变量必须先定义后使用变量的定义格式[存储种类]数据类型
[存储器类型]变量名表;auto(自动变量)extern(外部变量)static(静态变量)register(寄存器变量)charunsignedcharintunsignedintsbitbitdata(片内数据存储器)xdata(片外数据存储器)code(程序存储器)存储器类型省略,表示变量存放在片内数据存储器内变量名可以由字母、数字和下划线三种字符组成,且第一个字母必须为字母或下划线。变量名有两种:普通变量名和指针变量名。它们的区别是指针变量名前面要带“*”号。2.3.2.3运算符和表达式运算符名运算符算术运算符+-*/%++--关系运算符><==>=<=!=逻辑运算符!&&||位运算符<<>>~&|^赋值运算符=条件运算符?:逗号运算符,指针运算符*&求字节数运算符sizeof强制类型转换运算符(类型)下标运算符[]函数调用运算符()①赋值运算符使用“=”的赋值语句格式如下:变量=表达式;
例如:a=0xFF;//将常数十六进制数0xFF赋与变量ab=c=33;//同时赋值给变量b,c
d=e;//将变量e的值赋与变量d②算术运算符+
加或取正值运算符-
减或取负值运算符*乘运算符/
除运算符%
取余运算符++(变量自加1)--
(变量自减1)整数相除还是整数计算机中存储数据是一个一个固定的电路结构,整数和实数存储的方式不一样,所以整数在运算后只能得到整数。22:16举例:除和取余运算符的应用例1:获取一个16位数的高8位和低8位数单片机典型应用:定时器送计数初值TH0=(65536-1000)/256;//送计数值高八位给TH0TL0=(65536-1000)%256;//送计数值高八位给TL0例2:获取十进制数的BCD码单片机典型应用:将数码管显示的数字进行数位分解,例如:unsignedinta=1234;unsignedchard[4];d[0]=a/1000;//取出千位数字d[1]=(a/100)%10;//取出百位数字d[2]=(a/10)%10;//取出十位数字d[3]=a%10;//取出个位数字(3)分支语句基本if语句if-else语句if-elseif语句(a)基本if语句基本if语句的格式如下:if(条件表达式){
语句组;
}(b)if-else语句if-else语句的一般格式如下:if(条件表达式){
语句组1;
}else{
语句组2;
}(c)if-else-if语句if-else-if语句一般格式如下:if(条件表达式1){
语句组1;}elseif(条件表达式2){
语句组2} …elseif(条件表达式n){语句组n;}else{语句组n+1;}多分支选择的switch语句,其一般形式如下:
switch(表达式){ case常量表达式1:语句组1;break; case常量表达式2:语句组2;break;
…… case常量表达式n:语句组n;break;default:语句组n+1;break;}(4)多分支语句(5)循环语句循环程序的作用是:对给定的条件进行判断,当给定的条件成立时,重复执行给定的程序段,直到条件不成立时为止。给定的条件称为循环条件需要重复执行的程序段称为循环体循环语句包括while语句(当型循环)do-while语句(直到型循环)for语句(for循环)while语句用来实现“当型”循环,执行过程:首先判断表达式,当表达式的值为真(非0)时,反复执行循环体。为假(0)时执行循环体外面的语句。循环体循环继续的条件表达式下一条语句非0(真)0(假)循环体语句组while执行过程格式:while(循环继续的条件表达式)
{
语句组;}花括号不能丢掉!请问:下述程序实现了什么功能?main(){inti,sum=0;while(i<=10){sum=sum+i;i++;}}(a)while语句注意:如果循环条件一开始就为假,那么while后面的循环体一次都不会被执行While(1)为无限循环(死循环),因此while(1)只出现在主函数中。do-while语句用来实现“直到型”循环执行过程:先无条件执行一次循环体,然后判断条件表达式,当表达式的值为真(非0)时,返回执行循环体直到条件表达式为假(0)为止。绝对不能少分号!循环体格式:do{
循环体语句组;
}while(循环继续条件);花括号不能丢掉!循环继续的条件表达式下一条语句非0(真)0(假)循环体语句组请问:下述程序实现了什么功能?main(){inti,sum=0;do{sum=sum+i;i++;}while(i<=100);}(b)do-while语句for语句的一般形式:
for(循环变量赋初值;循环继续条件;循环变量增值)
{
循环体语句组;
}
分隔符为分号(c)for语句
循环继续条件for的下一条语句非0(真)0(假)循环体语句组循环变量赋初值循环变量增值for语句循环执行过程只求解一次要执行若干次,具体次数由“循环继续条件”决定for语句不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定,但给出了循环继续条件的情况,它完全可以代替while语句和do-while语句。单片机KeilC51程序结构
KeilC51
程序以函数形式组织程序结构,C程序中的函数与其他语言中所描述的“子程序”或“过程”的概念是一样的。
C程序基本结构一个C语言源程序是由一个或若干个函数组成,每一个函数完成相对独立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列顺序如何,最后在主函数中结束整个程序。C语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。C语言程序使用“;”作为语句的结束符,一条语句可以多行书写,也可以一行书写多条语句。单片机KeilC51程序的三种基本控制结构顺序结构分支结构循环结构按键控制发光二极管22:16K2K1D4D3D2D1断开断开亮灭灭灭断开闭合灭亮灭灭闭合断开灭灭亮灭闭合闭合灭灭灭亮在单片机的P2^0连接了开关K1,P2^1引脚连接了开关K2,P1端口连接了4个发光二极管,以下程序采用多分支程序结构,判断两个开关的4种状态,执行后,4个发光二极管的状态如表所示。按键控制发光二极管22:16#include<reg51.h>sbitP2_0=P2^0;sbitP2_1=P2^1; voidmain(){P2_0=1;P2_1=1;while(1){if((P2_0==0)&&(P2_1==0))
//两个开关均闭合,控制D1亮P1=0x01;elseif(P2_1==0)
//开关K2闭合,控制D2亮P1=0x02;elseif(P2_0==0)
//开关K1闭合,控制D3亮P1=0x04;else
///两个开关均断开,控制D4亮P1=0x08;}}单片机并行接口单片机并行接口
MCS-51系列单片机共有4个8位并行I/O口,分别用P0、P1、P2、P3表示。每个I/O口既可以按位操作使用单个引脚,也可以按字节操作使用8个引脚。P0口P0口的结构P0口作为通用I/O口时的工作原理P0口作为地址/数据线使用时的工作原理1.P0口的结构输出控制电路输出驱动电路
P0口逻辑电路2.作为通用I/O端口使用00截止输出通路输入通路
(1)当P0口作为一般I/O口,且作为输出口时,必须外接上拉电阻(2)当P0口作为一般I/O口,且作为输入口时,在读取引脚时,必须先向电路中的锁存器写入“1”结论:3.作为地址/数据线使用1输入通路输出通路P0口功能总结P0口既可以作为通用I/O口,也可以作为低8位地址总线和数据总线P0口作为通用的I/O口时需注意:作为输出口时,必须外接上拉电阻作为输入口时,在读取引脚时,必须先向电路中的锁存器写入“1”P1口P1口逻辑电路输出通路输入通路P1口是准双向口,只能作为通用I/O口使用。P1口作为输出口使用时,无需再外接上拉电阻。P1口作为输入口使用时,在读引脚时,必须先向电路中的锁存器写入“1”。P1口总结:P2口
P2口逻辑电路输出通路输入通路P2口既可以通用I/O口使用,也可以作为高8位地址总线P2口作为通用I/O口需注意:P2口作为通用I/O口的输出口使用时,无需再外接上拉电阻。P2口作为通用I/O口的输入口使用时,在读引脚时,必须先向锁存器写入“1”。P2口的总结输出通路输入通路P3口作为一般I/O1P3口P3口逻辑电路P3口逻辑电路P3口作为第二功能引脚1输出通路输入通路P3口是准双向口,可以作为通用I/O口使用,还可以作为第二功能使用。作为第二功能使用的端口,不能同时当作通用I/O口使用,但其他未被使用的端口仍可作为通用I/O口使用。P3口作为通用I/O的输出口使用时,不用外接上拉电阻P3口作为通用I/O口的输入口使用时,在读引脚时,必须先向锁存器写入“1”。P3口总结内部寄存器数据为1,经过转换,外部引脚就是1内部寄存器数据为0,经过转换,外部引脚就是0这个转换电路,可以不用了解它的详细工作原理,但是它作用的效果必须知道。这个转换电路,如同汽车方向盘的传动系统,把司机操作方向盘的动作,转换为汽车前进的动作。8051单片机并行I/O端口使用总结各个I/O端口的作用:P0口:既可以作为一般I/O口,又可以作为低8位的地址/数据总线P1口:只能作为一般的I/O口P2口:既可以作为一般I/O口,又可以作为高8位的地址总线P3口:既可以作为一般I/O口,又可以作为第二功能端口
各个I/O端口作为I/O口需要注意作为作为一般I/O口,且作为输出端口时,只有P0必须外接上拉电阻。作为一般I/O口,且作为输入端口时,P0、P1、P2和P3引脚在读引脚前,均需向相应的锁存器写入“1”8051单片机并行I/O端口使用总结(续)设计制作流水灯流水灯硬件电路流水灯功能要求利用单片机的P1口控制8个发光二极管的亮灭,要求发光二极管从D1-D8依次点亮(一个时刻只有一个发光二极管亮),每个发光二极管点亮的时间为0.5s,要求上述过程重复执行流水灯控制实现P1口引脚的电平状态显示状态单片机引脚输出数据P1口输出数据P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0复位状态(全灭)11111111FFH状态1(D1亮)11111110FEH状态2(D2亮)11111101FDH状态3(D3亮)11111011FBH状态4(D4亮)11110111F7H状态5(D5亮)11101111EFH状态6(D6亮)11011111DFH状态7(D7亮)10111111BFH状态8(D8亮)011111117FH流水灯程序设计方法1:利用数组来实现方法2:利用移位指令来实现位运算一、位运算符运算符含义运算符含义&按位与~取反|按位或<<
左移^按位异或>>
右移需要注意的是,只有整型数据或者字符型数据才能进行位运算,实型数据不能进行位运算。一、位运算符1.“按位与”运算符(&)按位与是指,参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。0&0=00&1=01&0=01&1=1总结:跟0相与为0,跟1相与保留应用:若想对某些位清零,其余位不变,则需要跟对应位是0,其余位是1的数相与一、位运算符2.“按位或”运算符(|)按位或是指,参加运算的两个数据,按二进制位进行“或”运算。如果两个相应的二进制位都为0,则该位的结果值为0;否则为1。0&0=00&1=11&0=11&1=1
总结:跟0相或保留,跟1相或置1应用:若想让某一位置1,跟对应的位是1,其他位是0的数相或。11010000|0000111111011111一、位运算符若要实现使发光二极管亮灭闪烁,则可以用以下语句实现:while(1){P1=P1&0xfe;delay(200);P1=P1|0x01;delay(200);}一、位运算符3.异或”运算符(^)异或运算符^也称XOR运算符。它的规则是:若参加运算的两个二进制位同号则结果为0(假),异号则结果为1(真)。即:0^0=00^1=11^0=11^1=0总结:跟1相异或翻转,跟0相异或保留应用:(1)使特定位翻转。所谓的翻转,就是把0变为1,把1变为0。一、位运算符应用:(2)交换两个值,不用临时变量例如:a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:a=a^b;b=b^a;a=a^b;一、位运算符若要实现使发光二极管亮灭闪烁,则可以用以下语句实现:while(1){P1=P1^0x01;delay(200);}一、位运算符4.“取反”运算符(~)~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。一、位运算符若要实现使发光二极管亮灭闪烁,则可以用以下语句实现:while(1){P1_0=~P1_0;delay(200);}一、位运算符5.左移运算符(<<)
左移运算符是用来将一个数的各二进制位全部向左移动若干位,高位左移后溢出,舍弃,低位填充0。
左移1位相当于该数乘以2,左移2位相当于该数乘以22=4,15<<2=60,即乘了4。一、位运算符以下程序实现了流水灯:voidmain() //主函数{unsignedchari,w;while(1){w=0x01; //信号灯显示字初值为01Hfor(i=0;i<8;i++){P1=~w; //显示字取反后,送P1口delay(500); //延时w<<=1; //显示字左移一位 }}}一、位运算符6.右移运算符(>>)
右移运算符是用来将一个数的各二进制位全部向右移动若干位,低位右移舍弃,对于无符号数来说高位填充0。
对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0。如果符号位原来为1(即负数),则最高位移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的系统移入1。移入0的称为“逻辑右移”,即简单右移;移入1的称为“算术右移”。在单片机里,大多数使用无符号数,故右移时最高位移入的是0。右移一位相当于除以2,右移n位相当于除以2n,但移出去的位不能为1。一、位运算符voidmain() //主函数{unsignedchari,w;while(1){w=0x80; //信号灯显示字初值为01Hfor(i=0;i<8;i++){P1=~w; //显示字取反后,送P1口delay(500); //延时w>>=1; //显示字左移一位 }}}左移和右移可以看做8个人排队。一、位运算符7.复合赋值运算符位运算符与赋值运算符可以组成复合赋值运算符。例如:&=,|=,>>=,<<=,∧=
例:a&=b相当于a=a&b
a<<=2相当于a=a<<2二、位运算的实际应用序号功能示例位运算1去掉最后一位00101101->00010110x>>12在最后加一个000101101->01011010x<<13在最后加一个100101101->01011011x<<1+14把最后一位变成100101100->00101101x|15把最后一位变成000101101->00101100x|1-16最后一位取反00101101->00101100x^17把右数第k位变成100101001->00101101,k=3x|(1<<(k-1))8把右数第k位变成000101101->00101001,k=3x&(~(1<<(k-1)))9右数第k位取反00101001->00101101,k=3x^(1<<(k-1))10取末三位01101101->101x&711取末k位01101101->1101,k=4x&(1<<k-1)12取右数第k位1101101->1,k=4x>>(k-1)&113把末k位变成100101001->00101111,k=4x|(1<<k-1)14末k位取反00101001->00100110,k=4x^(1<<k-1)15把右边连续的1变成000101111->00100000x&(x+1)16把右起第一个0变成100101111->00111111x|(x+1)17把右边连续的0变成111011000->11011111x|(x-1)18取右边连续的1100101111->1111(x^(x+1))>>119去掉右起第一个1的左边100101000->1000x&(x^(x-1))二、位运算的实际应用位运算在实际中有很多实际的使用,如压缩/解压缩技术,文件或者视频的压缩技术,就是采用了位运算;IP地址和子网掩码就是位运算在网络中的应用。TCP/IP协议(软件)和其他很多协议都是用C语言编写的;另外位运算可以大大的提高计算机的运行速度。流水灯练习实现流水灯按照(LED1,LED2)-(LED3,LED4)-(LED5,LED6)-(LED7,LED8)顺序点亮。实现流水灯按照LED4-LED5-LED3-LED6-LED2-LED7-LED1-LED8顺序点亮实现流水灯8个LED全亮,LED从下往上逐个熄灭,每0.5秒熄灭一个,最终8个LED全灭。中断按键,按一下,灯亮,再按一下,灯灭。#include<reg51.h>sbitled=P1^7;sbitkey=P3^2;voidmain(){led=1;while(1){ if(key==0) led=~led;}
}问题来了多次响应问题响应不及时问题及时响应响应一次需求中断中断一套硬件系统(响应及时)响应后可以执行指定的程序(灵活方便)P3.2P3.4P3.3P3.5P3.1P3.0void函数名()interruptm{函数体;}其中m为中断类型号,m取值范围0~31。8051的5个中断源所对应的中断类型号和中断服务程序入口地址:
中断源m入口地址外部中断000003H定时/计数器01000BH外部中断120013H定时/计数器13001BH串行口中断40023H键控led灯要求采用中断方式实现每按一次使LED灯的状态变化一次,即开始时LED灯灭,按第一次按键,LED亮,按第二次按键,LED灭,按第三次按键,LED亮,…。外部中断中断函数流程图主函数流程图#include<reg51.h>sbitled=P1^7;voidmain(){led=1;IT0=1;EX0=1;EA=1; while(1);}voidkey_int(void)interrupt0//中断服务程序{led=~led;}作业1利用外部中断1控制发光二极管D1,按下按键,D1亮,再次按下按键,D1熄灭,再按按键,D1亮,如此反复。快速响应机制硬件+软件专门硬件,不占用CPU软件,可以灵活处理不同的情况。新冠疫情响应机制一套硬件:健康码随时监控一套软件:专人负责。体现出了我们国家强大的组织能力,强大的自我革新的能力,强大的自我进化能力。其他国家进入了“管,经济死;不管,人死。”的无解循环。TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)IT0外部中断0触发方式设置位
IT0=0电平触发方式,低电平有效IT0=1边沿触发方式,下降沿有效IE0外部中断0中断请求位(硬件自动设置)IE0=1有中断请求IE0=0无中断请求IT1外部中断1触发方式设置位
IT1=0电平触发方式,低电平有效IT1=1边沿触发方式,下降沿有效IE1外部中断1中断请求位(硬件自动设置)IE1=1有中断请求IE1=0无中断请求控制寄存器TCONEX0,外部中断0允许位;ET0,T0中断允许位;EX1,外部中断1允许位;ET1,T1中断允许位;ES,串口中断允许位;EA,CPU中断允许(总允许)位。EAESET1EX1ET0EX0IE(A8H)中断允许控制寄存器IE用于控制CPU对各中断源的开放或屏蔽1为开放,0为禁止(3)中断的允许和屏蔽中断优先级寄存器IP
PX0,外部中断0优先级设定位;PT0,T0优先级设定位;PX1,外部中断1优先级设定位;PT1,T1优先级设定位;PS,串口优先级设定位。PSPT1PX1PT0PX0IP(B8H)0为低优先级1为高优先级作业2按下按键,发光二极管闪烁,再次按下按键,发光二极管熄灭,再次按下按键,发光二极管闪烁,如此往复。按键接P3.3,使用外部中断1控制。总结中断是一套反应快速的硬件系统,包含硬件和软件使用步骤:1.设置IT0、IE0、EA2.写中断服务程序中断练习中断的使用设置触发方式IT0=1;开中断EX0=1;开CPU中断EA=1;写中断服务程序voidint0_int(void)interrupt0{//中断服务程序执行语句}例题1:按键控制单灯闪烁按下按键,D1闪烁,再次按下,D1熄灭,第三次按下按键,D1闪烁……设置标志位。例题2:按键控制流水灯按键控制流水灯的样式,第一次按下,流水灯花样一,第二次按下,流水灯花样2,第三次按下,流水灯花样三……数码管静态显示单片机控制7段LED显示器LED显示器的结构与原理单个数码管的外形共阳极8个发光二极管的阳极连接在一起,作为公共端(com)共阴极8个发光二极管的阴极连接在一起,作为公共端(com)LED数码管的结构共阳极数码管工作原理当公共端接高电平,某段控制端(dp,g-a端)为低电平时,对应的发光二极管导通并点亮。通过点亮不同的段,显示出不同的字符。共阴极数码管工作原理当公共端接低电平,某段控制端(dp,g-a端)为高电平时,对应的发光二极管导通并点亮。通过点亮不同的段,显示出不同的字符。显示字符共阳极字段码共阴极字段码显示字符共阴极字段码共阳极字段码0C0H3FHCC6H39H1F9H06HDA1H5EH2A4H5BHE86H79H3B0H4FHF8EH71H499H66HP8CH73H592H6DHUC1H3EH682H7DHTCEH31H7F8H07HY91H6EH880H7FHLC7H38H990H6FH.7FH80HA88H77H“灭”FFH00B83H7CH………………LED数码管字型编码控制LED数码管显示数字或字符,就变成了控制8个发光二极管的亮灭状态
4.3.2.2LED数码管显示器的译码方式和显示方式译码方式是指由显示字符转换得到对应的字段码的方式硬件译码方式软件译码方式(1)硬件译码方式硬件译码方式是指利用专门的硬件电路来实现显示字符到字段码的转换。如芯片SN74LS47N(共阳极),SN74LS48N(共阴极)。(2)软件译码方式软件译码方式是指不采用译码芯片,以编程的方法(如查表法)得到要显示字符的段码值,控制数码管显示相应字符。按照连接方式分静态和动态显示两种。软件译码由于没有硬件开销,因而在实际系统中经常使用。(3)LED静态显示静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。LED静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与一个8位的I/O口线相连。要显示字符,直接在I/O线送相应的字段码。
(4)LED动态显示方式LED动态显示是将所有的数码管的段选线并接在一起,用一个I/O口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的I/O口线控制。动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管“位选端”有效,并送出相应的字型显示编码。此时,其它位的数码管因“位选端”无效而都处于熄灭状态;下一时段按顺序选通另外一位数码管,并送出相应的字型显示编码,依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。这一过程称为动态扫描显示。LED显示器与单片机的接口LED显示器从译码方式上有硬件译码方式和软件译码方式。从显示方式上有静态显示方式和动态显示方式。在使用时可以把它们组合起来。在实际应用时,如果数码管个数较少,通常用硬件译码静态显示。在数码管个数较多时,则通常用软件译码动态显示。(1)软件译码静态显示功能要求:数码管上显示0-99,数字每0.5秒加1。
实验现象源程序动态显示LED静态显示静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。LED静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与一个8位的I/O口线相连。要显示字符,直接在I/O线送相应的字段码。
在实际应用时,如果数码管个数较少,通常用硬件译码静态显示。在数码管个数较多时,则通常用软件译码动态显示。LED动态显示方式LED动态显示是将所有的数码管的段选线并接在一起,用一个I/O口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的I/O口线控制。动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管“位选端”有效,并送出相应的字型显示编码。此时,其它位的数码管因“位选端”无效而都处于熄灭状态;下一时段按顺序选通另外一位数码管,并送出相应的字型显示编码,依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。这一过程称为动态扫描显示。动态显示原理动态显示原理动态显示原理0x5B110110100111110110101101101011011010110110100动态显示原理1111110010110x3F001111110011111100111111001111110动态显示原理0110000011010x06000001100000011000000110000001100动态显示原理1111011011100x6F011011110110111101101111011011110软件译码动态显示六位数码管动态显示功能要求:数码管上稳定显示“012345”。
动态显示举例#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodecodevalue[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~F的字段码表ucharcodechocode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选码表uchardisbuffer[6]={0,1,2,3,4,5};//定义显示缓冲区//************延时函数************voiddelay(uinti)//延时函数{uintj;for(j=0;j<i;j++);}动态显示举例//***********显示函数voiddisplay(void){uchari,p,temp;for(i=0;i<6;i++) { p=disbuffer[i];//取当前显示的字符 temp=codevalue[p];//查得显示字符的字段码 P1=temp;//送出字段码 temp=~chocode[i];//取当前的位选码 P2=temp;//送出位选码 delay(20);//延时1msP2=0x00;//关闭显示 }}动态显示举例voidmain(void){ while(1) {display();}//调用显示函数}*产品计数器4.4项目实施(产品计数器设计)制作一个生产线上统计产品数量的计数器。使用光电传感器检测,AT89C51作为主控芯片,采用LED数码管显示数目。计件数目在1万件之内用光电传感器检测是否有产品经过,当每检测到一个产品经过时,光电传感器输出一个脉冲由于产品什么时候到来存在随机性,因此采用单片机的外部中断引脚来处理光电传感器的输出信号,可以提高单片机的工作效率对于显示,计件数目在1万以下,只需要4个数码管即可,采用动态软件译码方式较经济。在仿真时,采用一个按键模拟光电传感器的工作,每按一次键表示检测到一个产品经过生产线。设计思路:仿真图:共阳极外部中断练习1给产品计数器增加”启动/暂停“功能。给产品计数器增加“清零”功能。中断练习中断的使用设置触发方式IT0=1;开中断EX0=1;开CPU中断EA=1;写中断服务程序voidint0_int(void)interrupt0{//中断服务程序执行语句}例题1:按键控制发光二极管D1D2两个发光二极管按下的次数D1D21灭灭2灭闪烁3闪烁灭4闪烁闪烁设置标志位。22:16定时计数器及工作方式222:165.1学习目标:会描述如何使用定时器进行定时和计数。会分析、设置单片机定时器方式寄存器TMOD和控制寄存器TCON,计算定时或计数初值并送入TH0和TL0,TH1和TL1。会编写定时器T0和T1的中断函数和延时函数。会完成开关型传感器与单片机接口电路的设计和编程。会进行定时器/计数器和中断系统、LED数码管显示的综合应用,进一步熟悉开发工具。5.3.1单片机定时器/计数器在单片机系统中,常常会有定时控制需求,也经常要对外部事件进行计数。定时,就是设定好一个时间。计数,就是计算某段时间内事件发生的次数。实现定时常用的三种方法:软件定时:占用CPU时间,效率低。用555电路:不可编程。可编程芯片:功能强,需要另外扩展。在AT89C51单片机内部集成有两个可编程的定时/计数器:T0和T1,它们既可以用于定时,也可以用于对外部脉冲进行计数。此外T1还常用作串行接口的波特率发生器。(1)定时/计数器概述8051单片机内部有两个16位的可编程定时/计数器,称为定时/计数器0(T0)和定时/计数器1(T1)8051定时/计数器由T0、T1、方式寄存器TMOD和控制寄存器TCON四部分组成8051定时器/计数器逻辑结构定时/计数器的工作过程:8051的定时/计数器实质上是加1计数器,根据计数的对象不同可以作为定时器,也可以作为计数器作为定时器是对机器周期进行计数作为计数器是对T0(P3.4)、T1(P3.5)引脚上输入的外部脉冲进行计数TH0TL000000000000000000x0000000000000000000010x0001100000000000000100x0002200000000000000110x0003300000001111111110x00ff25500000001000000000x010000000001000000010x010100000001000000100x010200000001000000110x010300000001111111110x0xff00000010000000000x020011111111111111110xffff6553500000000000000000x00000定时计数器是加法计数器,每来一个计数脉冲,加法器中的内容加1个单位,当由全1加到全0时计满溢出,因而,如果要计N个单位,则首先应向计数器置初值为X,且有:
在不同的计数方式下,最大计数值(满值)不一样,一般来说,当定时器/计数器工作于R位计数方式时,它的最大计数值(满值)为2R。初值X=最大计数值(满值)M-计数值N(2)定时/计数器的控制寄存器AT89C51单片机用于定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式TCON用于控制其启动和中断申请①定时器的方式寄存器TMODD7D6D5D4D3D2D1D0GATEC/TM1M0
GATEC/TM1M0定时器1(T1)定时器0(T0)TMOD
M1、M0:工作方式设置位各位的含义:M1M0工作方式功能00方式013位计数器01方式116位计数器10方式2两个8位计数器,初值自动装入11方式3两个8位计数器,仅适用T0C/T:定时或计数方式选择位0:运行只受TCON中运行控制位TR0/TR1的控制0:工作于定时方式,对片内机周脉冲计数,用作定时器。
1:工作于计数方式,对外部事件脉冲计数,用作计数器
GATE:门控位1:运行同时受TR0/TR1和外中断输入信号的双重控制。只有当/=1且TR0/TR1=1,T0/T1才能运行。练习:1.T1,方式1,定时TMOD=
2.T0,方式2,定时TMOD=
D7D6D5D4D3D2D1D0GATEC/TM1M0
GATEC/TM1M0定时器1(T1)定时器0(T0)TMOD②定时/计数器控制寄存器TCONTCOND7D6D5D4D3D2D1D0(88H)TF1TR1TF0TR0IE1IT1IE0IT0其中:TF1:T1的溢出标志位当定时/计数器T1计满时,由硬件使它置位TR1:定时/计数器T1的启动位GATE=0时,TR1=0时定时/计数器T1停止工作,TR1=1时定时/计数器T1开始工作。GATE=1时,在P3.3引脚(INT1)为高电平时,TR1=0时定时/计数器T1停止工作,TR1=1时定时/计数器T1开始工作。TF0:定时/计数器T0的溢出标志位当定时/计数器T0计满时,由硬件使它置位TR0:定时/计数器T0的启动位GATE=0时,TR0=0时定时/计数器T0停止工作,TR0=1时定时/计数器T0开始工作。GATE=1时,在P3.2引脚(INT0)为高电平时,TR0=0时定时/计数器T0停止工作,TR0=1时定时/计数器T0开始工作。(3)定时/计数器的工作方式工作方式控制寄存器TMOD中的M1和M0位用于选择4种工作方式M1M0工作方式功能说明00方式013位计数器01方式116位计数器10方式2初值自动重载8位计数器11方式3T0:分成两个8位计数器T1:停止计数①工作方式1TFxTHxTLx÷12振荡器&中断高8位低8位控制
≥Tx(P3.4/P3.5)TRxGATEINTx(P3.2/P3.3)C/T=0C/T=1定时功能计数功能方式1是16位定时/计数器,最大计数值为65536工作于计数模式,有:计数值N=65536-初值X工作于定时模式,定时时间T计算公式为定时时间T=(65536-初值X)*机器周期Tcy注意:方式1一次最大的定时时间晶振为12MHz时,一次最大定时时间为65.536ms晶振为6MHz时,一次最大定时时间为131.072ms方式1定时时间到时,需要软件重新装载计数初值X,才能实现设定的定时时间②工作方式2÷12振荡器≥
控制Tx(P3.4/P3.5)TRxGATEINTx(P3.2/P3.3)C/T=0C/T=1&定时功能计数功能THx
TFx中断TLx8位8位方式2是8位定时/计数器,最大计数值为256工作于计数模式,有:计数值N=256-初值X工作于定时模式,定时时间T计算公式为定时时间T=(256-初值X)*机器周期Tcy注意:方式2一次最大的定时时间晶振为12MHz时,一次最大定时时间为256us晶振为6MHz时,一次最大定时时间为512us方式2为初值自动重装方式,定时时间到时,不需要软件重新装载计数初值X(4)定时/计数器的应用定时/计数器是一个可编程的器件,其应用步骤为:①定时/计数器的初始化选择工作方式:通过对方式寄存器TMOD进行设置。给定时器赋初值。根据需要设置中断控制字的中断控制位。启动定时器。②编制定时/计数器溢出中断服务程序或溢出查询程序试用T1方式2编制程序,在P1.0引脚输出周期为400
S的脉冲方波,已知fosc=12MHZ。①设置TMOD:
0
010
0000B=20H
T0控制位,与T1无关T1方式2T1定时器GATE=0②计算定时初值输出周期为400
S的脉冲方波,可以每200
S把P1.0引脚上的电平翻转,所以定时的时间为200
S。200
S=(256-初值)×1
S初值=256-200TH1=256-200;TL1=256-200;22:16用定时计数器生成不同的波形8051定时器/计数器逻辑结构定时/计数器的工作过程:8051的定时/计数器实质上是加1计数器,根据计数的对象不同可以作为定时器,也可以作为计数器作为定时器是对机器周期进行计数作为计数器是对T0(P3.4)、T1(P3.5)引脚上输入的外部脉冲进行计数TH0TL000000000000000000x0000000000000000000010x0001100000000000000100x0002200000000000000110x0003300000001111111110x00ff25500000001000000000x010000000001000000010x010100000001000000100x010200000001000000110x010300000001111111110x0xff00000010000000000x020011111111111111110xffff6553500000000000000000x00000定时计数器是加法计数器,每来一个计数脉冲,加法器中的内容加1个单位,当由全1加到全0时计满溢出,因而,如果要计N个单位,则首先应向计数器置初值为X,且有:
在不同的计数方式下,最大计数值(满值)不一样,一般来说,当定时器/计数器工作于R位计数方式时,它的最大计数值(满值)为2R。初值X=最大计数值(满值)M-计数值N(2)定时/计数器的控制寄存器AT89C51单片机用于定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式TCON用于控制其启动和中断申请①定时器的方式寄存器TMODD7D6D5D4D3D2D1D0GATEC/TM1M0
GATEC/TM1M0定时器1(T1)定时器0(T0)TMOD
M1、M0:工作方式设置位各位的含义:M1M0工作方式功能00方式013位计数器01方式116位计数器10方式2两个8位计数器,初值自动装入11方式3两个8位计数器,仅适用T0C/T:定时或计数方式选择位0:运行只受TCON中运行控制位TR0/TR1的控制0:工作于定时方式,对片内机周脉冲计数,用作定时器。
1:工作于计数方式,对外部事件脉冲计数,用作计数器
GATE:门控位1:运行同时受TR0/TR1和外中断输入信号的双重控制。只有当/=1且TR0/TR1=1,T0/T1才能运行。练习:1.T1,方式1,定时TMOD=
2.T0,方式2,定时TMOD=
D7D6D5D4D3D2D1D0GATEC/TM1M0
GATEC/TM1M0定时器1(T1)定时器0(T0)TMOD②定时/计数器控制寄存器TCONTCOND7D6D5D4D3D2D1D0(88H)TF1TR1TF0TR0IE1IT1IE0IT0其中:TF1:T1的溢出标志位当定时/计数器T1计满时,由硬件使它置位TR1:定时/计数器T1的启动位GATE=0时,TR1=0时定时/计数器T1停止工作,TR1=1时定时/计数器T1开始工作。GATE=1时,在P3.3引脚(INT1)为高电平时,TR1=0时定时/计数器T1停止工作,TR1=1时定时/计数器T1开始工作。(3)定时/计数器的工作方式工作方式控制寄存器TMOD中的M1和M0位用于选择4种工作方式M1M0工作方式功能说明00方式013位计数器01方式116位计数器10方式2初值自动重载8位计数器11方式3T0:分成两个8位计数器T1:停止计数②工作方式2÷12振荡器≥
控制Tx(P3.4/P3.5)TRxGATEINTx(P3.2/P3.3)C/T=0C/T=1&定时功能计数功能THx
TFx中断TLx8位8位方式2是8位定时/计数器,最大计数值为256工作于计数模式,有:计数值N=256-初值X工作于定时模式,定时时间T计算公式为定时时间T=(256-初值X)*机器周期Tcy注意:方式2一次最大的定时时间晶振为12MHz时,一次最大定时时间为256us晶振为6MHz时,一次最大定时时间为512us方式2为初值自动重装方式,定时时间到时,不需要软件重新装载计数初值X(4)定时/计数器的应用定时/计数器是一个可编程的器件,其应用步骤为:①定时/计数器的初始化选择工作方式:通过对方式寄存器TMOD进行设置。给定时器赋初值。根据需要设置中断控制字的中断控制位。启动定时器。②编制定时/计数器溢出中断服务程序或溢出查询程序例5-1试用T1方式2编制程序,在P1.0引脚输出周期为400
S的脉冲方波,已知fosc=12MHZ。①设置TMOD:
0
010
0000B=20H
T0控制位,与T1无关T1方式2T1定时器GATE=0②计算定时初值输出周期为400
S的脉冲方波,可以每200
S把P1.0引脚上的电平翻转,所以定时的时间为200
S。200
S=(256-初值)×1
S初值=256-200TH1=256-200;TL1=256-200;#include<reg51.h>sbitP1_0=P1^0;voidmain(){ TMOD=0x20;//定时器T1工作于方式2 TH1=256-200;//送初值 TL1=256-200; EA=1;//设置总中断允许 ET1=1;//设置允许T1中断 TR1=1;//启动定时器T1 while(1);//等待T1中断}voidtime1_int(void)interrupt3//T1中断服务程序{P1_0=~P1_0;}1.生成高100us,低70us的波形100us70us100us70us100us70us2.生成更加复杂的波形低50us,高50us,低200us,高100us50us50us200us100us50us50us200us100us0100001122:16定时计数器22:165.1学习目标:会描述如何使用定时器进行定时和计数。会分析、设置单片机定时器方式寄存器TM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化工企业检修员检修维修安全操作规程
- 2026年眼科期末试题及答案
- 2026年体育与健康科目通识测试题及答案
- 纺织粉尘企业电工检修维修安全操作规程
- 生活垃圾分类收集转运设施设备项目技术方案
- 冲压及焊接件项目绩效评价
- 环保水性印花胶浆项目经济效益和社会效益分析报告
- 化工企业可燃液体储罐巡检维护管理手册
- 变电站二次保护装置定期检测制度
- 标准化厂房园区水土保持监测实施方案
- 第21课 敌后战场的抗战 教学设计
- HG/T 6270-2024 防雾涂料(正式版)
- 圆度、圆柱度测量仪检定规程
- DB32T4036-2021中小学食堂管理服务规范
- 机械制图标注规范课件
- 企业员工halal清真培训
- 冲刷深度计算
- 高中毕业生登记表填写样表(四川版)
- 2023陆上石油天然气开采安全重点检查事项清单
- CRRT治疗在ICU的应用进展
- JJG 1030-2007超声流量计
评论
0/150
提交评论