单片机学习之项目1-流水灯2定时器

上传人:n**** 文档编号:93086502 上传时间:2019-07-16 格式:PPT 页数:37 大小:1.62MB
返回 下载 相关 举报
单片机学习之项目1-流水灯2定时器_第1页
第1页 / 共37页
单片机学习之项目1-流水灯2定时器_第2页
第2页 / 共37页
单片机学习之项目1-流水灯2定时器_第3页
第3页 / 共37页
单片机学习之项目1-流水灯2定时器_第4页
第4页 / 共37页
单片机学习之项目1-流水灯2定时器_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《单片机学习之项目1-流水灯2定时器》由会员分享,可在线阅读,更多相关《单片机学习之项目1-流水灯2定时器(37页珍藏版)》请在金锄头文库上搜索。

1、常用延时方法,非精确延时 For(i=0;i) 利用定时器进行定时,定时/计数器(Timer/Counter,简称T/C),80C51有2个16位定时/计数器: T0、T1 80C52有3个16位定时/计数器: T0、T1、T2,定时/计数器(Timer/Counter,简称T/C),定时器:来一个机器脉冲计数器的值加1。当计数器值溢出(全1)时回0,定时时间到,中断标志TF置1. 1个机器周期=12*1/振荡频率 计数器:在机器周期内采样T0(或T1)脉冲的下降沿,来一个下降沿计数器的值加1。当计数器值溢出(全1)时回0,中断标志TF置1.,1。定时器知识 (1)定时器/计数器的内部结构及工

2、作原理 单片机内部设有2个16位的可编程的定时器/计数器。简称为定时器0(T0)、定时器1(T1)。可编程是指其功能(如工作模式、定时时间等)均可通过指令来确定或改变。,单片机定时器/计数器结构图,定时器的工作原理: 定时器/计数器是一个加“1”计数器,来一个脉冲即进行加1计数,直至计数器的各位全为“1”,再来一个脉冲,计数器回0(即溢出),且使TF0(定时器0)或TF1(定时器1)置1,表示时间到,计数值乘以脉冲周期就是定时时间。 输入的脉冲来源有2个:一个是单片机晶体振荡器经12分频;另一个是T0/T1端的外部输入脉冲。作定时器用时,应采用晶体振荡器经12分频的脉冲。,定时器功能,两个寄存

3、器:TMOD和TCON 4个计数寄存器:TH0,TL0;TH1,TL1 方式1: 定时时间=(65536-初值)*12/振荡频率 初值=65536-定时时间*振荡频率/12,例如定时1ms:,初值=65536-1s*12*103Hz/12 =65536-1000 =64536 =0xFC18,TMOD寄存器,GATE,C/T,M1,M0,GATE,C/T,M1,M0,控制T1,控制T0,M1M0: 00:方式0 01:方式1 10:方式2 11:方式3,C/T 0:定时器 1:计数器,GATE: 0:软件控制定时器工作 1:外部中断控制定时器工作,不可位寻址,GATE:门控位,控制计数器的启动

4、/停止操作方式。 当GATE=0时,外部中断信号不参与控制,计数器只有TR0和TR1位软件控制启动和停止。TR1、TR0为1时,计数器启动开始工作;为0时,计数器停止工作。 当GATE=1时,计数器的启动要由外部中断信号和TR0、和TR1共同控制。只有当外部中断引脚为高电平,TR0/TR1置1时才能启动计数器工作。,:功能选择位。当=0时选择定时功能,计数脉冲由内部提供,计数周期等于机器周期。当=1时选择为计数功能,计数脉冲为外部引脚T0、T1引入的外部脉冲信号。,M1和M0:T0和T1工作方式控制位。定时/计数器的工作方式有M1M0两位状态决定,这两位有四种编码方式,对应于四种工作方式。四种

5、方式定义如表所示:,TCON,TF1,TR1,TF0,TR0,IE1,IP1,IE0,IP0,可位寻址, 也可字节寻址,M1M0,00:方式0,13位计数寄存器 01:方式1 ,16位计数寄存器,用于定时和计数 10:方式2 ,自动重装载8位计数寄存器,用于波特率发生器 11:方式3,2个8位计数寄存器,定时器使用步骤,1.设置TMOD,使之工作在需求状态; TMOD=0x01; 或TMOD=0x10; 2.设置计数寄存器初值,精确设定好定时时间; TH0=0xff; TL0=0x00; 或TH1=0xff; TL1=0x00; 3.设置TCON,打开TR使定时器工作; TR0=1; 或TR1

6、=1; 4.检测定时器溢出(TF=1),溢出时:复位TF,计数寄存器赋初值,定时到触发的动作。 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; ,定时1ms 初值=65536-1000=0xFC18,#include sbit P1_0=P10; void main() TMOD=0x01; TH0=0xfc; TL0=0x18; TR0=1; /此位可位操作 while(1) if(1=TF0) TH0=0xfc; TL0=0x18; TF0=0

7、; /此位可位操作 P1_0=P1_0; /此位可位操作 ,定时时间=(65536-初值)*12/振荡频率65536s,#include sbit 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; /此位可位操作 ,定时1s,#include sbit P1_0=P10; void main() unsigned int counter; TMOD=0x01; TH0=0xb1; TL0=0xe0; T

8、R0=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=0xB1E0,复习,定时器定时功能的使用 TMOD:选择T0还是T1 TCON:选择方式1 设置初值放置于TH0,TL0或TH1,TL1中,方式1: 定时时间=(65536-初值)*机器周期 初值=65536-定时时间/机器周期,时间间隔0.5s=10*50ms的流水灯;,#include void main() unsigned in

9、t 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; dec=dec*2; ,50ms 初值=15536=0x3CB0,书上程序,操作练习1,请用定时器0实现: 时间间隔50ms的流水灯; 时间间隔1s的流水灯;,操作练习2,请用硬件定时器实现: 任

10、选三个LED灯,分别作为红、黄、绿交通灯,实现绿灯亮1s,然后黄灯快闪3次,再红灯亮2s,黄灯快闪3次,绿灯亮1s,,#include void main() unsigned int i,value,dec; TMOD=0x01; 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 初值=155

11、36=0x3CB0,书上方法,时间间隔1s=20*50ms的流水灯;,#include void 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+) 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=0x3CB

12、0,书上方法,时间间隔1s的双向流水灯;,#include void main() unsigned char i,j,value,dec; 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=val

13、ue+dec; ,书上方法,#include void main() unsigned int i,value; 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,方法2,#include void main() unsigned int i,j,value; TMOD=0x01;

14、 TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作 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,方法2,#include void main() unsigned int i,j,value; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位

15、操作 while(1) value=0x01; for(i=0;i1; ,时间间隔1s的双向流水灯;,50ms 初值=15536=0x3CB0,方法2,#include void main() unsigned int value=0x01; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; /此位可位操作 while(1) if(1=TF0) TH0=0x3c; TL0=0xb0; TF0=0; P1=value; value=value1; if(value=256) value=0x01; ,时间间隔50ms的流水灯;,50ms 初值=15536=0x3CB0,方法3,#include void main() unsigned int counter,value=0x01; TM

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号