51单片机——定时器
来源:互联网 发布:javascript用什么软件 编辑:程序博客网 时间:2024/05/16 04:26
单片机——定时器
宗旨:技术的学习是有限的,分享的精神是无限的。
1、定时器和计数器
时钟周期:单片机时序中的最小单位,集体计算的放法就是时钟源分之一
机器周期:单片机完成一个操作的最短时间,=12个时钟周期
定时器:打开定时器后,定时器“存储寄存器”的值经过一个机器周期自动加1,也就是说,机器周期是定时器的计数周期。
2、定时器的寄存器
TMOD —— 工作模式选择寄存器——常用模式1和模式2.
TCON —— 控制寄存器(TRn定时器开关)
TH/TL —— 定时计数器
3、定时器应用
第一步:设置特殊功能寄存器 TMOD,配置好工作模式。
第二步:设置计数寄存器TH0和TL0的初值。
第三步:设置TCON,通过TR0置 1来让定时器开始计数。
第四步:判断TCON 寄存器的TF0 位,监测定时器溢出情况。
写程序之前,我们要先来学会计算如何用定时器定时时间。我们的晶振是 11.0592M,时钟周期就是 1/11059200,机器周期是12/11059200,时器定时值最大也就是 71ms 左右。
(65536-N)*12/11.0592M = time ---计算出N转换成十六进制
1ms的例子:
TMOD = 0X01;
TH0 = 0XFC;
TL0 = 0X67;
TR0 = 1;
#include<reg52.h>typedef unsigned char uchar;sbit LED = P0^0;int main(void){ uchar cnt = 0; //定义一个计数变量,记录T0溢出次数 TMOD = 0x01; //设置T0为模式1 TH0 = 0xFC; //为T0赋初值0xB800 TL0 = 0x67; TR0 = 1; //启动T0 while (1) { if (1 == TF0) //判断T0是否溢出 { TF0 = 0; //T0溢出后,清零中断标志 TH0 = 0xFC; //并重新赋初值 TL0 = 0x67; cnt++; //计数值自加1 if (cnt >= 1000) //判断T0溢出是否达到50次 { cnt = 0; //达到50次后计数值清零 LED = ~LED; //LED取反:0-->1、1-->0 } } } return 0;}
4、数码管
共阴与共阳数码管 ——8个LED灯
位选——控制选择多个数码管中的哪一个
段选——选择数码管显示的值
// 秒定时器:#include<reg52.h>typedef unsigned int uint;typedef unsigned char uchar;uchar code count[] ={ 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};int main(void){ uchar cnt = 0; //记录T0中断次数 uchar sec = 0; //记录经过的秒数 TMOD = 0x01; //设置T0为模式1 TH0 = 0xFC; //为T0赋初值0xB800 TL0 = 0670; TR0 = 1; //启动T0 while (1) { if (TF0 == 1) //判断T0是否溢出 { TF0 = 0; //T0溢出后,清零中断标志 TH0 = 0xFC; //并重新赋初值 TL0 = 0x67; cnt++; //计数值自加1 if (cnt >= 1000) //判断T0溢出是否达到1000次 { cnt = 0; //达到1000次后计数值清零 P0 = count[sec]; //当前秒数对应的真值表中的值送到P0口 sec++; //秒数记录自加1 if (sec >= 16) //当秒数超过0x0F(15)后,重新从0开始 { sec = 0; } } } } return 0;}
0 0
- 51单片机——定时器
- 51单片机—定时器显示时钟
- 51单片机(三)——定时器/计数器
- 菜鸟带你秒杀单片机之51单片机篇—定时器
- 51单片机定时器实验
- 51单片机(AT89C52)定时器
- 51单片机定时器总结
- 51单片机定时器
- 51单片机定时器详解
- 51单片机定时器
- 51单片机-定时器/计数器
- 51单片机定时器资料
- 51单片机定时器/计数器
- 51单片机之定时器
- 51单片机定时器
- PIC12F508单片机学习之一——定时器
- 单片机mcu—time定时器详解
- 51单片机的定时器/计数器
- 关于C语言初始化,以及形参实参的一道易错题
- 小轮子 ios 获取语言
- CSS左侧宽度固定,右侧自适应
- 字符串模型1:打印去掉字符串首尾空格后的字符
- openwrt 使用dnspod 获得动态域名
- 51单片机——定时器
- 要做就要做个好男人
- 笔记
- JAY和ZOOM,还有铁面人究竟是谁?
- strcat拼接两个字符指针后,释放内存崩溃问题
- leetcode 331. Verify Preorder Serialization of a Binary Tree
- 折半查找算法
- android 线程里面再开新的的线程
- 偶然发现的CSDN编辑器下的一个不方便用户编写代码的bug