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 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; } 共阴与共阳数码管 ——8个LED灯 位选——控制选择多个数码管中的哪一个 段选——选择数码管显示的值 // 秒定时器: #include 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 = 0x67; 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; }4、数码管
上一篇:51单片机最小系统板制作过程
下一篇:51单片机入门 - 中断的使用
推荐阅读最新更新时间:2024-11-13 10:37
推荐帖子
- 有奖测评: 米尔全志车规级CPU开发板 MYC-YT507
- 型号:MYD-YT507-8E1D-150-I(工业级),价值650元数量:3套MYC-YT507核心板基于全志车规级T507处理器,该处理器集成四核CortexA53CPU、G31MP2GPU、32位DDR3/LPDDR3/DDR4/LRDDR4动态随机存储器,多路视频输出接口(RGB/2*LVDS/HDMI/CVBSOUT)、多路视频输入接口(MIPICSI/BT656/BT1120)。该芯片支持4K@60fpsH.265解码,4K@60fp
- EEWORLD社区 国产芯片交流
- 如何修改wince 下 ie显示网页的默认字体?
- 那位知道,如何修改winceie中显示网页内容的中文默认字体?我把系统字体全部换掉了,但是ie还是顽固的保持宋体。如何修改wince下ie显示网页的默认字体?自己顶帮顶下.如果系统都没有宋体了,IE还能是宋体,这就奇怪了宋体我没删除,fontlink修改了下Tahoma=\\\\Windows\\\\UniSun.ttf,UniSunCourierNew=\\\\Windows\\\\UniSun.ttf,UniSunArial=\\\\Wi
- wxchen2008 WindowsCE
- 串口
- 我的PM2.5和433模块公用一个串口,为什么单独用的时候都正常,但是两个同时插上就低电平拉不到地,3.3V系统,拉低有1.6V左右。串口串口是不能共用的,串口的电平是推挽输出的,接在一起会冲突,一个输出高一个输出低接到一起就会是中间电平。 要么转成485,要么加一个切换开关——“分时复用”,两个设备共用串口,可以一个设备仅接收,一个设备仅发送,但不推荐这么使用。发生了电平竞争,推挽型输出不可简单并联,需要用数据选择器、模拟开关等来选择信号,至少也需要用二极管接成“线与”模式后再汇
- xie675101459 单片机
- STM32L151RCT6下载完程序进不了低功耗
- 各位大佬好,小弟在使用STM32L151RCT6单片机的时候遇到一个奇怪的问题,我用的是HAL库,当我下载完程序后如果不完全断电,单片机进不了低功耗,即使通过硬件复位现象也是一样,但是只要我断开电源重新上电,后面不管是进入低功耗还是低功耗下唤醒都完全正常了,现在做一个产品通过锂电池供电,而且锂电池是焊接到板子上的,每烧录一次程序,就进不了低功耗了,得把电池焊下来重新接一下才正常,真是心力憔悴啊。在网上找了都没找到类似的问题,不知大佬们有没有碰到过这种情况。STM32L151RC
- 星月夜 stm32/stm8
- 有关BUCK电感的设计方法
- 有关BUCK电感的设计方法这个好用,顶一下~全文英。顶一下~
- czf0408 电源技术
- 分享一本不过时的《电源管理基础Dummies®》
- 电源管理基础电子书为大家介绍有关电源管理的基础知识,以及最新发展趋势和应用。以下是本电子书中的一些亮点:1.DC电池配置电子设备使用哪种电源管理子系统,取决于电源类型。这些电源包括交流、直流或超低功耗直流电源,例如太阳能。许多设备都由单个电池或包含多个电池的电池组提供直流电源。这些电池可以按不同的方式连接,以提供不同的电流和电压输出。例如:PowerManagementFundamentalsForDummies下载电子书
- okhxyyo 电源技术
设计资源 培训 开发板 精华推荐
- 使用 IRS27951 的 IRAC27951-220W、220W 双输出谐振半桥电源
- LT1934ES6 3.3V降压转换器典型应用电路
- XRP7740四通道数字PWM降压控制器典型应用电路
- 具有 PWM 调光功能的 LV52204MT 10 LED 升压驱动器的典型应用,用于 LED 显示屏背光控制
- ZTL431系列稳压器的典型应用
- ESP8266系列开发板
- AM3G-2415DZ ±15V 3 瓦 DC/DC 转换器的典型应用
- LTM4601EV 演示板,多相器高密度电源模块
- DVK-BASE-2-GEVK:DVK-2 基础评估套件
- ADP2119 1.2V、2A降压稳压器的典型应用,强制连续导通模式