基于C8051F340单片机的精确定时1S的C程序

一、前言

C8051F340单片的定时器2 是一个 16 位的计数器/定时器,由两个 8 位的 SFR 组成:TMR2L(低字节)和TMR2H(高字节)。定时器 2 可以工作在 16 位自动重装载方式、8 位自动重装载方式(两个 8位定时器),文本通过16 位自动重装载方式,实现精确定时1S。在P4口和P2口可以分别接上一个LED灯来感知时间的变化。

二、程序展示

1、头文件部分

#include <C8051F340.h>		
#define SYSCLK	24000000	// 系统时钟:24000000 = 24MHz
#define TMR2_PRESCALER	12  // Timer2分频数
#define TMR2_PER_MS SYSCLK/TMR2_PRESCALER/1000
#define	TMR2_ISR_INTELVAL	1	// Timer2中断间隔(ms)
#define TMR2_RELOAD  65536 - TMR2_PER_MS * TMR2_ISR_INTELVAL
#define TMR2_INIT_VAL  TMR2_RELOAD		// Timer2初始值

void Port_Init (void);  //端口初始化
void Timer2_Init (void);    //定时器2初始化
void sysclk_Init(void);
void set_time(uint time);
bit is_time(void);
void delay(unsigned int time)  
sfr16 TMR2RL = 0xCA;   
sfr16 TMR2 = 0xCC;  
bit time_over;	 // 定时到标志
unsigned int timer2_ISR_count;

2、主程序部分

 main()
{
    count=0;
	PCA0MD&= ~0x40;			//关看门狗
	sysclk_Init();
	Port_Init();
    Timer2_Init();
    while(1)
    {
        set_time(5000);
		while(!is_time());
        P4=0xff;P2=0xff;
        set_time(2000);
		while(!is_time());
        P4=0x00;P2=0x00;
    }
}

3、延时函数

软件延时,用于时钟初始化

void delay(unsigned int t)  
{
	  unsigned int m,n;
	  for(x=t;m>0;m--)
		for(n=1200;n>0;n--);
}

4、系统时钟初始化函数

系统时钟设置24MHz,选择4倍时钟乘法器/2。

void sysclk_Init()			
{  
	 OSCICN|=0x03;						
	 CLKMUL|=0x00;					
	 CLKMUL|=0x80;					
	 delay(1);
	 CLKMUL|=0xC0;						
	 while(!(CLKMUL&0x20));			 
	 CLKSEL|=0x02;
	 IE = 0x88;  
     EA=1;						
}

5、端口初始化

void PORT_Init()
{	
	XBR1=0x40;	
    P2MDOUT|=0x3F;
    P4MDOUT|=0xff;
    P4=0x00;
    P2=0x00;
}

6、定时器2初始化函数

void Timer2_Init(void) 
{                    	
	TMR2	= TMR2_INIT_VAL;		// 初始化值
	TMR2RL	= TMR2_RELOAD;			// 溢出后重装值	
	ET2 = 1;                    	// 使能定时器2					 
}

7、定时完成判断

bit is_time(void) 
{
	return time_over; 
}

8、定时器2终端程序

void Timer2_ISR(void) interrupt 5 
{
	TMR2CN &= ~0xC0;				
	timer2_ISR_count--;	 				
	if (timer2_ISR_count == 0) 		
	{									
		time_over = true;
		TR2 = 0;				
		TMR2 = TMR2_INIT_VAL;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xll_007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值