林天成连花村全集阅读:52单片机定时器2使用(C语言程序) | 水寒博客

来源:百度文库 编辑:中财网 时间:2024/04/28 11:34:57
首页 > 8051单片机 > 52单片机定时器2使用(C语言程序) 2010九月2

52单片机定时器2使用(C语言程序)

水寒 8051单片机 754 Views 0 Comments 发表评论

  本文是关于52单片机定时器计数器2做为普通的16位自动重装定时器使用,类似于定时器计数器0和定时器计数器1工作在方式1下。以下程序在Keil 2和Keil 3下调时通过,下载在本校的实验板上达到预期效果。AT89C52及其以上、AT89S52及其以上、STC89C52及其以上测试正常运行。

源代码:

view source print?001/*********************************************************** 002程序功能:52系列单片机定时器计数器2使用 003程序设计:燕山大学 鲁信琼 004晶振选择:24MHz, 如果晶振不匹配,请修改延时函数参数;P2^6口接数码管段选控制位; P2^7口接数码管位选控制位; P1^7口作为测试指示灯 005本实验注意事项: 0061. 定时器2的中断使能为IE^6位,也就是ET2; 中断服务程序标号为5。 0072. 定时器2工作在16为自动重装模式下,不需要在中断服务程序中重新赋初值,在程序初始化的时候我们应该给RCAP2L和RCAP2H赋值,TH2和TL2将会在中断产生时自动使TH2=RCAP2H,TL2=RCAP2L。 0083. 定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零,为了使定时尽量准确,我们常在终端服务程序中第一步就使TF2=0。 0094. 使定时器2产生中断的有两个中断源,如果EXEN2(定时器2外部使能标志)置1的话,使定时器2进入中断的有可能是定时器2计数溢出,也可能是捕获到T2EX(单片机P1^1口)有负跳变,所以需要在中断服务程序中判断EXF2是否为1。 010  011承接51单片机、PIC单片机程序、VB/VC++上位机程序、电子产品软硬件设计开发工作 012  013EMail: xqlu(at)ysu.net.cn   QQ: 9790335 014***********************************************************/015  016#include 017#include 018#define uchar unsigned char 019#define uint unsigned int 020#define LED_DATA P0 021sbit DULA=P2^6; 022sbit WELA=P2^7; 023sbit LED=P1^7; 024uchar timer2_ctr,num; 025uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x40, 0}; 026  027//24MHz晶振延时x毫秒函数 028void delay_ms(uint xms) 029{ 030    uint x,y; 031    for(x=xms; x>0; x--) 032        for(y=248; y>0; y--); 033} 034  035//初始化主函数 036void init_main() 037{ 038    DULA=0;             //关闭数码管显示 039    WELA=0; 040  041    RCAP2H=(0xFFFF-50000)/256; 042    RCAP2L=(0xFFFF-50000)%256;  //24MHz晶振下定时25ms,自动重装 043    TH2=RCAP2H; 044    TL2=RCAP2L;         //定时器2赋初值 045    T2CON=0;            //配置定时器2控制寄存器,这里其实不用配置,T2CON上电默认就是0,这里赋值只是为了演示这个寄存器的配置 046    T2MOD=0;            //配置定时器2工作模式寄存器,这里其实不用配置,T2MOD上电默认就是0,这里赋值只是为了演示这个寄存器的配置 047    IE=0xA0;            //1010 0000开总中断,开外定时器2中断,可按位操作:EA=1; ET2=1; 048    TR2=1;              //启动定时器2 049} 050  051//数码管显示3位数:0-255 052void display(uchar num) 053{ 054    uchar gw,sw,bw; 055    bw=num/100; 056    sw=num%100/10; 057    gw=num%10; 058  059    LED_DATA=0XFE;      //1111 1110 060    WELA=1; 061    _nop_();_nop_(); 062    WELA=0; 063    LED_DATA=table[bw]; 064    DULA=1; 065    _nop_();_nop_(); 066    DULA=0; 067    delay_ms(3); 068  069    LED_DATA=0XFD;      //1111 1101 070    WELA=1; 071    _nop_();_nop_(); 072    WELA=0; 073    LED_DATA=table[sw]; 074    DULA=1; 075    _nop_();_nop_(); 076    DULA=0; 077    delay_ms(3); 078  079    LED_DATA=0XFB;      //1111 1011 080    WELA=1; 081    _nop_();_nop_(); 082    WELA=0; 083    LED_DATA=table[gw]; 084    DULA=1; 085    _nop_();_nop_(); 086    DULA=0; 087    delay_ms(3); 088} 089  090void main() 091{ 092    init_main(); 093    while(1) 094    { 095        display(num); 096    } 097} 098  099void timer2() interrupt 5 100{ 101        //!!!注意!!! 定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!! 102  103    TF2=0; 104    timer2_ctr++; 105  106        //定时25ms×40=1000ms即1秒钟,这里模拟一个60秒秒表 107    if(timer2_ctr>=40) 108    { 109        timer2_ctr=0; 110        LED=~LED; 111        num++; 112        if(num>=60) 113        { 114            num=0; 115        } 116    } 117}

附件供下载52单片机定时器计数器2使用(C语言版)

文章作者:水寒
本文地址:http://www.shuihan.com/article/27
版权所有 ? 转载时必须以链接形式注明作者和原始出处!

文章标签: ? 52单片机定时器2作为串行口波特率发生器使用(C语言程序) PC电源选购指南(我抄来的,但是已仔细研读赞成其观点) ? 本文目前尚无任何评论.

发表评论

Cancel reply

最近文章

  • STM32(Cortex-M3)中的中断优先级概念
  • PIC单片机问题集合(将不断更新)
  • PHP内部常量:路径分隔符等一些很值得使用的内部常量
  • C语言:全局变量在多个c文件中公用的方法
  • STM32f10x升级固件库3.1.2使用要注意的地方(修订版)

近期评论

  • 滕州PIC单片机问题集合(将不断更新) 上的评论
  • 滕州PIC单片机问题集合(将不断更新) 上的评论
  • 滕州 在 PIC单片机问题集合(将不断更新) 上的评论
  • 粉丝淘C语言:全局变量在多个c文件中公用的方法 上的评论
  • 水寒STM32f10x升级固件库3.1.2使用要注意的地方(修订版) 上的评论

分类目录

  • 8051单片机
  • PHP
  • PIC
  • STM32/STM8
  • web技术相关
  • 共享资源
  • 水寒日志
  • 电脑硬件
  • 表现层

功能

  • 注册
  • 登录
  • 文章 RSS
  • 评论 RSS
  • WordPress.org

友情链接

  • 80后网管小胡
  • kalahan的破窝
  • 小楼听雨
  • 志文工作室
  • 真的猛士
  • 雁城孤客

赞助连接

  • tiffany

文章归档

  • 2011 年三月
  • 2011 年一月
  • 2010 年十二月
  • 2010 年十一月
  • 2010 年十月
  • 2010 年九月
  • 2010 年八月
  • 2010 年七月

Meta

  • 注册
  • 登录