8.STC15W408AS单片机定时器/计数器
一、定时器计数器简介
STC15W408AS只有定时器0和定时器2,工作工作位定时器或者计数器模式。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每12个时钟或者每1个时钟得到一个计数脉冲,计数值加1;如果计数脉冲来自单片机外部引脚(T0为P3.4,T1为P3.5,T2为P3.1,T3为P0.7,T4为P0.5),则为计数方式,每来一个脉冲加1。
当定时器/计数器T0、T1及T2工作在定时模式时,特殊功能寄存器AUXR中的T0x12、T1x12和T2x12分别决定是系统时钟/12还是系统时钟/1(不分频)后让T0、T1和T2进行计数。
定时器/计数器0有4种工作模式:模式0(16位自动重装载模式),模式1(16位不可重装载模式),模式2(8位自动重装模式),模式3(不可屏蔽中断的16位自动重装载模式)。定时器T2的工作模式固定为16位自动重装载模式。T2可以当定时器使用,也可以当串口的波特率发生器和可编程时钟输出。
二、定时器/计数器的相关寄存器
2.1 定时器/计数器0/1控制寄存器TCON
TCON为定时器/计数器T0、T1的控制寄存器,同时也锁存T0、T1溢出中断源和外部请求中断源等,TCON格式如下:
TCON : 定时器/计数器中断控制寄存器 (可位寻址)
TF0:T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置“1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0(也可由查询软件清0)。
TR0: 定时器T0的运行控制位。该位由软件置位和清零。当GATE(TMOD.3)=0,TR0=1时 就允许T0开始计数,TR0=0时禁止T0计数。当GATE(TMOD.3)=1,TR0=1且INT0输 入高电平时,才允许T0计数,TR0=0时禁止T0计数。
2.2 定时器/计数器工作模式寄存器TMOD
定时和计数功能由特殊功能寄存器TMOD的控制位C/T进行选择,TMOD寄存器的各位信息如下表所列。可以看出,2个定时/计数器有4种操作模式,通过TMOD的M1和M0选择。2个定时/计数器的模式0、1和2都相同,模式3不同,各模式下的功能如下所述。
寄存器TMOD各位的功能描述
2.3 辅助寄存器AUXR
STC15系列单片机 1T 的8051单片机,为兼容传统8051,定时器0 , 复位后是传统8051的速度,即12分频,这是为了兼容传统8051。但也可不进行12分频,通过设置新增加的特殊功能寄存器AUXR,将T0,T1,T2 设置普通111条机器指令执行速度是固定的,快4到24倍,无法改变。
AUXR格式如下:
AUXR : 辅助寄存器
2.4 定时器T0和T1的中断控制寄存器:IE和IP
三、测试程序
3.1 定时器0模式0(16位自动重装载模式)
#include "stc15.h"
#define uint unsigned intuint t = 0;void main()
{P1M0 = 0x02;P1M1 = 0x00;// 定时器 0 AUXR |= 0x80; // 定时器0 1T模式TMOD = 0x00; // 定时器模式0 16位自动重载模式TL0 = 0xAE;TH0 = 0xFB; // 计数值 100us@11.0592MHzTR0 = 1; // 定时器开始计时ET0 = 1; // 使能定时器1中断EA = 1; // 打开总中断while (1);
}void tm1_isr() interrupt 1
{t = t + 1;if(t >= 100){ // 100 * 100us = 10ms P1.1端口取反输出t = 0;P11 = !P11;}
}
通过示波器可以测得波形搞好是50Hz,每个周期20ms。
这里有个问题就是定时器的初始值的计算。
定时器定时时长(100us) = SYSclk/(65536 - [TH0,TL0]), SYSclk = 11.0592MHz。
这里计算得到[TH0,TL0] = 64430,转换为十六进制就是FBAE,则TH0 = FB,TL0 = AE。
3.2 定时器2作为计数器
#include "stc15.h"void main()
{P1M0 = 0x02;P1M1 = 0x00;P11 = 0; // 初始设置为0AUXR |= 0x1C; // 定时器2 工作为计数器模式 P3.1为计数引脚 允许计数器运行T2L = 0x00;T2H = 0x00;while(1){if(T2L==16) // 计数器到了16 就把P1.1口输出取反 { T2L=0X00;P11 = !P11;}}
}
定时器0个定时器2都可以工作位定时器/计数器模式,这里为了区分就把定时器2作为计数器使用了。
8.STC15W408AS单片机定时器/计数器相关推荐
- 单片机定时器_单片机定时器/计数器基本原理
目前常用的单片机中往往都配备了定时器/计数器.在AT89S52芯片内包含有三个16位的定时器/计数器:T0.T1和T2,其核心是加1计数器.我们主要要求掌握T0和T1的结构和功能.学习中要注意从电路结 ...
- C51单片机————定时器计数器
51单片机定时器/计数器 定时(定时控制.测量.延时...)和计数(对外部事件统计数目). Created with Raphaël 2.1.2张三张三李四李四嘿,四哥, 定时器和计数器有哪几种实现哦 ...
- 51单片机定时器/计数器(定时器中断)
51单片机定时器/计数器(中断系统:定时器中断) 实现功能 通过定时器终端控制LED灯 D1 间隔一秒闪烁 单片机型号:STC89C52 定时器介绍 1.51单片机定时器原理 定时器实质上就是一个加1 ...
- 基于单片机定时器/计数器的时钟设计及计数设计
基于单片机定时器/计数器的时钟设计以及计数设计 第一部分 前言 第二部分 定时器/计数器的原理 MCS-51定时器/计数器的结构 定时器/计数器相关特殊功能寄存器 定时器/计数器工作方式 第三部分 定 ...
- 51单片机——定时器/计数器
目录 1.概述 2.定时器/计数器 2.1 定时功能 2.2.1 定时功能的用法 2.1.2 任意定时方法 2.2 计数功能 2.2.1 计数功能的用法 2.2.2 任意计数方法 2.3 定时器/计数 ...
- 单片机 定时器/计数器
单片机 定时器/计数器 一.简述 MCS-51系列单片机内部有两个16位定时器/计数器,即定时器T0和定时器T1.它们都具有定时和计数功能,可用于定时或延时控制,对外部事件进行检测.计数等. ...
- 定时器计数器实验C语言程序,单片机定时器计数器实验报告.docx
单片机定时器计数器实验报告 单片机定时器计数器实验报告 篇一:单片机计数器实验报告 计数器实验报告 ㈠ 实验目的 1. 学习单片机内部定时/计数器的使用和编程方法: 2. 进一步掌握中断处理程序的编程 ...
- 单片机定时器/计数器编程
实验二 单片机定时器/计数器编程 一.实验目的 1.掌握单片机定时器/计数器的工作方式: 2.掌握单片机定时器/计数器的编程方法. 二.实验内容 1.学习单片机定时器/计数器的工作方式.初始化以及应 ...
- 51单片机定时器计数器原理以及应用(方波、pwm、脉冲计数、高电平脉宽测量)
1.基本原理:http://www.51hei.com/bbs/dpj-103111-1.html 补充: 1.TMOD定时器/计数器工作方式寄存器 GATE=1时,定时器由INT和TR共同控制,用于 ...
最新文章
- 【linux】Valgrind工具集详解(三):打印信息说明
- c/c++文件I/O函数学习--不断补充
- python 开发板加密_Bugku 加密 python writeup
- python中的json注意事项
- SqlServerManagement新建数据库并执行sql文件流程
- Python3空字符串和len()函数
- c++,c.c#区别
- select 移动端 第一个无法选中_总结在移动端碰到的坑
- Linux学习:Linux基础命令集(2)
- spring boot-html和templates
- 【神经网络算法入门】详细推导全连接神经网络算法及反向传播算法+Python实现代码
- 读出我潮流 亚马逊Kindle新品焕彩上市
- ThoughtWorks 结对编程
- 零基础学C语言必备书籍,抖音编程达人推荐(进群交流学习互动)
- MAC苹果电脑关闭系统完整性保护SIP(System Integrity Protection)
- 使用HTML代码完成效果图,完成www.163.com账号注册页面(不要求做css样式,原生的HTML就好)
- 推荐几本书给大家(二)
- Python编程PTA题解——验证“哥德巴赫猜想”
- asp 遇到过的问题集锦,附加asp语句添加数据库和生成表,asp命令更改指定文件的文件名,asp值传递的应用091116小结...
- 分享几个 Github 镜像网站(亲测可用)