《单片机学习之项目1流水灯2定时器》由会员分享,可在线阅读,更多相关《单片机学习之项目1流水灯2定时器(39页珍藏版)》请在金锄头文库上搜索。
1、LOGO任务三任务三任务三任务三 利用硬件利用硬件利用硬件利用硬件定时实现流水灯定时实现流水灯定时实现流水灯定时实现流水灯1常用延时方法常用延时方法非精确延时非精确延时For(i=0;i100;i+);i=0;while(i-);精确延时精确延时利用库函数利用库函数_nop_ ( ) ; /延时一个机器周期延时一个机器周期(需要需要include)利用利用定时器定时器进行定时进行定时2定时定时/计数器计数器(Timer/Counter,简称简称T/C) 80C51有有2个个16位定时位定时/计数器:计数器:T0、T1 80C52有有3个个16位定时位定时/计数器:计数器:T0、T1、T23定时
2、定时/计数器计数器(Timer/Counter,简称简称T/C)定时器:定时器:来一个机器脉冲计数器的值加来一个机器脉冲计数器的值加1。当计数器值溢出。当计数器值溢出(全全1)时回时回0,定时时间,定时时间到,中断标志到,中断标志TF置置1.1个机器周期个机器周期=12*1/振荡频率振荡频率计数器:计数器:在机器周期内采样在机器周期内采样T0(或(或T1)脉冲的下降沿,来一个下降沿计数器的脉冲的下降沿,来一个下降沿计数器的值加值加1。当计数器值溢出。当计数器值溢出(全全1)时回时回0,中,中断标志断标志TF置置1.4LOGO1 1。定。定时器知器知识(1 1)定)定时器器/ /计数器的内部数器
3、的内部结构及工作原理构及工作原理 单片机内部片机内部设有有2 2个个1616位的可位的可编程的定程的定时器器/ /计数器。数器。简称称为定定时器器0 0(T0T0)、定)、定时器器1 1(T1T1)。可)。可编程是指其功程是指其功能(如工作模式、定能(如工作模式、定时时间等)均可通等)均可通过指令来确定或指令来确定或改改变。 5LOGO单片机定片机定时器器/计数器数器结构构图6LOGO定定时器的工作原理:器的工作原理: 定定时器器/ /计数器是一个加数器是一个加“1”1”计数器,来一个脉冲即数器,来一个脉冲即进行加行加1 1计数,直至数,直至计数器的各位全数器的各位全为“1”1”,再来一个脉,
4、再来一个脉冲,冲,计数器回数器回0 0(即溢出),且使(即溢出),且使TF0TF0(定(定时器器0 0)或)或TF1TF1(定(定时器器1 1)置)置1 1,表示,表示时间到,到,计数数值乘以脉冲周期就是乘以脉冲周期就是定定时时间。 输入的脉冲来源有入的脉冲来源有2 2个:一个是个:一个是单片机晶体振片机晶体振荡器器经1212分分频;另一个是;另一个是T0/T1T0/T1端的外部端的外部输入脉冲。作定入脉冲。作定时器用器用时,应采用晶体振采用晶体振荡器器经1212分分频的脉冲。的脉冲。 7定时器功能定时器功能两个寄存器:两个寄存器:TMOD和和TCON4个计数寄存器:个计数寄存器:TH0,TL
5、0;TH1,TL1方式方式1: 定时时间定时时间=(65536-初值)初值)*12/振荡频率振荡频率 初值初值=65536-定时时间定时时间*振荡频率振荡频率/12例如定时例如定时1ms:初值初值=65536-1s*12*103Hz/12 =65536-1000 =64536 =0xFC188TMOD寄存器寄存器GATE C/T M1M0 GATE C/T M1M0控制控制T1控制控制T0M1M0:00:方式:方式001:方式:方式110:方式:方式211:方式:方式3C/T0:定时器:定时器1:计数器:计数器GATE:0:软件控制:软件控制定时器工作定时器工作1:外部中断:外部中断控制定时器
6、控制定时器工作工作不可位寻址不可位寻址9LOGOGATEGATE:门控位,控制控位,控制计数器的启数器的启动/ /停止操作方式。停止操作方式。当当GATE=0GATE=0时,外部中断信号不参与控制,外部中断信号不参与控制,计数器只有数器只有TR0TR0和和TR1TR1位位软件控制启件控制启动和停止。和停止。TR1TR1、TR0TR0为1 1时,计数器数器启启动开始工作;开始工作;为0 0时,计数器停止工作。数器停止工作。当当GATE=1GATE=1时,计数器的启数器的启动要由外部中断信号和要由外部中断信号和TR0TR0、和、和TR1TR1共同控制。只有当外部中断引脚共同控制。只有当外部中断引脚
7、为高高电平,平,TR0/TR1TR0/TR1置置1 1时才能启才能启动计数器工作。数器工作。10LOGO :功能:功能选择位。当位。当=0=0时选择定定时功能,功能,计数脉冲由数脉冲由内部提供,内部提供,计数周期等于机器周期。当数周期等于机器周期。当=1=1时选择为计数数功能,功能,计数脉冲数脉冲为外部引脚外部引脚T0T0、T1T1引入的外部脉冲信号。引入的外部脉冲信号。 11LOGOM1M1和和M0M0:T0T0和和T1T1工作方式控制位。定工作方式控制位。定时/ /计数器的工作方数器的工作方式有式有M1M0M1M0两位状两位状态决定,决定,这两位有四种两位有四种编码方式,方式,对应于四种工
8、作方式。四种方式定于四种工作方式。四种方式定义如表所示:如表所示:M1M0方式说明00方式0TL的低5位和TH的8位构成13位计数器01方式1TL的8位和TH的8位构成16位的计数器10方式2具有自动重装功能的8位计数器11方式3T0分成两个独立的计数器,T1可工作在方式0方式212TCONTF1 TR1 TF0 TR0IE1IP1 IE0 IP0可位寻址,可位寻址,也可字节寻址也可字节寻址13M1M000:方式:方式0,13位计数寄存器位计数寄存器01:方式:方式1 ,16位计数寄存器,用于定时位计数寄存器,用于定时和计数和计数10:方式:方式2 ,自动重装载,自动重装载8位计数寄存器,位计
9、数寄存器,用于波特率发生器用于波特率发生器11:方式:方式3,2个个8位计数寄存器位计数寄存器14定时器使用步骤定时器使用步骤1.设置设置TMOD,使之工作在需求状态;,使之工作在需求状态;TMOD=0x01; 或或TMOD=0x10;2.设置计数寄存器初值,精确设定好定时时间;设置计数寄存器初值,精确设定好定时时间;TH0=0xff; TL0=0x00; 或或TH1=0xff; TL1=0x00;3.设置设置TCON,打开,打开TR使定时器工作;使定时器工作;TR0=1; 或或TR1=1;4.检测定时器溢出检测定时器溢出(TF=1),溢出时:复位,溢出时:复位TF,计数寄存器赋初值,定时到触
10、发的动作。计数寄存器赋初值,定时到触发的动作。 if(1=TF0) TH0=0xff; TL0=0x00; TF0=0; P1_0=P1_0; 或或if(1=TF1) TH1=0xfc; TL1=0x18; TF1=0; P1_0=P1_0; 15定时定时1ms 初值初值=65536-1000=0xFC18#includesbit P1_0=P10;void main()TMOD=0x01; TH0=0xfc; TL0=0x18; TR0=1; /此位可位操作此位可位操作 while(1) if(1=TF0) TH0=0xfc; TL0=0x18; TF0=0; /此位可位操作此位可位操作 P
11、1_0=P1_0; /此位可位操作此位可位操作 16定时时间定时时间=(65536-初值)初值)*12/振荡频率振荡频率65536s#includesbit P1_0=P10;void main()TMOD=0x01; TH0=0; TL0=0; TR0=1; /此位可位操作此位可位操作 while(1) if(1=TF0) /TH0=0; TL0=0; TF0=0; /此位可位操作此位可位操作 P1_0=P1_0; /此位可位操作此位可位操作 17定时定时1s#includesbit P1_0=P10;void main() unsigned int counter; TMOD=0x01;
12、TH0=0xb1; TL0=0xe0; TR0=1; /此位可位操作此位可位操作 while(1) if(1=TF0) TH0=0xb1; TL0=0xe0; TF0=0; counter+; if(50=counter) counter=0; P1_0=P1_0; =50*20ms 20ms 初值初值=45536=0xB1E01819复习复习定时器定时功能的使用定时器定时功能的使用TMOD:选择:选择T0还是还是T1TCON:选择方式:选择方式1设置初值放置于设置初值放置于TH0,TL0或或TH1,TL1中中方式方式1: 定时时间定时时间=(65536-初值)初值)*机器周期机器周期 初值初
13、值=65536-定时时间定时时间/机器周期机器周期20时间间隔时间间隔0.5s=10*50ms的流水灯;的流水灯;#includevoid main() unsigned int i,j,value,dec; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) value=254; dec=1; for(i=0;i8;i+) P1=value; for(j=0;j10;j+) /10次次*50ms/次次 while(TF0!=1); TH0=0x3c; TL0=0xb0; TF0=0; value=value-dec; de
14、c=dec*2; 50ms 初值初值=15536=0x3CB0书上程序书上程序21操作练习操作练习1请用定时器请用定时器0实现:实现:时间间隔时间间隔50ms的流水灯;的流水灯;时间间隔时间间隔1s的流水灯;的流水灯;22操作练习操作练习2请用硬件定时器实现:请用硬件定时器实现:任选三个任选三个LED灯灯,分别作为红、黄、绿交通分别作为红、黄、绿交通灯灯,实现实现绿绿灯亮灯亮1s,然后,然后黄黄灯快闪灯快闪3次,再次,再红红灯灯亮亮2s,黄黄灯快闪灯快闪3次,次,绿绿灯亮灯亮1s,23#includevoid main() unsigned int i,value,dec; TMOD=0x01
15、; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) value=254; dec=1; for(i=0;i8;i+) while(TF0!=1); TH0=0x3c; TL0=0xb0; TF0=0; P1=value; value=value-dec; dec=dec*2; 时间间隔时间间隔50ms的流水灯;的流水灯;50ms 初值初值=15536=0x3CB0书上方法书上方法24时间间隔时间间隔1s=20*50ms的流水灯;的流水灯;#includevoid main() unsigned int i,j,value,dec; TMOD=
16、0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) value=254; dec=1; for(i=0;i8;i+) for(j=0;j20;j+) /20次次*50ms/次次 while(TF0!=1); TH0=0x3c; TL0=0xb0; TF0=0; P1=value; value=value-dec; dec=dec*2; 50ms 初值初值=15536=0x3CB0书上方法书上方法25时间间隔时间间隔1s的双向流水灯;的双向流水灯;#includevoid main() unsigned char i,j,value,d
17、ec; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) value=254; dec=1; for(i=0;i14;i+) for(j=0;j20;j+) /20次次*50ms/次次 while(TF0!=1); TH0=0x3c; TL0=0xb0; TF0=0; P1=value; if(i7) value=value-dec; dec=dec*2; else dec=dec/2; value=value+dec; 书上方法书上方法26#includevoid main() unsigned int i,value;
18、 TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) value=0x01; for(i=0;i8;i+) while(TF0!=1); TH0=0x3c; TL0=0xb0; TF0=0; P1=value; value=value1; 时间间隔时间间隔50ms的流水灯;的流水灯;50ms 初值初值=15536=0x3CB0方法方法227#includevoid main() unsigned int i,j,value; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操
19、作 while(1) value=0x01; for(i=0;i8;i+) for(j=0;j20;j+) /20次次*50ms/次次 while(TF0!=1); TH0=0x3c; TL0=0xb0; TF0=0; P1=value; value=value1; 时间间隔时间间隔1s=20*50ms的流水灯;的流水灯;50ms 初值初值=15536=0x3CB0方法方法228#includevoid main() unsigned int i,j,value; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) valu
20、e=0x01; for(i=0;i14;i+) for(j=0;j20;j+) while(TF0!=1); TH0=0x3c; TL0=0xb0; TF0=0; P1=value; if(i7) value=value1; 时间间隔时间间隔1s的双向流水灯;的双向流水灯;50ms 初值初值=15536=0x3CB0方法方法229#includevoid main() unsigned int value=0x01; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) if(1=TF0) TH0=0x3c; TL0=0xb0
21、; TF0=0; P1=value; value=value1; if(value=256) value=0x01; 时间间隔时间间隔50ms的流水灯;的流水灯;50ms 初值初值=15536=0x3CB0方法方法330#includevoid main() unsigned int counter,value=0x01; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) if(1=TF0) TH0=0x3c; TL0=0xb0; TF0=0; counter+; if(20=counter) counter=0; P1=
22、value; value=value1; if(value=256) value=0x01; 时间间隔时间间隔1s=20*50ms的流水灯;的流水灯;50ms 初值初值=15536=0x3CB0方法方法331#includevoid main() unsigned int i=0,value=0x01; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) if(1=TF0) TH0=0x3c; TL0=0xb0; TF0=0; P1=value; i+; if(i8) value=value1; if(i=15) value
23、=0x01;i=0; 时间间隔时间间隔50ms的双向流水灯;的双向流水灯;50ms 初值初值=15536=0x3CB0方法方法332时间间隔时间间隔1s=20*50ms的流水灯;的流水灯;#includevoid main() unsigned int counter,x=0; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) if(1=TF0) TH0=0x3c; TL0=0xb0; TF0=0; counter+; if(20=counter) counter=0; P1=(1x+); if(x=8) x=0; 50m
24、s 初值初值=15536=0x3CB0方法方法433操作练习操作练习2请用硬件定时器实现:请用硬件定时器实现:任选三个任选三个LED灯灯,分别作为红、黄、绿交通分别作为红、黄、绿交通灯灯,实现实现绿绿灯亮灯亮1s,然后,然后黄黄灯快闪灯快闪3次,再次,再红红灯灯亮亮2s,黄黄灯快闪灯快闪3次,次,绿绿灯亮灯亮1s,34#includevoid main() unsigned int i,j,a; TMOD=0x01; TH0=0x3c; TL0=0xb0; while(1) P1=0xfe; TR0=1; for(j=0;j20;j+) /绿灯亮绿灯亮20次次*50ms/次次 while(TF
25、0!=1); TH0=0x3c; TL0=0xb0; TF0=0; TR0=0; P1=0xff; for(i=0;i10000;i+); for(a=0;a3;a+) /黄灯闪三次黄灯闪三次 P1=0xfd; for(i=0;i10000;i+); P1=0xff; for(i=0;i10000;i+); / P1=0xfb;TR0=1; for(j=0;j40;j+) /红灯亮红灯亮40次次*50ms/次次 while(TF0!=1); TH0=0x3c; TL0=0xb0; TF0=0; TR0=0; P1=0xff; for(i=0;i10000;i+); for(a=0;a3;a+)
26、 /黄灯闪三次黄灯闪三次 P1=0xfd; for(i=0;i10000;i+); P1=0xff; for(i=0;i10000;i+); 35作业作业P52 2、336#includevoid main() unsigned int value,dec; value=254; dec=1; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作此位可位操作 while(1) if(1=TF0) TH0=0x3c; TL0=0xb0; TF0=0; P1=value; value=value-dec; dec=dec*2; if(dec=256) valu
27、e=254;dec=1; 时间间隔时间间隔50ms的流水灯;的流水灯;50ms 初值初值=15536=0x3CB037LOGO任任务四、拓展四、拓展训练 以前面流水灯程序以前面流水灯程序为基基础, ,增加新的功能增加新的功能一、增加一、增加显示花式示花式目的:使学生深入理解硬件目的:使学生深入理解硬件电路原理以及路原理以及应用能力,学用能力,学会用程序增加其功能。会用程序增加其功能。(1 1)花式)花式1 1:流水灯从一端:流水灯从一端显示到另一端,然后反示到另一端,然后反过来,来,显示从示从终端到始端。端到始端。(2 2)花式)花式2 2:流水灯从两端同:流水灯从两端同时向中向中间显示,到中
28、示,到中间后后再分再分别往两端往两端显示回去。示回去。(3 3)花式)花式3 3:流水灯从一端依次亮起到另一端,然后从:流水灯从一端依次亮起到另一端,然后从另一端依次熄另一端依次熄灭到开始端。到开始端。38LOGO二、改二、改变闪烁频率率目的:掌握目的:掌握对定定时器的工作原理理解及器的工作原理理解及应用能力。用能力。(1 1)时间控制方式控制方式1 1:流水灯从一端:流水灯从一端显示到另一端,灯示到另一端,灯显示的速度越来越快(用定示的速度越来越快(用定时器器实现)。)。(2 2)时间控制方式控制方式2 2:分:分别用定用定时器工作方式器工作方式0 0、1 1、2 2实现定定时间隔隔0.5S0.5S流水灯。流水灯。(3 3)时间控制方式控制方式3 3:编程使程使P1.0,P1.2,P1.4P1.0,P1.2,P1.4引脚上的引脚上的三个三个发光管的光管的闪烁时间为1s,2s,6s1s,2s,6s。39