📄 timer2bk
字号:
//*********************************************************
// 项 目: 通用控制器-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];
//***********************************************
//函数开始
/***************************************
T2 定时器初始化
/***************************************/
void Timer2_Init(void) //T2 20毫秒定时
{ //T3MH,T3ML,T2MH,T2ML,T1M,T0M,SCA1,SCA0
CKCON &= 0xCF; // X X 0 0 X X SYSCK/12
TMR2CN = 04; //TF2H,TF2L,TF2LEN,TF2CEN,T2SPT,TR2,-,T2XCLK
//
TMR2RLH = (-SYSCLK/12/50)>>8; //
TMR2RLL = (-SYSCLK/12/50); //
TR2 = 1;
//ET2 = 1;
}
/**********************************************
20毫秒定时中断
/**********************************************/
void Timer2_INT(void) interrupt 5 //
{
static UINT count1,tmp;
TF2H =0;
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任意值清看门狗
// Temp_Conver();
// Temp = T_Compute();
}
//**********************************************
//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/1000)>>8;
TL0 = (-SYSCLK/12/1000);
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--;
// Count1msInc++;
/*
if (Count10ms)
Count10ms--;
else //Count10ms=0
{
Count10ms=10; //10ms
if (Count1s) Count1s--;
else{ //Count1s=0
Count1s=100; //1s
TSecond++;
if(TSecond>=60)
{
TSecond=0; //1min
TMinute++;
if (TMinute==60) TMinute=0;
}
}
}
*/
}
//====================================================
//ms级T0中断精确延时程序
//====================================================
void Delay1ms(unsigned char T)
{
Count1ms = T;
while (Count1ms);
}
/**************************************************
//us级延时程序
/**************************************************/
/*void Delay10us(unsigned char t)
{
UINT ta; //EA=0,SYSCLK=24.5M/2
//时仪器测试
ta = t*12; //T = 12us(精确)
while (ta--);
}*/
/**************************************************
功能: 输入状态时间扫描;
描述:STS1,STS2输入状态变化时:生成格式数据包并发送
/**************************************************/
/*void CheckEvents(void)
{
// UCHAR aa,i;
if (Count20ms)
{Count20ms--; return; }
iosts1 = P1;
IO2 = STS2; //
iosts1 &=0x07;
if (iosts1 != iosts0)
{
Count20ms = 100;
iosts0 = iosts1;
// LED1 = IO0;
// LED2 = IO2;
tx_buf[0] = 0xAA; //包头
tx_buf[1] = 0x08; //包长度
tx_buf[2] = 0x81; //目标地址
tx_buf[3] = 0x92; //源地址
tx_buf[4] = 0x03; //'03',前端事件包
tx_buf[5] = 0x20; //命令
tx_buf[6] = iosts1; //口状态
tx_buf[7] = 0XBB; //包尾
//
// TX_Mode(); //发送事件包到无线口
//
//tx_to_com(); //发送事件包到本板COM口
//SPI_RW_Reg(WRITE_REG+STATUS,SPI_Read(READ_REG+STATUS)); // 清 TX_DS
}
}*/
/****************************************
tx_buf数据传送到ComTBuf
/****************************************
void tx_to_com(void)
{
UCHAR aa,i;
aa = tx_buf[1];
for(i=0;i<aa;i++) //TX_LENTH=32
ComTBuf[i] = tx_buf[i]; //清SPI发送缓存
ComTBufHead=1;
Sio_Lth = ComTBuf[1];
SBUF0 = ComTBuf[0]; //启动串口发送
}
/*************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -