当前位置: 首页 > news >正文

基于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;
	}
}

相关文章:

  • 做外贸网站需要多少钱百度大搜推广
  • 苏宁易购网站建设的不足之处seo是什么学校
  • 漳浦网站制作灵感关键词生成器
  • 做棋牌网站多少钱泉州网站关键词排名
  • 怎么样做国外推广网站网络营销推广方案前言
  • 公司网站微信推广在线代理浏览网站免费
  • 代码随想录算法训练营--打卡day8
  • 状态同步梳理
  • 如何精准控制大模型的推理深度
  • 解密工业控制柜:认识关键硬件(PLC)
  • NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)
  • Stable Diffusion + Contronet,调参实现LPIPS最优(带生成效果+指标对比)——项目学习记录
  • Java接口性能优化面试问题集锦:高频考点与深度解析
  • 【设计模式】访问者模式
  • 微软庆祝它成立整整50周年
  • 将图片按照指定大小批量进行裁剪(可设置步长_python)
  • 怎样使用Python编写的Telegram聊天机器人
  • Android compose源码浅析——Modifier
  • Python第八章03:Pyecharts快速入门
  • excel中的VBA指令示例(一)
  • 考研单词笔记 2025.04.09
  • docker 运行自定义化的服务-前端
  • Memcached缓存系统:从部署到实战应用指南
  • 银河麒麟系统虚拟机网络ping不通的解决方法
  • 题目练习之位运算
  • OpenAI Operator:开启 AI 智能体的无限可能