中级会员
- 积分
- 301
- 威望
- 256
- 贡献
- 35
- 兑换币
- 0
- 注册时间
- 2010-11-27
- 在线时间
- 5 小时
|
1贡献
同时运用51单片机的两个定时器中断对舵机和电机进行控制,就是产生两个不同占空比的方波,分别对舵机和电机进行控制,为什么运行之后舵机老是摇摆不定呢?感觉错误在于中断程序的优先级 但是怎么改呢 谢谢啦 很急
我的程序如下,
#include<regx51.h>
#define uchar unsigned char
#define V_TH0 0XFF
#define V_TL0 0XB0 //记一次数为0.1ms
#define V_TH1 (65535-10000)>>8 //取高八位d8
#define V_TL1 (65535-10000)&0XFF //取低八位ef,记一次数为10ms
#define V_TMOD 0x11
#define pwm0max 200 //定义周期
#define pwm1max 200 //定义周期
sbit pwmout0=P3^6;//定义输出管角,控制舵机信号
sbit pwmout1=P3^7;//控制电机信号
sbit p00=P0^0;
void open0(void);
void open1(void);
void Delay(void);
uchar pwm0;
uchar pwm1;
uchar click=0;//定义宏观变量
void main(void)
{
open0();
while(1)
{ if(p00==0)
pwm0=15,pwm1=30;
else
pwm0=20,pwm1=30;
}
}
void open0(void)
{
TMOD=V_TMOD;//工作方式选择
TH0=V_TH0;
TL0=V_TL0;
TH1=V_TH1;
TL1=V_TL1;
ET0=1;//开定时器0中断
TR0=1;//开定时器0
ET1=1;//开定时器1中断
TR1=1;//开定时器1
EA=1;//开总中断
p00=0;
pwm0=15;
pwm1=30;
}
void open1(void)
{
TMOD=V_TMOD; //0X
TH0=V_TH0;
TL0=V_TL0;
EA=1;//开总中断
ET1=1;//开定时器1中断
TR1=1;//开定时器1
}
void Delay(void)
{
unsigned int TemCyc=1000;
while(TemCyc--);
}
/*中断服务函数*/
void timer0(void) interrupt 1
{
EA=0;
TH0=V_TH0;
TL0=V_TL0;
click++;
if(click>=pwm0max)
click=0;
if(click<pwm0)
pwmout0=1;
else
pwmout0=0;
EA=1;
}
void timer1(void) interrupt 3
{
EA=0;
TH0=V_TH0;
TL0=V_TL0;
click++;
if(click>=pwm1max)
click=0;
if(click<pwm1)
pwmout1=1;
else
pwmout1=0;
EA=1;
} |
|