1、 微控制器系统设计与应用微控制器系统设计与应用 刘燎原刘燎原 江苏建筑职业技术学院江苏建筑职业技术学院回顾:回顾:u(一)动态显示(一)动态显示u1.什么是动态显示什么是动态显示u2.动态显示步骤动态显示步骤 1个数码管步骤:个数码管步骤:(1)送段值)送段值 (2)送位选(公共端)送位选(公共端)(3)延时)延时 (4)关闭)关闭 3.加驱动方法加驱动方法 三极管三极管 锁存器锁存器实验总结:实验总结:u 实验板数码管动态显示实验板数码管动态显示假设要求第一个数码管先显示百位(例如假设要求第一个数码管先显示百位(例如2),则:),则:1.送段值送段值:P0输出段值输出段值5BH,P2.6=1
2、(数据进入)(数据进入),P2.6=0(数据锁存)(数据锁存),段值送段值送入数码管的段值端;入数码管的段值端;2.送位选送位选:P0输出位选值输出位选值FEH,P2.7=1(数据进入)(数据进入),P2.7=0(数据锁存)(数据锁存),位位选值送入数码管的位选端;选值送入数码管的位选端;3.延时延时其他两个数码管类似这三个步骤。其他两个数码管类似这三个步骤。回顾:回顾:u(二)中断(二)中断u1.中断源中断源u 5个个u2.中断优先级中断优先级u 2个个 3.外部中断外部中断 P3.2,P3.3 4.外部中断寄存器外部中断寄存器 IE:EA,EX0,ET0,EX1,ET1,ES TCON:I
3、E0,IT0,IE1,IT1 IP:PX0,PT0,PX1,PT1,PS 中断程序如何编写?中断程序如何编写?uVoid main uu 中断初始化;中断初始化;u 一边做平时的工作,一边等待中断来;一边做平时的工作,一边等待中断来;uuVoid 名字(名字()interrupt 0/3uu 要求要求CPU做的事情;做的事情;u 项目四 倒计时倒计时 -单片机定时计数器上节课复习上节课复习u 举出生活中中断的例子。举出生活中中断的例子。u 中断过程包括哪几个步骤?中断过程包括哪几个步骤?中断请求、中断响应、中断处理、中断返回中断请求、中断响应、中断处理、中断返回u 单片机内有哪个中断源。单片机
4、内有哪个中断源。外部中断:外部中断:2 内部中断:内部中断:3 定时器定时器/计数器计数器导入:单片机应用系统中定时计数的需求:导入:单片机应用系统中定时计数的需求:u 如用单片机控制的打铃器、空调的定时开关、啤酒自动生产线上对如用单片机控制的打铃器、空调的定时开关、啤酒自动生产线上对酒瓶的计数装置等。酒瓶的计数装置等。以实现定时控制以实现定时控制;以实现对外界事件进行计数。以实现对外界事件进行计数。u 用到定时用到定时/计数计数u 实现定时实现定时/实现方式:实现方式:u 1.1.软件定时;(延时程序)占用软件定时;(延时程序)占用CPUCPUu 2.2.不可编程硬件定时(不可编程硬件定时(
5、555555););u 3.3.可编程定时可编程定时 (82538253,单片机定时,单片机定时/计数器)计数器)AT89S51AT89S51内部有两个定时内部有两个定时/计数器计数器 定时计数器到底是什么?定时计数器到底是什么?一、定时一、定时/计数器概述计数器概述u 1.核心核心 定时定时/计数器的核心部件是计数器的核心部件是16位二进制加位二进制加1计数器计数器(TH0、TL0或或TH1、TL1)。特性:特性:(1)每来一个计数脉冲信号,)每来一个计数脉冲信号,T0或或T1会在会在原来计数值原来计数值(或初值)的基(或初值)的基础上础上加加1.(2)直到直到计满计满,再来一脉冲,计数值清
6、,再来一脉冲,计数值清0 0,会发生,会发生溢出。溢出。向向CPUCPU发出中断请求,告诉发出中断请求,告诉CPUCPU这次计数结束。再开始这次计数结束。再开始下一轮下一轮计数。计数。这就像闹钟定时的时间一到,闹钟就会响一样这就像闹钟定时的时间一到,闹钟就会响一样。2.2.计数和定时有什么不同计数和定时有什么不同 类比生活中计数,定时(定时类比生活中计数,定时(定时1 1分钟)分钟)所以所以定时也是一种计数定时也是一种计数16位加位加1计数器计数器 00H 20H计数脉冲 21H FFH FFH计数脉冲 TF 1向向CPU发出中断请求发出中断请求3.3.单片机中的定时、计数器单片机中的定时、计
7、数器两个定时两个定时/计数器分别叫计数器分别叫T0,T1T0,T1计数脉冲从哪来?计数脉冲从哪来?当需要计数时,计数脉冲来自于外部脉冲源(当需要计数时,计数脉冲来自于外部脉冲源(P3.4,P3.5)P3.4,P3.5)当需要定时时,计数脉冲来自于系统机器周期当需要定时时,计数脉冲来自于系统机器周期(时钟振荡器经时钟振荡器经1212分频以后的脉冲信分频以后的脉冲信号号)。u(1)(1)计数器计数器l对外部信号对外部信号计数计数,外部计数脉冲从,外部计数脉冲从T0(P3.4)T0(P3.4)和和T1(P3.5)T1(P3.5)输入,开关接在下面,来输入,开关接在下面,来一个脉冲(下降沿),将加一个
8、脉冲(下降沿),将加1 1计数。计数。脉冲脉冲信号信号u(2 2).定时器定时器u 定时器也是一种计数器。定时器也是一种计数器。u 开关接在上面,计数脉冲信号是振荡器经过开关接在上面,计数脉冲信号是振荡器经过1212分频后信号。分频后信号。这是什么信号?这是什么信号?l振荡器(晶振)的振荡器(晶振)的1212分频信号。分频信号。l如果晶振为如果晶振为12MHZ,12MHZ,则计数脉冲信号则计数脉冲信号T=12T=12*1/12M =1uS 1/12M =1uS(机器周期)(机器周期)l即定时就是即定时就是每过一个机器周期每过一个机器周期(1uS1uS),计数器加,计数器加1 1,直至计满溢出,
9、直至计满溢出,定时结束。定时结束。l定时器的定时时间与定时器的定时时间与晶振频率晶振频率和和计数次数计数次数、初值初值等有关有关。等有关有关。l若计数器对此信号计数若计数器对此信号计数100100次,则定时时间次,则定时时间=100=100 1 1 s s100100 s s。脉冲脉冲信号信号单片机如何定义定时或计数功能?单片机如何定义定时或计数功能?单片机定时或计数的初值怎么设置?单片机定时或计数的初值怎么设置?编程设定编程设定-单片机定时中断相关的寄存器单片机定时中断相关的寄存器设置单片机处理定时中断的各种情况设置单片机处理定时中断的各种情况u 与定时计数有关的特殊功能寄存器与定时计数有关
10、的特殊功能寄存器,:定时器的高位,低位(,:定时器的高位,低位(存放计数值存放计数值),:定时器的高位,低位(,:定时器的高位,低位(存放计数值存放计数值):定时控制寄存器:定时控制寄存器:定时方式寄存器:定时方式寄存器二、定时计数器的相关寄存器二、定时计数器的相关寄存器(工作方式寄存器)(工作方式寄存器)定时器方式寄存器定时器方式寄存器TMODTMOD的作用是设置的作用是设置T0T0、T1T1的工作方式。的工作方式。TMODTMOD的格式:的格式:各位的功能说明:各位的功能说明:(1)(1)M1M1、M0M0位:工作方式选择位位:工作方式选择位 (1)(1)M1M1、M0M0位:工作方式选择
11、位位:工作方式选择位(2 2):计数):计数/定时功能选择位。定时功能选择位。=0=0,设置为,设置为定时器定时器方式,计数器的输入是内部时钟脉冲,其周方式,计数器的输入是内部时钟脉冲,其周期等于机器周期。实际上是对机器周期进行计数。从计数值可以求得期等于机器周期。实际上是对机器周期进行计数。从计数值可以求得计数的时间,所以称为定时器模式计数的时间,所以称为定时器模式 =1=1,设置为,设置为计数器计数器方式,计数器的输入来自方式,计数器的输入来自T0T0(P3.4P3.4)或)或T1T1(P3.5P3.5)端的外部脉冲,对外部输入引脚)端的外部脉冲,对外部输入引脚T0T0(P3.4P3.4)
12、或)或T1T1(P3.5P3.5)的)的外部脉冲(负跳变)计数,允许的最高计数频率为晶振频率的外部脉冲(负跳变)计数,允许的最高计数频率为晶振频率的1/241/24。T/CT/CT/CM1 M0 方式方式说说 明明0 0013 位定时器(TH的 8 位和TL的低 5 位)0 1116 位定时器/计数器 1 02自动重装入初值的 8 位计数器 1 13 T0 分成两个独立的 8 位计数器,T1 在方式 3 时停止工作(3)(3)GATEGATE:门控位:门控位。用于控制定时器的启动是否受外部中断源信号的影响。用于控制定时器的启动是否受外部中断源信号的影响。GATE=0GATE=0:定时的启动与外
13、部中断无关:定时的启动与外部中断无关,把把TCONTCON寄存器中的寄存器中的TR1(TR0)TR1(TR0)置置1 1即可启动即可启动定时器定时器1(1(定时器定时器0)0)。常用。常用。GATE=1GATE=1:由控制位:由控制位TR1(TR0)TR1(TR0)和引脚和引脚INT0(INT1)INT0(INT1)共同共同控制启动控制启动,只有在没只有在没有外部中断请求信号的情况下即外部中断引脚有外部中断请求信号的情况下即外部中断引脚 INT0(INT1)INT0(INT1)引脚引脚=1=1时时,把把TR1(TR0)TR1(TR0)置置1 1才能定时器启动。用于检测低电平时间。才能定时器启动
14、。用于检测低电平时间。例如:要设定例如:要设定T0T0工作在定时方式工作在定时方式2.2.TMOD=0X02;TMOD=0X02;不能位寻址不能位寻址00000010u 定时器定时器/计数器控制寄存器计数器控制寄存器TCONTCONu u TF0TF0、TF1TF1分别是定时器分别是定时器/计数器计数器T0T0、T1 T1 的溢出标志位的溢出标志位,加法计数器计满溢出时硬件加法计数器计满溢出时硬件自动自动置置1,1,申请中断。申请中断。u 对该标志位有两种处理方法:对该标志位有两种处理方法:一种是以中断方式工作,即一种是以中断方式工作,即TF1TF1置置1 1并申请中断,响应中断后,执行中断服
15、务程序,并申请中断,响应中断后,执行中断服务程序,并由硬件自动使并由硬件自动使TF1TF1清清0 0;另一种以查询方式工作,即通过查询该位是否为另一种以查询方式工作,即通过查询该位是否为1 1来判断是否溢出,来判断是否溢出,TF1TF1置置1 1后必须后必须用软件使用软件使TF1TF1清清0 0。u TR1TR1、TR0TR0 分别是定时器分别是定时器 /计数器计数器T1T1、T0 T0 的的定时器定时器1 1启停控制位启停控制位。GATE=0GATE=0时,用软件使时,用软件使TR1TR1置置1 1即启动定时器即启动定时器1 1,若用软件使,若用软件使TR1TR1清清0 0则停止定时器则停止
16、定时器1 1。GATE=1GATE=1时,用软件使时,用软件使TR1TR1置置1 1的同时外部中断的同时外部中断INT1INT1的引脚输入高电平才能启动定的引脚输入高电平才能启动定时器时器1 1。所以初始化时,只涉及到所以初始化时,只涉及到TR0/1TR0/1 例:启动例:启动TR0.TR0.u TCONTCON属于特殊功能寄存器,地址能被属于特殊功能寄存器,地址能被8 8整除,所以可位操作整除,所以可位操作.这里用位操作方便。这里用位操作方便。u TR0=1;TR0=1;TF1TF1TR1TR1TF0TF0TR0TR0IE1IE1IT1IT1IE0IE0IT0IT0u 寄存器总结:寄存器总结
17、:3个特殊功能寄存器个特殊功能寄存器 IE TMOD TCON导入:例如要求单片机检测计数导入:例如要求单片机检测计数200个脉冲信号?个脉冲信号?u 定时器计数器用于定时或计数时,必须按照需要给计数器设置初定时器计数器用于定时或计数时,必须按照需要给计数器设置初值。定时器计数器在计数初值的基础上以加值。定时器计数器在计数初值的基础上以加1的方式进行计数,的方式进行计数,在计数器从全在计数器从全1变为全变为全0时,将自动产生溢出中断请求,表示此次定时,将自动产生溢出中断请求,表示此次定时、计数结束。时、计数结束。计数初值怎么设置?计数初值怎么设置?定时、计数器有四种工作方式,实际使用中应用选择
18、哪种?定时、计数器有四种工作方式,实际使用中应用选择哪种?u 三、定时三、定时/计数器的计数容量及初值计数器的计数容量及初值u 1 1最大计数容量最大计数容量(次数)(次数)u 最大计数容量与计数器的二进制位数有关,关系为最大计数容量与计数器的二进制位数有关,关系为2 2N Nu 举例,若为举例,若为2 2位计数器,位计数器,0000,0101,1010,1111,最大计数值为,最大计数值为2 2N N=4=4u 2.2.计数初值计数初值u 计数不一定是从计数不一定是从0 0开始,这要根据需要来设定。这个预先设定的开始,这要根据需要来设定。这个预先设定的计数起点值计数起点值称为称为计数初值。计
19、数初值。u u FFFFHFFFFHu 最大计数容量最大计数容量u 初值初值u u 0000H0000Hu 计数值计数值+初值初值=最大计数容量最大计数容量u 举例,一个杯子的总容量为最大计数容量,已经装了少量的水为初值,还能装举例,一个杯子的总容量为最大计数容量,已经装了少量的水为初值,还能装多少水位计数值多少水位计数值u 四定时四定时/计数器的工作方式计数器的工作方式 MCS-51单片机的单片机的T/C有有4种种工作方式工作方式,分别由分别由TMOD寄存器中的寄存器中的M1、M0两位的二进制编两位的二进制编码所决定。码所决定。u 1.方式方式0 13位计数器位计数器 在方式在方式0 0下,
20、下,T0T0和和T1T1工作在工作在1313位的定时位的定时/计数器方式,由计数器方式,由THTH的高的高 8 8 位和位和TLTL的低的低 5 5 位位组成。组成。u u 当当T1T1的低五位的低五位TL1TL1计满时向它的高八位计满时向它的高八位TH1TH1进位,当进位,当T1T1的的1313位计数器加到全部为位计数器加到全部为 1 1 以以后,再加后,再加1 1就产生溢出,这时置就产生溢出,这时置TCONTCON的的TF1TF1为为 1 1,同时把计数器全部变,同时把计数器全部变 0 0。然后从。然后从 0 0 开始继续计数。开始继续计数。u 计数值范围:计数值范围:0 01111111
21、111111(8191)u 最大计数容量最大计数容量213=8192u 如计数值为如计数值为N,则置入的初值,则置入的初值X为:为:u X+N=8192u 例如:若定时例如:若定时/计数器计数器T0的计数值为的计数值为1000,则初值为,则初值为7192,把初值转换成二进制数为把初值转换成二进制数为1110000011000B,则则TH0=11100000B,TL0=00011000B。脉冲脉冲信号信号u 2.方式方式1 16位计数器位计数器 在方式在方式1 1下,下,T0T0和和T1T1工作在工作在1616位的定时位的定时/计数器方式,由计数器方式,由THTH的的高高 8 8 位和位和TLT
22、L的低的低 8 8 位位组成。组成。u u 当当T1T1的低的低8 8位位TL1TL1计满时向它的高八位计满时向它的高八位TH1TH1进位,当进位,当T1T1的的1616位计数器加到位计数器加到全部为全部为 1 1 以后,再加以后,再加1 1就产生溢出,这时置就产生溢出,这时置TCONTCON的的TF1TF1为为 1 1,同时把计,同时把计数器全部变数器全部变 0 0。然后从。然后从 0 0 开始继续计数。开始继续计数。u 最大计数次数最大计数次数2 21616=65536=65536u 如计数值为如计数值为N N,则置入的初值,则置入的初值X X为:为:u X+N=65536X+N=6553
23、6u 如定时如定时/计数器计数器T0T0的计数值为的计数值为10001000,则初值为,则初值为65536-1000=6453665536-1000=64536,u 把初值转换成二进制数为把初值转换成二进制数为11111100111111000001100000011000B B,u 则则TH0=TH0=1111110011111100B B,TL0=TL0=0001100000011000B B。脉冲脉冲信号信号u 3 3方式方式2 2 8 8位自动重装初值计数器位自动重装初值计数器 在方式在方式2 2下,下,TL0TL0用作用作8 8位计数器,位计数器,TH0TH0用作初值寄存器。用作初值
24、寄存器。u 当当T1T1的的8 8位计数器加到全部为位计数器加到全部为 1 1 以后,再加以后,再加1 1就产生溢出,这时置就产生溢出,这时置TCONTCON的的TF1TF1为为 1 1;同时,;同时,TH1TH1中的初值装入中的初值装入TL1TL1TL1TL1又从初值开始计数。又从初值开始计数。u 最大计数次数最大计数次数2 28 8=256=256u 如计数值为如计数值为N N,则置入的初值,则置入的初值X X为:为:u X+N=256X+N=256u 如定时如定时/计数器计数器T0T0的计数值为的计数值为100100,则初值为,则初值为256-100=156256-100=156,u 把
25、初值转换成二进制数为把初值转换成二进制数为10011100B10011100B,u 则则TH0=TL0=10011100BTH0=TL0=10011100B。脉冲脉冲信号信号特别适合于产生比较精确的连特别适合于产生比较精确的连续脉冲信号。续脉冲信号。u 4 4方式方式3 3 2 2个独立的个独立的8 8位计数器位计数器 方式方式3 3只适用于定时器只适用于定时器T0T0,TL0TL0既能作定时器也能作计数器使用,而既能作定时器也能作计数器使用,而TH0TH0只能作定只能作定时器使用而不能作计数器使用。时器使用而不能作计数器使用。u比较比较:(方式0,1,2)1.31.3种方式的最大区别是种方式
26、的最大区别是计数位数不同计数位数不同(1313,1616,8 8),所以最大计),所以最大计数值或定时时间也不同。数值或定时时间也不同。2.2.工作方式工作方式0 0和工作方式和工作方式1 1的特点就是计数溢出后,计数器变为全的特点就是计数溢出后,计数器变为全0 0,因而循环定时或循环计数应用时就存在反复设置初值。因而循环定时或循环计数应用时就存在反复设置初值。工作方式工作方式2 2具有自动重装载功能,即自动加载计数初值具有自动重装载功能,即自动加载计数初值。u 以方式以方式1为例,为例,16位,最大计数容量位,最大计数容量65536如果采用如果采用12的晶振,对应的脉冲周期是微秒,计满的晶振
27、,对应的脉冲周期是微秒,计满65536个脉冲所对应的时间就是个脉冲所对应的时间就是65.536ms。计数,只要用预置数的方法先在计数容器内存入一个初值计数,只要用预置数的方法先在计数容器内存入一个初值,如我们如我们要计要计100次,那就存入次,那就存入65436初值,只要再来初值,只要再来100个脉冲,就刚个脉冲,就刚好会溢出,引发中断。好会溢出,引发中断。那么,定时初值计算?那么,定时初值计算?u 五五.定时定时/计数初值计算计数初值计算u 由由 计数值计数值+计数初值计数初值=最大计数容量最大计数容量,得到:,得到:u(计数值(计数值+计数初值)计数初值)机器周期机器周期=最大计数容量最大
28、计数容量机器周期机器周期u 计数次数计数次数机器周期机器周期+计数初值计数初值机器周期机器周期=最大计数容量最大计数容量机器周期机器周期u 定时时间定时时间+计数初值计数初值机器周期机器周期=最大计数容量最大计数容量机器周期机器周期u 即即 定时时间定时时间=(最大计数容量(最大计数容量-初值)初值)机器周期机器周期u 所以,定时初值所以,定时初值=最大计数容量最大计数容量-定时时间定时时间/机器周期机器周期u =2 2N N-定时时间定时时间/机器周期机器周期不同工作方式的定时初值或计数初值的计算方法如下表所示:不同工作方式的定时初值或计数初值的计算方法如下表所示:工作方式工作方式计数位数计
29、数位数 最大计数容量最大计数容量最大定时时最大定时时间间定时初值计算公定时初值计算公式式计数初值计算公式计数初值计算公式方式方式013213=8192213 T机机X=213-T/T机机X=213-计数值计数值方式方式116216=65536216 T机机X=216-T/T机机X=216-计数值计数值方式方式2828=25628 T机机X=28-T/T机机X=28-计数值计数值u 举例:定时举例:定时1 1秒,晶振秒,晶振12MHZ12MHZ,方式,方式1 1,初值为多少?,初值为多少?u 如何产生如何产生1 1秒定时信号秒定时信号?u 晶振晶振12MHZ12MHZ,机器周期,机器周期1us1
30、usu 4 4种工作方式中,最大计数容量是方式种工作方式中,最大计数容量是方式1 1,6553665536u 则则65536us=65.536ms65536us=65.536msu 所以定所以定1 1次不够次不够u 那就定多次,累计在一起,构成那就定多次,累计在一起,构成1 1秒秒u 那选择那选择T0T0,工作在方式,工作在方式0 0,一次定时,一次定时50ms50ms,循环,循环2020次次u 初值多少?初值多少?u TH0=0 x3c;u TL0=0 xb0;所以,在用到定时中断之前,要先用指令来设置相关寄存器的初始值,来设所以,在用到定时中断之前,要先用指令来设置相关寄存器的初始值,来设
31、定定时中断的条件定定时中断的条件-定时中断的初始化。定时中断的初始化。u 五、定时程序的编写五、定时程序的编写u 1 1、程序结构、程序结构 几个程序?几个程序?回忆中断定义回忆中断定义 两个程序:主程序、定时中断服务子程序两个程序:主程序、定时中断服务子程序 void main()void main()void void 名字()名字()interrupt interrupt 中断号中断号 注意:名字,自己随意取;中断号,注意:名字,自己随意取;中断号,0-40-4 定时中断,中断号是定时中断,中断号是1 1或或3 3 2 2、这两个程序分别做什么、这两个程序分别做什么 结合一个例子看一下结
32、合一个例子看一下 u例例1 1:发光二极管每隔:发光二极管每隔1 1秒闪烁秒闪烁1 1次。要求用中断方法设计实现次。要求用中断方法设计实现1s1s的闪烁的闪烁u解:程序的结构解:程序的结构(中断方式,查询方式)中断方式,查询方式)u如何产生如何产生1 1秒定时信号秒定时信号?T0 T0一次定时一次定时50ms50ms,循环,循环2020次次 确定工作方式,计算初值确定工作方式,计算初值u 用到定时中断,需要定时中断初始化,设置寄存器的值用到定时中断,需要定时中断初始化,设置寄存器的值 -放在主程序放在主程序u 平时做的事情,等待平时做的事情,等待1 1次次50ms50ms定时结束;定时结束;-
33、放在主程序放在主程序u 定时时间到,有中断请求时,灯闪烁,返回平时状态。定时时间到,有中断请求时,灯闪烁,返回平时状态。-放在定时中断服务程序放在定时中断服务程序void main()void main()定时中断初始化定时中断初始化等待等待1 1次次50ms50ms定时结束定时结束 void void 名字()名字()interrupt interrupt 中断号中断号 重新赋初值重新赋初值 灯闪烁灯闪烁 XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P
34、0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C5112345678161514131211109D1LED-GREENX1CRYSTALC130pC230pR910kC31uFu#include u s
35、bit led=P10;u unsigned char m=0;u void main()u u P1=0 xff;u EA=1;中断初始化中断初始化u ET0=1;u TMOD=0 x01;u TH0=0 x3c;u TL0=0 xb0;u TR0=1;u while(1);等待中断(一次等待中断(一次50ms50ms)来)来u u void lsd()interrupt 1u u TH0=0 x3c;重新赋初值重新赋初值u TL0=0 xb0;u if(+m19)判断是否判断是否1S1S到到u led=led;u m=0;u u 看仿真看仿真总结:总结:这两个程序分别做什么这两个程序分别做
36、什么u 1 1、主程序、主程序(1 1)在产生定时中断请求前,即主程序中完成定时中断初始化(设置)在产生定时中断请求前,即主程序中完成定时中断初始化(设置3 3个寄存器)个寄存器)a.a.确定定时器确定定时器/计数器的计数器的工作方式工作方式,确定方式控制字,并写入,确定方式控制字,并写入TMODTMOD。b.b.预置定时初值或计数预置定时初值或计数初值初值,根据定时时间或计数次数,计算定时初,根据定时时间或计数次数,计算定时初值或计数初值,并写入值或计数初值,并写入TH0TH0、TL0TL0或或TH1TH1、TL1TL1。c.c.根据需要根据需要开放开放定时器定时器/计数器的计数器的中断中断
37、,给,给IEIE中的相关位赋值。中的相关位赋值。d.d.启动启动定时器定时器/计数器,给计数器,给TCONTCON中的中的TR1TR1或或TR0TR0置置1 1。(2 2)CPUCPU平时做的事情平时做的事情u 2 2、定时中断服务程序、定时中断服务程序 定时时间到时要做的事情定时时间到时要做的事情u 例例2 2:设晶振频率设晶振频率f fOSCOSC=12MHz=12MHz,使用定时器,使用定时器1 1以方式以方式1 1产生周期为产生周期为400s400s的方的方波脉冲,并由波脉冲,并由P1.0P1.0 输出。试以中断方式实现。输出。试以中断方式实现。要产生要产生400s400s 的方波脉冲
38、,只需在的方波脉冲,只需在P1.0P1.0端以端以200s200s为间隔,为间隔,交替交替输出输出高低电高低电平平即可实现。即可实现。为此,定时间应为为此,定时间应为200s200s,定时时间一到,对,定时时间一到,对P1.0 P1.0 端做取反操作即可。端做取反操作即可。主程序:定时中断初始化主程序:定时中断初始化定时中断服务子程序:定时中断服务子程序:P1.0 P1.0 端做取反,初值重新赋值端做取反,初值重新赋值u 初值计算:初值计算:初值初值=216-T/T机机=65536-200u 难点:难点:把初值的十进制转化为把初值的十进制转化为4位十六进制,高位十六进制,高8位放在位放在TH0
39、,低低8位放在位放在TL0u 简单表达式写法:简单表达式写法:TH0=(65536-200)/256;TL0=(65536-200)%256;#include u sbit led=P10;u void main()u u P1=0 xff;u EA=1;u ET0=1;u TMOD=0 x01;T1T1为方式为方式1 1u TH0=(65536-200)/256;初值初值u TL0=(65536-200)%256;u TR0=1;启动定时启动定时u while(1);等待中断等待中断u u void lsd()interrupt 1u u TH0=(65536-200)/256;重新设置初值
40、重新设置初值u TL0=(65536-200)%256;u led=led;输出取反输出取反u u 例例3 3:流水灯,每隔:流水灯,每隔1 1秒循环左移点亮。秒循环左移点亮。用定时中断来实现。用定时中断来实现。学生讨论,确定编程方案。学生讨论,确定编程方案。主程序做什么?主程序做什么?定时中断服务程序做什么?定时中断服务程序做什么?XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.3
41、4P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C5112345678161514131211109D1LED-GREEND2LED-GREEND3LED-GREEND4LED-GREEND5LED-GREEND6LED-GREEND7LED-GREENX1CRYSTALC130p
42、C230pR910kC31uFD8LED-GREENu#include u#include u sbit led=P10;u unsigned char m=0,n;u void main()u P1=0 xfe;u n=0 xfe;u EA=1;u ET0=1;u TMOD=0 x01;u TH0=0 x3c;u TL0=0 xb0;u TR0=1;u while(1);u u void lsd()interrupt 1u TH0=0 x3c;u TL0=0 xb0;u if(+m19)u n=_crol_(n,1);u P1=n;u m=0;u u 例:设计出能够显示时间的电子钟,六位数码
43、管显示。例:设计出能够显示时间的电子钟,六位数码管显示。电子钟两个关键:电子钟两个关键:显示方式?显示方式?-数码管显示数码管显示-动态显示动态显示 (我们在前面讲过的显示按键次数的例子)(我们在前面讲过的显示按键次数的例子)秒脉冲如何产生?秒脉冲如何产生?-单片机的单片机的T0来定时来定时1S(前面的例子)(前面的例子)我们需要对秒脉冲计数,记满我们需要对秒脉冲计数,记满60个,为个,为1分钟;再需要对分钟信号计数,记分钟;再需要对分钟信号计数,记满满60个,为个,为1小时。小时。主程序:主程序:定时中断初始化定时中断初始化 显示小时、分钟、秒显示小时、分钟、秒中断服务子程序:中断服务子程序
44、:重新赋初值重新赋初值 判断判断1秒到了吗?秒到了吗?判断判断1分钟到了吗?分钟到了吗?判断判断1小时到了吗?小时到了吗?s1s2s3s4s5s6S1S2S3S4S5S6XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3
45、.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC130pC230pR910kC31uFA02B018A13B117A24B216A35B315A46B414A57B513A68B612A79B711CE19AB/BA1U274LS245u#include u unsigned char code sz1=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x9
46、0,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e;/数码管段值数组数码管段值数组u unsigned char sdat=0,0,0,0,0,0;/存放小时、分钟、秒的十位、个位的数组存放小时、分钟、秒的十位、个位的数组 unsigned char wx=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20;/6个数码管位选信号数组个数码管位选信号数组 unsigned char m=0,sec=0,min=0,hou=0;/存放小时、分钟、秒个数的变量存放小时、分钟、秒个数的变量u void delay(unsigned int a)unsigne
47、d char i;while(a-)for(i=0;i120;i+);u void disp()u unsigned char i;u sdat0=hou/10;/小时十位小时十位u sdat1=hou%10;/小时个位小时个位u sdat2=min/10;u sdat3=min%10;u sdat4=sec/10;u sdat5=sec%10;u for(i=0;i6;i+)u P2=sz1sdati;动态显示动态显示4步步/送段值送段值u P1=wxi;/相应的位选有效相应的位选有效u delay(10);/延时延时u P1=0 x00;/关闭关闭u u void main()u P1=0
48、 x00;/关闭显示关闭显示u EA=1;/定时中断初始化定时中断初始化u ET0=1;u TMOD=0 x01;u TH0=0 x3c;u TL0=0 xb0;u TR0=1;u while(1)u disp();/一边显示,一边等待中断(一次一边显示,一边等待中断(一次50ms)来)来u u void lsd()interrupt 1u u TH0=0 x3c;/重新赋初值重新赋初值u TL0=0 xb0;u m+;u if(m=20)/判断是否判断是否1S到到u sec+;m=0;u if(sec=60)/判断是否判断是否1分钟到分钟到u min+;sec=0;u if(min=60)/
49、判断是否判断是否1小时到小时到u hou+;min=0;u if(hou=24)/判断是否判断是否1天到天到u hou=0;u u u u u u学生分组讨论以下问题,:学生分组讨论以下问题,:(1 1)如何设计)如何设计1S1S程序程序(2 2)把书上的静态改为动态,如何修改电路、程序)把书上的静态改为动态,如何修改电路、程序u教师提出问题:教师提出问题:那么我们倒计时的硬件电路如何构建?构建好后,如何编那么我们倒计时的硬件电路如何构建?构建好后,如何编写程序呢?写程序呢?u总结总结u布置作业布置作业 1 1书上习题书上习题 2 2书上的静态改为动态书上的静态改为动态u实验:设计实验:设计6
50、0秒的倒计时,两位数码管显示。倒计到秒的倒计时,两位数码管显示。倒计到0时,喇叭报警。(基于开发板)时,喇叭报警。(基于开发板)项目四 倒计时倒计时 键盘的设计与实现 -认识键盘 u知识目标:知识目标:1.掌握键盘的扫描法掌握键盘的扫描法2.掌握掌握LCD的引脚的引脚u技能目标:技能目标:1.掌握按键的检测掌握按键的检测2.掌握键盘的连接方法掌握键盘的连接方法3.掌握掌握LCD与单片机的接口与单片机的接口 u 一、基础知识一、基础知识 键盘是单片机应用系统中人机交流不可缺少的输入设备。键盘是单片机应用系统中人机交流不可缺少的输入设备。u 键盘由一组规则排列的按键组成,一个按键实际上是一个开关元