51单片机工作模式2自动装载定时值,按教科书的描述定时能力显得相对精准,但是此时的为8位定时器:当晶振为12MHz时,只能定时0.256ms。

升个级,精准性不要了,使定时器工作在模式1,16位定时器:当晶振为12MHz时已经能定时到65.56ms,略微牛逼不少。如果还要定时更长的数,可能会用软件方式

来扩展计数范围。软件方式扩展的大概思路是:在定时器中断服务程序中对定时器中断请求进行计数,当中断请求的次数达到要求的值时才进行相应的处理。例如,某事件的处理周期为1s,但由于受到最大定时时间的限制,无法一次完成定时,此时可以将定时器的定时时间设为以10ms为一个单位,启动定时器后的每一次定时器溢出中断产生10ms的定时,进入中断服务程序后,对定时器的中断次数进行统计,每100次定时器溢出中断进行一次事件的处理。

这篇文章的标题是硬件扩展,所以软件扩展的具体实现这里就省略了。以下主要围绕硬件方式展开。

硬件方式扩展的思路是:

1)T0设置为16位定时器方式,当T0溢出时,执行T0的中断服务程序。在T0的中断服务程序中将P1.0取反。这样在P1.0将输出一个方波,其周期为T0定时时间的2倍。设T0的定时时间为TIME,则由P1.0输出的方波的周期为2×TIME。
        2)T1设置为16位计数器方式,将P1.0输出的方波接到T1的定时器外部输入端T1(P3.5),作为定时/计数器1的外部计数脉冲,其每个周期的下降沿使T1加1。设计数器T1的计数脉冲数为COUNT,则当T1溢出时,总定时时间T为:T = 2×TIME×COUNT。
    下面罗列代码,定时器T0 T1全都工作在模式2

#include <REG52.H>
#include <INTRINS.H>sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
#define MakeByte(target, Hi,Lo) \
do{ \target |= (((Hi)<<4)|(Lo)); \
}while(0); \#define SetTH(n,val) \
do{ \TH##n = val; \
}while(0); \#define SetTL(n,val)  \
do{ \TL##n = val; \
}while(0); \#define EnableET(n) \
do{ \ET##n = 0x01; \IE |= 0x80; \
}while(0); \#define StartTn(n) \
do{ \TR##n = 0x01; \
}while(0);  \unsigned char FetchData=0;
unsigned int OnePeriod=0;
int main()
{//T0定时器 方式2 自动装载 //T1计数器 方式2 自动装载 MakeByte(TMOD, 0x06,0x02);//T0 0.2ms中断一次,P1.0翻转周期0.4msSetTH(0,0x38);SetTL(0,0x38);       EnableET(0);EnableET(1);//计满50次产生中断//50*0.4ms=20msSetTH(1,0xCE);SetTL(1,0xCE);StartTn(0);StartTn(1);while(1){while(!FetchData);    FetchData = 0;}
}void IsrT0() interrupt 1
{P1_0 = ~P1_0;
}void IsrT1() interrupt 3
{   //20MS elapsedOnePeriod++;//这个用于软件定时//每经过20Ms,OnePeriod加一,//然后在main函数里经行统计P1_1 = ~P1_1;
}

下面上图:P1.0的输出接P3.5

最后上仿真结果:

第一张示波器的时基为2MS,第二张示波器的时基为0.2MS

51单片机定时器量程的硬件扩展方式相关推荐

  1. 51单片机定时器(T0/T1)的使用与配置流程

    第一步:配置工作方式寄存器-TMOD TMOD寄存器的字节地址为89H,不能位寻址.一般采用整体赋值的方式进行配置:如:TMOD=0x01 // 0000 0001 GATE=0,定时器仅受TCON寄 ...

  2. 51单片机定时器的查询和进入中断处理

    51单片机定时器可用两种方式处理:查询和进入中断处理. 1.查询方式 void Init_T0 (void) 定时器初始化 { TMOD = 0x01;//计时器模式 TH0 = (65535-650 ...

  3. 51单片机定时器/计数器(定时器中断)

    51单片机定时器/计数器(中断系统:定时器中断) 实现功能 通过定时器终端控制LED灯 D1 间隔一秒闪烁 单片机型号:STC89C52 定时器介绍 1.51单片机定时器原理 定时器实质上就是一个加1 ...

  4. C语言课设项目-51单片机-定时器和计数器

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 一.定时器的原理 1.CPU时序的有关知识 2.在学习定时器之前需要明白的 3.定时/计数器的工作原理 ...

  5. 51单片机c语言定时器程序,51单片机定时器设置入门与程序解析

    89C51单片机有两个计数器T0和T1,每个计数器都是由两个8位的RAM 单元组成的,即每个计数器都是16 位的计数器,最大的计数容量是216=65536,记住是从0-65535. 其次.提供给定时器 ...

  6. 51单片机DS18B20与中断冲突解决方式

    51单片机DS18B20与中断冲突解决方式 应用场所 在使用51单片机DS18B20的过程中,总会遇到中断(这里的中断主要是指定时器中断和串口中断)与其时序产生冲突,从而导致读取不稳定的情况发生. 问 ...

  7. 51单片机定时器初值计算以及初值计算软件

    51单片机定时器初值计算以及初值计算软件 不想搞懂计算原理的直接跳到文章末尾,使用初值计算软件来解决有关初值计算的问题 51单片机定时器初值计算部分 时钟周期,也称为振荡周期:定义为时钟脉冲的倒数,在 ...

  8. 51单片机定时器及其应用(3)(测量脉冲频率)

    51单片机定时器及其应用(3)(测量脉冲频率) 前面介绍了定时器的一般应用以及定时器GATE位的应用,还有一个位没有介绍,那就是定时器C/TˉC/\bar{T}C/Tˉ位.前面讲解定时器时总是写作定时 ...

  9. 51单片机-点亮LED的多种方式

    哈喽大家好!开篇即首创! 在此分享一些51单片机关于点亮LED的方式,希望大家喜欢! 对于刚入门的小白,难免会对点灯感到疑惑,在此举几个常用的例子,并进行对比. 如下: 方法一 定义指针(对寄存器操作 ...

最新文章

  1. 微酷WeiKuCMS现赠送高速开发系统软件。公司、程序猿的福音呀!
  2. 将数字字符串格式化为指定长度
  3. pytorch datasets.ImageFolder,DataLoader形成的tensor是什么样的?
  4. ASP.NET Core 中的 User Agent 识别及搜索引擎爬虫鉴定方法
  5. 交叉验证 cross validation 与 K-fold Cross Validation K折叠验证
  6. iOS 使点击事件穿透透明的UIView
  7. DB2 SQLSTATE 消息
  8. 如何将MyEclipse开发的项目导入到Eclipse中运行
  9. 4170万元人民币的 绿坝 花季护航 预装1年软件,到底值不值
  10. 在美团,我从暑期实习到转正
  11. 数学建模系列-预测模型(五)---马尔可夫链
  12. 公众号微信认证(企业类型的订阅号)参考步骤
  13. MD5的加密和解密算法
  14. 开源财务会计软件(搬运)
  15. RoboCup中的机器人自主定位——从理论到实践(三):粒子滤波器
  16. 初识ElasticSearch(5) -批量操作之bulk | 条件查询 | 其它查询
  17. 文件系统——空闲块成组链接法的模拟
  18. 【​观察】六脉神剑第六式-管家式之面面俱到
  19. Ubuntu cudnn安装
  20. Oracle EBS Interface/API(22)-PO(标准PO、PBA、一揽子发放和采购申请审批)审批API

热门文章

  1. 虚实技术整合 打造“真”智慧城市
  2. Day1.绘制上海地铁网络图
  3. dedecms织梦仿站二次开发标签大全
  4. 网页前端第五次培训JavaScript
  5. vim实用技巧(第二版)........持续更新ing
  6. 4个技巧教你创建出成功的Facebook视频广告
  7. 酷跑 - 叉叉、葫芦侠
  8. AD9361结构及功能解析
  9. 反欺诈的核心是人,教你如何用知识图谱识别欺诈行为
  10. 几个特殊的运算符重载(前置\后置++、前置\后置--、<<、>>)