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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

水寒8051 1,128 views 0 Comments发表评论

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

源代码:

view source

print?

00

1

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

00

2

程序功能:52系列单片机定时器计数器2使用

00

3

程序设计:燕山大学鲁信琼

00 4 晶振选择:24MHz, 如果晶振不匹配,请修改延时函数参数;P2^6口接数码管段选控制位; P2^7口接数码管位选控制位; P1^7口作为测试指示灯

00

5

本实验注意事项:

6

1. 定时器2的中断使能为IE^6位,也就是ET2;中断服务程序标号为5。

00 7 2. 定时器2工作在16为自动重装模式下,不需要在中断服务程序中重新赋初值,在程序初始化的时候我们应该给RCAP2L和RCAP2H赋值,TH2和TL2将会在中断产生时自动使TH2=RCAP2H,TL2=RCAP2L。

00 8 3. 定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零,为了使定时尽量准确,我们常在终端服务程序中第一步就使TF2=0。

00 9 4. 使定时器2产生中断的有两个中断源,如果EXEN2(定时器2外部使能标志)置1的话,使定时器2进入中断的有可能是定时器2计数溢出,也可能是捕获到T2EX(单片机P1^1口)有负跳变,所以需要在中断服务程序中判断EXF2是否为1。

01 0

01 1 承接51单片机、PIC单片机程序、VB/VC++上位机程序、电子产品软硬件设计开发工作

01

2

01

3

EMail: xqlu(at) QQ: 9790335

01***********************************************************/

01 5

01 6 #includ e

01

7

#include

01 8 #define uchar unsigned char

01

9

#define uint unsigned int 02

#define LED_DATA P0

02 1 sbit

DULA=P2^6;

02 2 sbit

WELA=P2^7;

02

3

sbit LED=P1^7;

02

4

uchar timer2_ctr,num;

02 5 uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x40, 0};

02 6

02 7 //24MHz晶振延时x毫秒函数

02

8

void delay_ms(uint xms) 02

9

{

03

uint x,y;

03

1

for(x=xms; x>0; x--) 03

2

for(y=248; y>0; y--); 03

3

}

03

4

03//初始化主函数

5

03

6

void init_main()

03

7

{

03

8

DULA=0; //关闭数码管显示03

9

WELA=0;

04

04

1

RCAP2H=(0xFFFF-50000)/256;

04 2 RCAP2L=(0xFFFF-50000)%256; //24MHz晶振下定时25ms,自动重装

04

3

TH2=RCAP2H;

04

4

TL2=RCAP2L; //定时器2赋初值

04 5 T2CON=0; //配置定时器2控制寄存器,这里其实不用配置,T2CON上电默认就是0,这里赋值只是为了演示这个寄存器的配置

04 6 T2MOD=0; //配置定时器2工作模式寄存器,这里其实不用配置,T2MOD上电默认就是0,这里赋值只是为了演示这个寄存器的配置

04 7 IE=0xA0; //1010 0000开总中断,开外定时器2中断,可按位操作:EA=1; ET2=1;

04

8

TR2=1; //启动定时器2 04

9

}

05

05

1

//数码管显示3位数:0-255

05

2

void display(uchar num)

05

3

{

05

4

uchar gw,sw,bw;

05

5

bw=num/100;

05 sw=num%100/10;

相关文档
最新文档