智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6725|回复: 9
打印 上一主题 下一主题

[软件类] 同时运用51单片机的两个定时器中断对舵机和电机进行控制,高手帮忙

[复制链接]

2

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
301
威望
256
贡献
35
兑换币
0
注册时间
2010-11-27
在线时间
5 小时
跳转到指定楼层
1#
发表于 2011-1-11 00:56:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
}

2

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
301
威望
256
贡献
35
兑换币
0
注册时间
2010-11-27
在线时间
5 小时
2#
 楼主| 发表于 2011-1-12 13:53:53 | 只看该作者
快来高人帮帮忙啊谢谢
回复

使用道具 举报

2

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
301
威望
256
贡献
35
兑换币
0
注册时间
2010-11-27
在线时间
5 小时
3#
 楼主| 发表于 2011-3-4 16:50:48 | 只看该作者
快来人啊
回复

使用道具 举报

1

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
威望
186
贡献
33
兑换币
0
注册时间
2010-2-13
在线时间
10 小时
4#
发表于 2011-3-6 21:21:36 | 只看该作者
你两个中断里面的计数click 一样,有冲突~ ·
回复

使用道具 举报

24

主题

285

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1758

推广达人奖章热心会员奖章优秀会员奖章活跃会员奖章

威望
878
贡献
536
兑换币
10
注册时间
2011-5-12
在线时间
172 小时
5#
发表于 2011-11-19 17:28:36 | 只看该作者
你的两个赋值付错了!
回复

使用道具 举报

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
106
威望
148
贡献
48
兑换币
0
注册时间
2012-3-12
在线时间
7 小时
毕业学校
华南农业大学
6#
发表于 2012-3-22 17:25:36 | 只看该作者
单片机cpu只能同时对一个中断进行处理,是没法让两个定时器并行工作的
回复

使用道具 举报

34

主题

500

帖子

1

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3183

推广达人奖章优秀会员奖章活跃会员奖章

威望
2298
贡献
257
兑换币
597
注册时间
2011-10-2
在线时间
314 小时
7#
发表于 2012-3-23 00:26:11 | 只看该作者
楼主你这是用51模拟10K的PWM吗?建议你把频率改成1K,51吃不消的。老在电机的中断里跑。或者把电机中断里的EA赋值去掉,留舵机中断里的EA应该就行了。
回复

使用道具 举报

45

主题

761

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5023
威望
2903
贡献
558
兑换币
1271
注册时间
2012-10-16
在线时间
781 小时
8#
发表于 2013-1-26 12:32:58 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 16:44 , Processed in 0.092101 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表