⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 systimer.c

📁 51单片机基于CAN总线通信程序
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
#include "inc/EXT_PUBLIC_VARIABLE.H"
#include "inc/CPUIO_DEF.H"
#include "inc/timer_pwm.h"


#define TIME_BASE_50MS   25
//#define TIME_BASE_100MS  100
#define TIME_BASE_500MS  10
#define F_OSC			  110592
//extern void Dog(void);	
/**************************************************************************
最小时基:    2ms
定时器类1:   定时范围为    2ms - 500ms
定时器类2:   定时范围为    500ms - 128s
**************************************************************************/	
void  Timer0() interrupt 1 using 1
{	uchar i;
    
	static uchar TimeBase50ms  = TIME_BASE_50MS;
//	static uchar TimeBase100ms = TIME_BASE_100MS;
	static uchar TimeBase500ms = TIME_BASE_500MS;
	TL0 = 0Xcc;					//1ms定时中断
	TH0 = 0XF8;

	//IO口数据采样
	bitHuoerRest=HUOER_REST;//霍尔1
	bitHuoerMido=HUOER_MIDO;//霍尔2
	bitHuoerLast=HUOER_LAST;//霍尔3

    if(  bitRstFlg&& (!bitHuoerRest))
    {
         bitRstFlg = 0;
         MOTONOFF  = 1;
         TR1 = 0;
    }
    if(  bitMidoFlg&& (!bitHuoerMido))
    {
         bitMidoFlg = 0;
         MOTONOFF  = 1;
         TR1 = 0;
    }
    if(  bitLastFlg&& (!bitHuoerLast))
    {
         bitLastFlg = 0;
         MOTONOFF  = 1;
         TR1 = 0;
    }

	//处理以2ms为时基的定时器(时间范围为2ms-510ms)
	for( i = 0; i < 4; i++ )
	{
		if( TimerNo[ i ] != 0 )
			if( --( TimerNo[ i ] ) == 0 )
				fTimer |=  0x01 << i;
	}


	if( --TimeBase50ms  != 0 )
		 return;
	TimeBase50ms = TIME_BASE_50MS * ( F_OSC / 110592 );
    //直接处理50毫秒为时基的代码
    		
	if( --TimeBase500ms  != 0 )
		return;
	TimeBase500ms = TIME_BASE_500MS * ( F_OSC / 110592 );

    //直接处理500ms为时基的代码
    HW_WDT = 0;
    HW_WDT = 1;
    _nop_();
    _nop_();
    _nop_();
    HW_WDT = 0;
	//处理以500ms为时基的定时器(500ms-127.5s)
	for( i = 4; i < 8; i++ )
	{
		if( TimerNo[ i ] != 0 )
			if( -- ( TimerNo[ i ] ) == 0 )
				fTimer |=  0x01 << i;
	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -