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. python网络爬虫之三re正则表达式模块

    """ re正则表达式,正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的 一些特定字符,及这些特定字符的组合,组成一个"规则字符串",然后用 ...

  2. linux下创建用户及组

    linux下创建用户及组: 1.创建组 groupadd  组名 2.创建用户,并将用户添加到组 useradd  用户名  -g  组名 3.更改用户的密码 password  用户名 4.修改目录 ...

  3. poj 1258 Agri-Net prim模板 prim与dijkstra的区别

    很裸地求最小生成树的题目.题意就不多说了,最重要的就是记录一下学会了prim算法. 初学prim,给我的第一感觉就是和dijkstra好像啊,感觉两者的区别还是有的: 1:prim是求最小生成树的算法 ...

  4. MyEclipse中Tomcat对应JVM的参数配置

    MyEclipse中Tomcat对应JVM的参数配置: -Xmx512M -Xms256M -XX:MaxPermSize=256m

  5. Styles and Themens(1)详述

    Styles and Themes IN THIS DOCUMENT Defining Styles Inheritance Style Properties Applying Styles and ...

  6. 452 Minimum Number of Arrows to Burst Balloons 用最少数量的箭引爆气球

    在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了.开始坐标总是小于结束坐标.平面 ...

  7. sed与正则表达式

    行的开头(^) ^匹配每一行的开头 [root@sishen ~]# sed -n '/^103/ p ' employee.txt 103,Raj Reddy,Sysadmin 只有^出现在正则表达 ...

  8. js内置对象总结

    在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质. 注意:通过字面量创建的对象在调用属性 ...

  9. 从源码对比DefaultServeMux 与 gorilla/mux

    从源码对比DefaultServeMux 与 gorilla/mux DefaultServeMux Golang自带的net/http库中包含了DefaultServeMux方法,以此可以搭建一个稳 ...

  10. iOS/Android 视频编辑SDK

    锐动天地为开发者提供短视频编辑.特效.直播.录屏.编解码.视频转换,等多种解决方案,涵盖PC.iOS.Android多平台.以市场为导向,不断打磨并创新技术,在稳定性,兼容性,硬件设备效率优化上千捶百 ...