标题:
51单片机用定时器控制舵机程序问题,想让舵机在两个角度循环
[打印本页]
作者:
锦灯笼
时间:
2019-10-20 15:28
标题:
51单片机用定时器控制舵机程序问题,想让舵机在两个角度循环
各位大神,请教一下我用定时器中断产生pwm方波控制舵机,想让舵机在两个角度循环然后用了两个定时器,但是定时器1死活不管用,但是定时器0是有用的,是不是我的代码有问题啊
代码如下,我现在是把定时器0先放在一边然后用定时器1的,就是没有反应
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit P1_0=P1^0; //PWM信号输出端
void Init_t0(void); //子函数声明
void Init_t1(void);
void delay(unsigned int x) //延时 x ms
{
unsigned int i,j;
for(i=x;i>0;i--);
for(j=110;j>0;j--);
}
void main()
{
P1_0=0; //置PWM初始输出为高电平
//Init_t0();
// TR0=1;
// while(1); //等待中断
// TR0=0;
Init_t1();
TR1=1;
while(1);
// TR1=0;
}
void Init_t0(void)
{
TMOD=0x01; //设置定时器0工作方式1后面运行TR位启动
TH0=(65536-1500)/256;
TL0=(65536-1500)%256; //1.5ms 的高电平
EA=1;
ET0=1;
// TR0=1;
}
void Init_t1(void)
{
TMOD=0x10; //设置定时器1工作方式1后面运行TR位启动
TH1=(65536-1500)/256;
TL1=(65536-1500)%256; //1.5ms 的高电平
EA=1;
ET1=1;
// TR0=1;
}
/*******************中断服务程序**********************/
void PWM0() interrupt 1 //定时器0中断,产生方波
{
if(P1_0==1) //如果上个电平为1,则下个低电平的时间为18.5ms
{
TH0=(65536-18000)/256; //试过t1=1500;t0=20000-t1;但舵机老是吱吱的响,推测:运算耗时.
TL0=(65536-18000)%256; //1800是抓取
}
else //如果上个电平为0,则下个高电平为1.5ms
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
}
P1_0=~P1_0;
}
void PWM1() interrupt 2 //定时器0中断,产生方波
{
if(P1_0==1) //如果上个电平为1,则下个低电平的时间为18.5ms
{
TH1=(65536-18000)/256; //试过t1=1500;t0=20000-t1;但舵机老是吱吱的响,推测:运算耗时.
TL1=(65536-18000)%256;
}
else //如果上个电平为0,则下个高电平为1.5ms
{
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
}
P1_0=~P1_0;
}
作者:
m182892
时间:
2019-10-20 16:23
仔细看一下芯片规格书,有没有定时器1。
作者:
丶念
时间:
2019-10-20 18:28
改成void PWM1() interrupt 3呀
作者:
锦灯笼
时间:
2019-10-20 18:31
m182892 发表于 2019-10-20 16:23
仔细看一下芯片规格书,有没有定时器1。
是stc89c52,有的吧
作者:
锦灯笼
时间:
2019-10-21 15:56
丶念 发表于 2019-10-20 18:28
改成void PWM1() interrupt 3呀
好的,这个的确错了,谢谢!!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1