/*******************************************************************
该文件中放的都是与定时器相关的一些函数
*******************************************************************/
#include <12c5a.H> //STC12C5A 系列单片机
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;
/*******************************************************************
函数名: timer_init()
功能: 定时器初始化函数
备注: 1T
*******************************************************************/
void Timer_init()
{
EA=1;
//开总中断
AUXR|=0x80;
//T0 工作在 1T, T1 工作在 12T
TMOD|= 0x11;
//T0, T1 工作在方式 1,16 位
ET0 = 1;
//开定时器 0 中断
ET1 = 1;
}
/*******************************************************************
函数名: timer0(uint32 us)
功能: 定时器 0 定时函数
参数: 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 开始工作
}
/*******************************************************************
函数名: timer1(int16 us)
功能: 定时器 1 定时函数
参数: us,毫秒。 精确定时。
备注: 晶振 12M, 工作模式 12T
*******************************************************************/
void Timer1(uint32 us)
{
uint32 valu;
valu=0xffff-us;
TH1=valu>>8;
TL1=(valu<<8)>>8;
TR1 = 1;
//T1 开始工作
}
/*******************************************************************
函数名: T0zd(void) interrupt 1
功能: 定时器 0 中断函数
备注: 控制 4 个舵机
*******************************************************************/
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]);// 定时常数为 pwm[2]
flag_vpwm=1;
} break;
case 4:
{
pwm2=0; //pwm2 变低
Timer0(5000-pwm[2]);// 定时常数为 pwm[2]
flag_vpwm=1;
} break;
case 5:
{
pwm3=1; //pwm3 变高
Timer0(pwm[3]);// 定时常数为 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++;
}
/*******************************************************************
函数名: T1zd(void) interrupt 1
功能: 定时器 1 中断函数
备注: 控制夹子舵机
*******************************************************************/
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
|