/*******************************************************************
該文件中放的都是與定時器相關(guān)的一些函數(shù)
*******************************************************************/
#include <12c5a.H> //STC12C5A 系列單片機(jī)
extern uint16 pwm[];
extern uint8 flag_vpwm;
extern uint16 pwmj;
sbit pwm3=P0^3;
sbit pwm2=P0^2;
sbit pwm1=P0^1;
sbit pwmn=P0^0;
/*******************************************************************
函數(shù)名: timer_init()
功能: 定時器初始化函數(shù)
備注: 1T
*******************************************************************/
void Timer_init()
{
EA=1;
//開總中斷
AUXR|=0x80;
//T0 工作在 1T, T1 工作在 12T
TMOD|= 0x11;
//T0, T1 工作在方式 1,16 位
ET0 = 1;
//開定時器 0 中斷
ET1 = 1;
}
/*******************************************************************
函數(shù)名: timer0(uint32 us)
功能: 定時器 0 定時函數(shù)
參數(shù): us,毫秒。 精確定時。
備注: 晶振 12M, 工作模式 1T
*******************************************************************/
void Timer0(uint32 us)
{
uint32 valu;
valu=us*12;
//工作在 1T, 最大定時時間 2700us
valu=valu;
valu=0xffff-valu;
TH0=valu>>8;
TL0=(valu<<8)>>8;
TR0 = 1;
//T0 開始工作
}
/*******************************************************************
函數(shù)名: timer1(int16 us)
功能: 定時器 1 定時函數(shù)
參數(shù): us,毫秒。 精確定時。
備注: 晶振 12M, 工作模式 12T
*******************************************************************/
void Timer1(uint32 us)
{
uint32 valu;
valu=0xffff-us;
TH1=valu>>8;
TL1=(valu<<8)>>8;
TR1 = 1;
//T1 開始工作
}
/*******************************************************************
函數(shù)名: T0zd(void) interrupt 1
功能: 定時器 0 中斷函數(shù)
備注: 控制 4 個舵機(jī)
*******************************************************************/
void T0zd(void) interrupt 1
{
static uint8 i=1;
switch(i)
{
case 1:
{
pwm1=1;
Timer0(pwm[1]); //定時
flag_vpwm=1;
} break;
case 2:
{
pwm1=0;
//pwm1 變低
Timer0(5000-pwm[1]);// 定時
flag_vpwm=1;
} break;
case 3:
{
pwm2=1; //pwm2 變高
Timer0(pwm[2]);// 定時常數(shù)為 pwm[2]
flag_vpwm=1;
} break;
case 4:
{
pwm2=0; //pwm2 變低
Timer0(5000-pwm[2]);// 定時常數(shù)為 pwm[2]
flag_vpwm=1;
} break;
case 5:
{
pwm3=1; //pwm3 變高
Timer0(pwm[3]);// 定時常數(shù)為 pwm[3]
flag_vpwm=1;
} break;
case 6:
{
pwm3=0; //pwm3 變低
Timer0(5000-pwm[3]);// 定時
flag_vpwm=1;
} break;
case 7:
{
pwm4=1; //pwm4 變高
Timer0(pwm[4]);// 定時
flag_vpwm=1;
} break;
case 8:
{
pwm4=0; //pwm4 變低
Timer0(5000-pwm[4]);// 定時
flag_vpwm=1;
} break;
default:break;
}
i++;
}
/*******************************************************************
函數(shù)名: T1zd(void) interrupt 1
功能: 定時器 1 中斷函數(shù)
備注: 控制夾子舵機(jī)
*******************************************************************/
void T1zd(void) interrupt 3
{
static uint8 i=1;
switch(i)
//
{
case 1:
{
pwmn=1;
Timer1(pwmj);
//定時
} break;
case 2:
{
pwmn=0;
//pwm 變低
Timer0(20000-pwmj);
//定時
i=0;
} break;
default:break;
}
i++;
}
#ifndef TIMER
#define TIMER
extern Timer_init();
extern Timer0(uint32 us);
extern Timer1(uint32 us);
#endif
|