C51 定时器Timer使用,及产生1ms系统Tick

发布者:ziyunting最新更新时间:2018-12-19 来源: eefocus关键字:C51  定时器  Timer  Tick 手机看文章 扫描二维码
随时随地手机看文章

这里写图片描述

GATE=0用TR0和TR1来控制T1和T0的启动,GATE=1则用外部中断来控制。

C/T为0表示定时器模式。为1表示计数器模式,对T0或T1的外部负跳变脉冲计数。

定时器初值的计算:

TH0 = (65536 - (24/12) * 1000)/256; //65536 Timer0 M1=0,M0=1 工作在模式1,16位定时/计数器,2^16=65536 24Mhz晶振 1000um = 1ms 

TL0 = (65536 - (24/12) * 1000)%256;


THX=(2^定时器位数 - (晶振频率/12) * 定时时间um) / 256; 

TLX= (2^定时器位数 - (晶振频率/12) * 定时时间um) % 256;


注意:记得开总中断 EA = 1;


#include

#include

#include

#include

#include


static unsigned long SysTick = 0;

static unsigned long preTime = 0;



/***********************************************************

*       系统毫秒延时

*

************************************************************/

void mdelay(u8 m)

{

    preTime = (unsigned long)(m + SysTick);

    while(preTime > SysTick)

    {

        _nop_();    

    }   

}


/***********************************************************

*       系统秒延时

*

************************************************************/

void sdelay(u8 s)

{

    preTime = (unsigned long)((s * 1000) + SysTick);

    while(preTime > SysTick)

    {

        _nop_();    

    }

}


void Timer0_Init(void)

{

    TMOD |= 0x01;  //定时/计数器工作在方式 1;


    TH0 = (65536 - (24/12) * 1000)/256;   //65536 Timer0 M1=0,M0=1 工作在模式1,16位定时/计数器,2^16=65536  24Mhz晶振 1000um = 1ms 

    TL0 = (65536 - (24/12) * 1000)%256;

    ET0 = 1;  //允许定时/计数器0 中断

    TR0 = 1;  //启动定时/计数器0 中断

}


void main()

{

    Timer0_Init();

    while(1)

    {

        P0 = !P0;

    }

}


/********************************************************************

*

*   Timer0 用于产生系统时钟滴答 1ms为周期

*

********************************************************************/

void Timer0_ISR (void) interrupt 1

{

    TH0 = (65536 - (24/12) * 1000)/256;   //65536 Timer0 M1=0,M0=1 工作在模式1,16位定时/计数器,2^16=65536  24Mhz晶振 1000um = 1ms 

    TL0 = (65536 - (24/12) * 1000)%256;

    SysTick++;

}



Timer2使用:

/*-----------------------------------------------

  名称:定时器2

  论坛:www.doflye.net

  编写:shifang

  日期:2009.5

  修改:无

  内容:通过定时让LED灯闪烁

------------------------------------------------*/

#include


sbit LED=P1^0;    //定义LED端口



/*------------------------------------------------

                    定时器初始化子程序

------------------------------------------------*/

void TIM2Inital(void)

{

  RCAP2H = (65536-(12/12)*1000*60)/256;//晶振12M 60ms 16bit 自动重载

  RCAP2L = (65536-60000)%256;

  ET2=1;                     //打开定时器中断

  EA=1;                      //打开总中断

  TR2=1;                     //打开定时器开关

}

/*------------------------------------------------

                    主程序

------------------------------------------------*/

main()

{

 TIM2Inital();

 while(1);

}


/*------------------------------------------------

                 定时器中断子程序

------------------------------------------------*/

void TIM2(void) interrupt 5 using 1//定时器2中断

{


    TF2=0;

    LED=~LED;               //指示灯反相


}


关键字:C51  定时器  Timer  Tick 引用地址:C51 定时器Timer使用,及产生1ms系统Tick

上一篇:C51 引脚功能定义,内部框图
下一篇:C51 GPIO口模拟IIC读写24CXX

推荐阅读最新更新时间:2024-03-16 16:20

C51学习心得体会,指针和数组在程序设计中的关系
C语言中的指针和数组几乎可以互换,数组名可认为是一个常量指针,指针可用来完成涉及数组下标的操作。 e.g.int * nPtr; int Array ; (1)数组与指针等价 nPtr = Array;或者nPtr = &Array ; (2)引用数组元素Array nPtr 或者*(nPtr+3)或者*(Array+3) 其中,nPtr 为指针下标表示法。 (3)e.g.数组拷贝 //用数组表示法把s2拷贝到s1中 void copy1(char *s1,constchar *s2) { int i for(i=0;s1 =s2 ;i++); } //用指针表示法把s2拷贝到s1中 void copy1(char *s1,co
[单片机]
c51单片机外扩 62256 静态RAM
学习汇编语言寻址方式时 理论的知道 但是想知道地址总线物理的连接 所以自己就买了一个62256芯片(32K 静态RAM)进行连接,然后写程序测试。 上面原理图中 有个问题 62256芯片A0-A7没有接 需要用 74HC573 74HC573的链接图 然后网上又找到一张图 C51单片机中有ALE引脚,这个引脚会控制P0脚输出的是地址还是数据 使用原件 AT89S51 62256 74HC573 C51单片机建议买STC公司生产的40脚双列直插的 可以自己制作串口下载线
[单片机]
<font color='red'>c51</font>单片机外扩 62256 静态RAM
51中断-定时器/计数器中断
什么时中断: 是指在执行程序的过程中,当出现每种情况,发出紧急的事件或其他情况时,有服务对象向CPU发出中断请求的信号,CPU暂时中断当前的程序的执行,而转去执行相应的处理程序,待处理程序完毕以后,再返回来执行原来被中断的程序。 关于中断以定时/计数器0中断为例; void timer0_init() { EA = 1; //打开总中断; TMOD |= 0x01; //选定定时/计数器0的工作的方式 TH0 = (65536 - 20000) / 256; TL0 = (65536 - 20000) % 256; //初始化定时/计数器的值 ET0 = 1; //打
[单片机]
AVR/C51和PIC八位单片机性能比较
八位单片机由于内部构造简单,体积小,成本低廉,在一些较简单的控制器中应用很广。即便到了本世纪,在单片机应用中,仍占有相当的份额。由于八位单片机种类繁多,本文仅将常用的几种在性能上作一个简单的比较,供读者在使用时作参考。 1. 51系列   应用最广泛的八位单片机首推Intel的51系列,由于产品硬件结构合理,指令系统规范,加之生产历史 悠久 ,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。有人推测,51芯片可能最终形成事实上的标准MCU芯片。   51系列优点之一是它从内部的
[单片机]
一篇详细的KEIL C51 UV2使用教程
《一篇详细的KEIL C51 UV2使用教程》 (这篇文章在2001年由w78713发表在C51新闻组,很古老但也很实用!) 这里我大致说说怎么开始keil vision2,因为我刚开始用它,不当之处请莫见笑!希望可以互相交流,共同促进。 1、首先是新建一个*.c文件(file new),写入你的程序,保存; 2、由(project new project)建立新工程,按程序要求输入工程名(默认后缀是.uv2),确定后弹出对话框提示你选单片机,比如我是选atmel的89c52,然后确定; 3、由(view project window)打开project window,在工程管理区显示有一个target1的文件夹,单击其前面的+
[单片机]
s3c2440 裸机 系统时钟和定时器的设置
⑴系统时钟原理分析 时钟决定2440执行速度,2440可以使用外部提供的时钟源,也可以使用外部的晶振然后通过内部的晶振获得时钟频率;具体选择使用哪一个时钟源看下图: 开发板一般吧引脚M2和M3连接的GND,所以说全部使用的是晶振(crystal) 除此之外,2440提供了3个时钟源FCLK(用于cpu核),HCLK(advancedhigh performance bus,用于AHB总线设备,比如cpu核,dma,usb等),PCLK(advanced performance bus,用于外围设备,比如看门狗,pwm定时器,adc等等),对于锁相环,2440拥有两种PLL其中一个为UPLL,其专用于usb设备,还
[单片机]
s3c2440 裸机 系统时钟和<font color='red'>定时器</font>的设置
C51-数据存储类型
KEILCx51是面向8051系列单片机及其硬件控制系统的开发工具。它定义的任何数据类型必须以一定的存储类型的方式定位在8051的存储区中,否则便没有任何的实际意义。该编译器通过将变量、常量定义成不同的存储类型(data,bdata,idata,pdata,xdata,code)的方法,将他们定位在不同的存储区中。 8051系列单片机将程序存储器(ROM,存储空间)和数据存储器(RAM,运算空间)分开,并有各自的寻址方式(针对汇编语言)。8051系列单片机在物理上有四个存储空间:1,片内程序存储空间;2,片外程序存储空间;3,片内数据存储空间;4,片外数据存储空间。 先讲数据存储器。大家都知道8051单片机数据存储器可划
[单片机]
需更换电池的倒计时数字定时器
只需 MCU、LCD、32kHz 晶振以及一个电阻即可构成一部基本的倒计时定时器,而且只需一颗普通的钮扣电池就能实现连续超过 10 年的工作时间。有两大关键性设计可最小化功耗并尽可能延长电池使用寿命,一是认真选择电池,二是充分利用 MCU 的低功耗模式。   我们之所以选择 CR2032 锂离子钮扣电池,主要是因为它占地较小,可以支持便携式应用,放电曲线较平,可直接驱动LCD,无需补偿,而且漏电极低,能够实现更长的工作时间。典型的 CR2032 额定容量为 "200mA,工作时间可维持数小时。为了实现连续工作 10 年的设计目标,平均系统电流消耗应不得超过 2.28μA,电流消耗的计算方式为电池能量值除以应用的工作寿命,如
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved