8052单片机中定时器T2的应用
来源:互联网 发布:淘宝卖家开通企业店铺 编辑:程序博客网 时间:2024/05/08 03:26
摘自:http://www.shuihan.com/article/27
感谢!
52单片机的大家都熟悉,可是其中的Timer2很少有人去用,书上和网上鲜有资料,这里转载一篇文章,初步了解一下他的应用
/***********************************************************程序功能:52系列单片机定时器计数器2使用程序设计:燕山大学 鲁信琼晶振选择:24MHz, 如果晶振不匹配,请修改延时函数参数;P2^6口接数码管段选控制位; P2^7口接数码管位选控制位; P1^7口作为测试指示灯本实验注意事项:1. 定时器2的中断使能为IE^6位,也就是ET2; 中断服务程序标号为5。2. 定时器2工作在16为自动重装模式下,不需要在中断服务程序中重新赋初值,在程序初始化的时候我们应该给RCAP2L和RCAP2H赋值,TH2和TL2将会在中断产生时自动使TH2=RCAP2H,TL2=RCAP2L。3. 定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零,为了使定时尽量准确,我们常在终端服务程序中第一步就使TF2=0。4. 使定时器2产生中断的有两个中断源,如果EXEN2(定时器2外部使能标志)置1的话,使定时器2进入中断的有可能是定时器2计数溢出,也可能是捕获到T2EX(单片机P1^1口)有负跳变,所以需要在中断服务程序中判断EXF2是否为1。承接51单片机、PIC单片机程序、VB/VC++上位机程序、电子产品软硬件设计开发工作EMail: dotcpp@139.comQQ: 9790335手机: 13633330733***********************************************************/#include <REGX52.H>#include <INTRINS.H>#define uchar unsigned char#define uint unsigned int#define LED_DATA P0sbit DULA=P2^6;sbit WELA=P2^7;sbit LED=P1^7;uchar timer2_ctr,num;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0}; // 0 1 2 3 4 5 6 7 8 9 A B C D E F -//24MHz晶振延时x毫秒函数void delay_ms(uint xms){uint x,y;for(x=xms; x>0; x--)for(y=248; y>0; y--);}//初始化主函数void init_main(){DULA=0;//关闭数码管显示WELA=0;RCAP2H=(0xFFFF-50000)/256;RCAP2L=(0xFFFF-50000)%256;//24MHz晶振下定时25ms,自动重装TH2=RCAP2H;TL2=RCAP2L;//定时器2赋初值T2CON=0;//配置定时器2控制寄存器,这里其实不用配置,T2CON上电默认就是0,这里赋值只是为了演示这个寄存器的配置T2MOD=0;//配置定时器2工作模式寄存器,这里其实不用配置,T2MOD上电默认就是0,这里赋值只是为了演示这个寄存器的配置IE=0xA0;//1010 0000开总中断,开外定时器2中断,可按位操作:EA=1; ET2=1; TR2=1;//启动定时器2}//数码管显示3位数:0-255void display(uchar num){uchar gw,sw,bw;bw=num/100;sw=num%100/10;gw=num%10;LED_DATA=0XFE;//1111 1110WELA=1;_nop_();_nop_();WELA=0;LED_DATA=table[bw];DULA=1;_nop_();_nop_();DULA=0;delay_ms(3);LED_DATA=0XFD;//1111 1101WELA=1;_nop_();_nop_();WELA=0;LED_DATA=table[sw];DULA=1;_nop_();_nop_();DULA=0;delay_ms(3);LED_DATA=0XFB;//1111 1011WELA=1;_nop_();_nop_();WELA=0;LED_DATA=table[gw];DULA=1;_nop_();_nop_();DULA=0;delay_ms(3);}void main(){init_main();while(1){display(num);}}void timer2() interrupt 5{TF2=0;//!!!注意!!! 定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!!timer2_ctr++;if(timer2_ctr>=40)//定时25ms×40=1000ms即1秒钟,这里模拟一个60秒秒表{timer2_ctr=0;LED=~LED;num++;if(num>=60){num=0;}}}
大家可以编译下载试试哦,我试过,可以运行,不过是12MHz的晶振。
- 8052单片机中定时器T2的应用
- T2定时器应用
- PIC单片机-定时器的应用
- 51单片机定时器T2初始化设置
- 单片机中定时器的使用
- 单片机,定时器的应用,段选,位选二
- T2定时器
- 单片机,定时器的应用,段选,位选
- VC中定时器的应用
- 单片机编程中软件定时器
- 单片机中定时器T1对串口的作用
- 单片机中各种周期的关系与定时器原理
- 单片机中各种周期的关系与定时器原理
- 关于51单片机学习中计数器/定时器中断的理解
- 51单片机定时器中断函数中变量初始化的问题
- 51单片机中定时器/计数器初值的计算
- 51单片机的定时器/计数器
- 单片机 定时器计数器的相关
- Mplayer学习笔记2--打开分离器demuxer
- cvEigenVV 特征值 对应的特征向量
- C++ Hash表设计V2.0
- Linux_用U盘安装Linux系统的简单方法
- STL-模板
- 8052单片机中定时器T2的应用
- gsensor架构和原理分析
- 轻身健脾与护肝
- spi FLASH 问答
- ubuntu设置默认启动字符界面
- 网络的各种协议类型
- Android activity的生命周期
- 12-4-26关于普通函数指针,类成员函数指针,char(*)[]
- Windows server 2003 远程桌面登录本地console的方法