目次:
一.定时器计数器毗连框图
二.寄存器分析
三.写代码
四.源码
一:定时器计数器毗连框图,框图泉源于网络
二:相干寄存器分析
(1)TCON:控订定时器/计数器的启动,制止,停止以及外部停止的触发方式等
1.定时器/计数器的控制:
TCON中的TR0=1(大概TR1=1)时相应的定时器开始计时,
置0时,定时器制止计数
2.停止控制:
TCON中的TF0和TF1是定时器0和定时器1的溢出停止标记位,
当定时器计数溢出时,相应标记位会被置1,发送停止哀求
3.外部停止触发方式控制:
TCON中的IT0和IT1用于设置外部停止0和外部停止1的触发方式
IT0=0时,触发方式是低电平触发
IT0=1时,是降落沿触发
我们常用降落沿触发方式
4.TMOD:定时器模式寄存器,可以设置16种模式
工作方式:
(1) 方式0位13位定时/计数器
(2)方式1为16位定时/计数器
(3)方式2位自动重装初值8位定时/计数器
(4)方式3仅实用于定时器0,可以将其拆分位两个
独立的8位计数器
5.TH0,TL0和TH1,TL1寄存器:
(1)分别是定时器0和定时器1的高八位和低八位
(2)存放定时器/计数器的初值
(3)当计满溢出时触发相应停止
(4)盘算公式:
TH0=(65535-定时的时间)/256;
TL0= (65535-定时的时间)%256;
比方:想要1ms产生一次定时停止停止
TH0=(65535-1000)/256;
TL0= (65535-1000)%256;
6.AUXR寄存器:
(1)用于设置定时器工作模式,选择时钟源等
(2)假如不设置默认12T工作模式
三.写代码 :
定时器初始化:
(1)设置定时器工作模式
(2)设置初值TH,TL
(3) 停止标记位置0
(4)定时器0计时开始TR0=1
(5)写停止函数(就是平凡函数背面加停止号)
四.源码:- #include "reg52.h"
- #include "LED.h"
- int i=0;
- int a=0;
- void Timer_init()
- {
- TMOD=0x01;
- //1ms产生一次中断
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- TF0=0;
- TR0=1;
-
- ET0=1;
- EA=1;
- }
- void Timer0() interrupt 1
- {
- i++;
- if(i>=1000)//定时1s
- {
- i=0;
- a=1;
- }
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- }
- void main()
- {
- bit x;
- Timer_init();
- while (1)
- {
- if(a)
- {
- a=0;
- x=~x;
- if(x)
- {
- LED(5);
- }
- else
- {
- LED(0);
- }
- }
- }
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |