📄 timer2.c
字号:
//*********************************************************
// 项 目: 通用控制器-V1.0
// 文件名: Timer2.C
// 描 述: 定时器2中断服务程序
//*********************************************************
//===============================================
#include "main.h" //头文件
#include "Timer2.h"
#include "MFRC522.h"
#include "Adc.h"
//===============================================
//***********************************************
//变量定义
//***********************************************
UCHAR iosts0;
UCHAR bdata iosts1; //20mS级计数
sbit IO3 =iosts1^3;
sbit IO2 =iosts1^2;
sbit IO1 =iosts1^1;
sbit IO0 =iosts1^0;
//
UINT Count20ms;
UCHAR Count1ms;
//
extern UCHAR volatile Temp;
extern UCHAR data Sio_Lth; //数据长度
extern UCHAR idata ComTBufHead;
extern UINT SOFTWDT;
extern UINT volatile event_word;
UCHAR xdata tx_buf[TX_PLOAD_WIDTH];
extern UCHAR xdata ComTBuf[Com0TBuf_len];
//***********************************************
//函数开始
/***************************************
/***************************************
T3 定时器初始化
/***************************************/
void Timer3_Init(void) //T3 20毫秒定时
{ //T3MH,T3ML,T2MH,T2ML,T1M,T0M,SCA1,SCA0
CKCON &= 0x3F; // 0 0 X X X X SYSCK/12
TMR3RLH = (-SYSCLK/12/50)>>8; //
TMR3RLL = (-SYSCLK/12/50); //
//TF3H,TF3L,TF3LEN,TF3CEN,T3SPT,TR3,-,T3XCLK
TMR3CN = 0X04; //TR3=1
}
/**********************************************
20毫秒定时中断
/**********************************************/
void Timer3_INT(void) interrupt 14 //
{
static UINT count1,tmp;
TMR3CN &= 0X3F;
count1++; //20mS+1
tmp = count1;
if (!(tmp % 25)) //20*10=200ms
{event_word |= EVENT_CARD; } //寻卡
if (!(tmp % 25))
{event_word |= EVENT_TEMP; } //0。5S事件
event_word |= EVENT_STS1; //20mS事件
//
PCA0CPH2 =0x55; //写PCA0CPH2任意值清看门狗
}
//**********************************************
//T0 初始化(1毫秒中断)
//------------------------------
void Timer0_Init(void)
{ //CKCON=T3H,T3L,T2H,T2L,T1,T0,SCA1,SCA0
CKCON &= 0xF8; // T0M=0,SCA1,0=00,T0CK=SYSCK/12
TMOD |= 0x01; // T0 方式1,16位
TH0 = (-SYSCLK/12/2700)>>8;
TL0 = (-SYSCLK/12/2700);
TR0 = 1;
ET0 = 1; //中断开放
}
//**********************************************
//T0 1毫秒中断:用于精确时间延时
//------------------------------
void Timer0_ISR (void) interrupt 1 //1ms
{
TH0 = (-SYSCLK/12/1000)>>8;
TL0 = (-SYSCLK/12/1000);
if (Count1ms)
{
Count1ms--;
if (BEEP) BP = 1;
}
else
{ BP = 0; BEEP = 0;}
}
//====================================================
//ms级T0中断精确延时程序
//====================================================
void Delay1ms(unsigned char T)
{
Count1ms = T;
while (Count1ms);
}
/*************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -