您好,欢迎来到年旅网。
搜索
您的当前位置:首页定时器程序

定时器程序

来源:年旅网


//[Timer.h]定时器头文件-----------------------------------------------------

//定时器需要用到的头文件

#include //MCU映像寄存器名 #include \"Type.h\" //类型别名定义

//定时器相关函数声明

void TimerInit(void); //定时器初始化函数声明 void TimerUpDate(void); //定时器更新函数声明

//外部变量声明

extern INT8U time[3]; //存放时,分,秒 extern INT8U TimInterCoun

//[Timer.c]定时器----------------------------------------------------------*

//本文件包含: // (1)TimerInit:定时器初始化 // (2)TimerUpDate:定时器更新 //-------------------------------------------------------------------------*

//头文件

#include \"Timer.h\" //定时器头文件

//TimerInit:定时器初始化函数-----------------------------------------------*

//功 能:定时器初始化,中断一次时间为1/38秒 //参 数:无 //返 回:无 //-------------------------------------------------------------------------* void TimerInit(void) {

//禁止定时器溢出中断,分频因子p=8

//中断一次时间计算:t=n/(fbus/p)=1/38秒,其中n=65535,fbus=19.6608MHZ TSCR2 = 0x03;

TSCR1 = 0x80; //允许主定时器开始计数 }

//TimerUpDate:定时器更新函数-----------------------------------------------*

//功 能:更新显示的时间 //参 数:无 //返 回:无 //-------------------------------------------------------------------------*

* * * * * * * * *

void TimerUpDate(void) {

time[2]++; //秒数加1

if (time[2] != 60) goto isrTIMER1_exit; //秒数未增加到60,转 time[2] = 0; time[1]++; //秒数增加到60,清0,分钟数加1 if (time[1] != 60) goto isrTIMER1_exit; //分钟数未增到60,转 time[1] = 0; time[0]++; //分钟数增加到60,清0,小时数加1 if (time[0] != 24) goto isrTIMER1_exit; //小时数未增到24,转 time[0] = 0; //时数增加到24,清0 isrTIMER1_exit:

TimInterCount = 0; //中断次数清零 }

//[isr.h]中断处理函数头文件------------------------------------------------*

//功 能: // (1)用于声明中断子函数 //-------------------------------------------------------------------------*

#ifndef ISR_H //避免重复定义 #define ISR_H

//头文件

#include \"SCI.h\" //串行通信头文件 #include \"Timer.h\" //定时器头文件 #include \"Type.h\" //类型别名定义

//开关总中断的宏定义

#define ENABLE_INTERRUPTS asm(\"cli\") //开中断 #define DISABLE_INTERRUPTS asm(\"sei\") //关中断 //开关各模块中断的宏定义

//开放或禁止SCI0的接收中断的宏定义

#define EnableSCIReInt SCI0CR2 |= 0x20 //开放接收中断 #define DisableSCIReInt SCI0CR2 &= 0xDF //禁止接收中断 //开放或禁止定时器1溢出中断的宏定义

#define EnableT1OVInt TSCR2 |= 0x80 //开放定时器1溢出中断 #define DisableT1OVInt TSCR2 &= 0x7F //禁止定时器1溢出中断 #endif

//[isr.c]中断处理函数------------------------------------------------------*

//功 能: // (1)定义中断处理函数 //-------------------------------------------------------------------------*

* * * *

//头文件

#include \"isr.h\" //中断处理函数头文件

#pragma CODE_SEG __NEAR_SEG NON_BANKED

//外部变量声明

extern INT8U time[3]; //存放时,分,秒 extern INT8U TimInterCount; //中断次数

//isrTimOver:定时器溢出中断处理程序----------------------------------------*

//功 能:时,分,秒的处理 //-------------------------------------------------------------------------* __interrupt 16 void isrTimOver(void) {

DISABLE_INTERRUPTS; //关总中断

TimInterCount++; //中断次数加一,中断38次为一秒 if (TimInterCount == 38) {

TimerUpDate(); //定时器更新 } TFLG2 = 0x80; //清除定时器溢出标志位 ENABLE_INTERRUPTS; //开总中断 }

//isrRe:SCI0接收中断处理函数-----------------------------------------------*

//功 能:接收3字节基准时分秒放入内存单元Time[0-2] //-------------------------------------------------------------------------* __interrupt 20 void isrRe(void) {

DISABLE_INTERRUPTS; //禁止总中断 SCIReN(3,time); //接收数据 ENABLE_INTERRUPTS; //开放总中断 }

* *

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务