C51的周期

结构图

两个功能寄存器

51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。

工作方式寄存器TMOD



其中方式一和方式二常用

控制寄存器TCON

第四位用于控制外部中断,详见C51中断个人笔记

初始化函数中要完成的工作:

  1. 给TMOD赋值,确定工作方式
  2. 计算初值,写入TH0,TL0或TH1,TL1
  3. 中断允许控制,EA和ET0 或ET1的置位为1
  4. TR0或TR1置位,启动定时计数器

计数初值的计算

首先知道振荡周期是多少,从而机器周期是其12倍,即每计一个数,用时为机器周期

若需求是计一个数就溢出,则初值应设为65535,即65536-1 (如果是16位计数器)

若需求是计n个数就溢出,则初值应设为65536-n (如果是16位计数器)

例如,定时一毫秒。一个机器周期是1微秒,故1000个机器周期是1ms。

初值为 65536-1000 = 64536 ,十六进制为FC18

所以

TH0 = 0xFC;
TL0 = 0x18;

完整代码

#include <reg51.h>
typedef unsigned int u16;
typedef unsigned char u8;
#define delaytime 500000
sbit led = P0^0; /*
void delay(u16 i)
{
while(i--);
}
*/
void T0Init()
{
//1.选择工作方式,给TMOD 赋值
//TMOD: GATE C~T M1 M0 (低四位是T0)
// 0 0 0 1 (方式一)
// xxxx 0001
TMOD |= 0x01;
//2. 计算初值,写入计数器
TH0=0XFC; //给定时器赋初值,定时1ms 0xFC18 = 65536 - 1000 微秒
TL0=0X18;
//3. 中断允许:总允许和T0允许
ET0 = 1 ;
EA = 1;
//4. 开始定时
TR0=1;
}
void main(void)
{
T0Init();
while(1);
}
//外部中断0的调用程序
void Timer0() interrupt 1 // T0溢出时引用
{
static u16 i;
TH0=0XFC; //给定时器赋初值,定时1ms 0xFC18 = 65536 - 1000 微秒
TL0=0X18;
i++;
if(i==1000) //1s
{
i=0;
led = ~led;
}
}

C51 定时器/计数器 个人笔记的更多相关文章

  1. 毕业回馈-89c51之定时器/计数器(Timer/Count)

    今天分享的是89c51系列单片机的内部资源定时器/计数器,在所有的嵌入式系统中都包含这两个内部功能. 首先先了解几个定时器/计数器相关的概念: •时钟周期:时钟周期 T 是时序中最小的时间单位,具体计 ...

  2. N76E003的定时器/计数器 0和1

    定时器/计数器 0和1N76E003系列定时器/计数器 0和1是2个16位定时器/计数器.每个都是由两个8位的寄存器组成的16位计数寄存器. 对于定时器/计数器0,高8位寄存器是TH0. 低8位寄存器 ...

  3. MCS-51单片机的定时器/计数器概念

    一.MCS-51单片机的定时器/计数器概念 单片机中,脉冲计数与时间之间的关系十分密切,每输入一个脉冲,计数器的值就会自动累加1,而花费的时间恰好是1微秒;只要相邻两个计数脉冲之间的时间间隔相等,则计 ...

  4. Java多线程编程核心技术-第5章-定时器 Timer-读书笔记

    第 5 章 定时器 Timer 定时 / 计划功能在移动开发领域使用较多,比如 Android 技术.定时计划任务功能在 Java 中主要使用的就是 Timer 对象,他在内部使用多线程的方式进行处理 ...

  5. C51 使用端口 个人笔记

    使用整个端口的8个引脚: 八个引脚,需要8位2进制,2位十六进制 #define P0 led led = 0x3f; //led = ~0x3f; 使用某个端口的某一个引脚 sbit led = P ...

  6. C51 矩阵按键 个人笔记

    矩阵按键 电路 每个按键一端和同行一端相连(JP4的高4位),另一端和同列一端相连(JP4的低4位) 判断按键是否按下: 法一:逐行扫描 for(int i = 8 ; i>3 ; i-- ) ...

  7. C51 独立按键 个人笔记

    独立按键类似于一个开关,按下时开关闭合 防抖 硬件防抖 软件防抖 通过延时,滤掉抖动的部分 电路图 普中科技的开发板,独立按键电路图如下 判断按键按下 因此判断是否按下开关的方法是看引脚是否为低电平( ...

  8. 【C51】单片机定时器介绍

    标准51架构的单片机有2个定时器 :T0  和  T1,他们2个的用法几乎一样.下面主要讲T0定时器的用法. 初步认知 定时器 和 计数器 都是单片机中同一个模块.他们的实质都是: 加法存储计数器.对 ...

  9. [学习笔记]15个QA让你快速入门51单片机开发

    一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ  22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...

随机推荐

  1. OpenCV+VS开发环境配置

    最近跑C程序,头文件中用到了OpenCV中的文件,找了很多篇OpenCV+VS的环境配置,发现如下这篇写的最为详细,特转载来自己的博客中留存,并附上原博客地址如下 OpenCV学习笔记(一)——Ope ...

  2. BZOJ2159 Crash的文明世界

    Description 传送门 给你一个n个点的树,边权为1. 对于每个点u, 求:\(\sum_{i = 1}^{n} distance(u, i)^{k}\) $ n \leq 50000, k ...

  3. Tian Ji -- The Horse Racing HDU - 1052

    Tian Ji -- The Horse Racing HDU - 1052 (有平局的田忌赛马,田忌赢一次得200块,输一次输掉200块,平局不得钱不输钱,要使得田忌得到最多(如果只能输就输的最少) ...

  4. TSP+Floyd BestCoder Round #52 (div.2) 1002 Victor and Machine

    题目传送门 题意:有中文版的 分析:(出题人的解题报告)我们首先需要预处理出任意两个国家之间的最短距离,因为数据范围很小,所以直接用Floyd就行了.之后,我们用f[S][i]表示访问国家的情况为S, ...

  5. Linux环境下源码安装Apache2.2.25

    操作环境:RedHat Enterprise Linux 5.6 一.安装准备 安装Apache一般依赖3个组件:apr.apr-util.pcre. 确保这三个组件已经安装. [root@bigsr ...

  6. css3中content属性的应用

    可以使用css3中content功能为html元素增减内容.content需要配合 E:before和E:after使用. 废话少说,看代码和效果说明: 第一种: css代码: #div1:befor ...

  7. How do I get started with Node.js

    From: http://stackoverflow.com/questions/2353818/how-do-i-get-started-with-node-js Tutorials NodeSch ...

  8. VS2010 好用的javascript扩展工具

    工具1) JScript Editor Extensions 折叠代码 下载地址: JScript Editor Extensions 工具2) Javascript parser 以树形方式查的代码 ...

  9. WebSocket 的一些简单页面推送使用

    因为做通信项目的时候,需要实时获取每个分机的当前状态,发现websocket还不错,只是对浏览器的要求比较高, 针对特定用户推送消息,网上有一些 public class GetHttpSession ...

  10. Android(java)学习笔记200:JNI之NDK的概念

    1.交叉编译 (1)概念 在一个平台(硬件)和os(软件)环境下,编译出另一种平台和os下可以运行的二进制代码. e.g:     电脑端                               ...