打印
[疑难问答]

用51单片机定时中断产生占控波控制电机的一些问题!

[复制链接]
1648|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaohuai|  楼主 | 2010-6-10 22:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
鄙人用51单片机编了一个定时中断产生占控波的程序,但是不知为啥不能对电机进行控制,在这请教高手帮忙解惑,在这先谢谢啦。程序如下:
沙发
xiaohuai|  楼主 | 2010-6-10 22:53 | 只看该作者
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define center 1425
uint width,c,d,init,stop;
sfr CCON=0x88;   
sfr CMOD=0x89;
sbit hw1=P0^0;  
sbit hw2=P0^1;
sbit hw3=P0^2;
sbit hw4=P0^3;
sbit b0=P0^4;
sbit lw4=P0^5;
sbit lw3=P0^6;
sbit lw2=P0^7;
sbit lw1=P2^0;
sbit in=P2^7;
sbit p12=P1^1;
sbit p13=P1^0;
//sbit b2=P2^3;
void delay(uchar ms)
{  uchar x,y,z;
    for(x=ms;x>0;x--)
    for(y=200;y>0;y--)
    for(z=250;z>0;z--)
    ;}
void timer0(void) interrupt 1 using 1   /*设置定时器中断产生舵机控制pwm控制变量为 width*/
        {   p12=~p12;         
            if(p12==1)
     c=65536-width;
         else
       c=65536-(10000-width);//周期为10ms,占空比:M=10000/width   
       TH0=(c/256);}
void timer1() interrupt 3 using 1   //控制电机的占空比的波形
         {
           p13=~p13;
            if(p13==1)
             d=65536-init;
            else
            d=65536-(20000-init);
            TH1=d/256;
         TL1=d%256; }
      
void main()
    {
TMOD=0x11;
p12=1;
p13=0;
if(in==1)
{init=0x12;}
      else
    {init=0x18;}
stop=0;
TH0=(65536-width)/256;
TL0=(65536-width)%256;
TH1=(65536-init)/256;   
TL1=(65536-init)%256;
EA=1;
EX0=1;
ET0=1;
TR0=1;
EX1=1;
ET1=1;
TR1=1;
while(1)
     // p13=0;
              {
              void carmain();
               
                  }
     }
void carmain(void)
{
      
          if((hw1||hw2||hw3||hw4)&&(lw1||lw2||lw3||lw4)==1)       //停车程序.....
         {
                           {   stop=stop+1;
            delay(20);
                }
                               if(stop==2)
                                 init=0;
                                 width=center;
                                 delay(2000);
                                 EA=0;
                                 while(1){;}
                                 
                        }
      while(1)   
                           {
         
         if(b0==1)
          {    width=center;  //舵机角度不变
            init=18000;
                                
        }
         else if(lw4==1)
           {       width=center+55;
                   init=18000;
                                                      }
         else if(hw4==1)
            {      width=center-56;
               init=18000;
                                                     }
          else if(lw3==1)
        {   width=center+112;
            init=16000;
                                                         }    //占空比80%
         else if(hw3==1)
        {    width=center-113;
             init=16000;
                                                        }
         else if(lw2==1)
        {  width=center+167;   
           init=16000;
                                                         }  
       else if(hw2==1)
         {   width=center-168;
             init=16000;
                                                         }
       else if(lw1==1)  
          {  width=center+223;
             init=11000;
                                                         }
       else if(hw1==1)
           { width=center-224;
             init=11000;
                                                            }   
}}

使用特权

评论回复
板凳
guita| | 2010-6-11 22:16 | 只看该作者
不懂,帮楼主顶一个

使用特权

评论回复
地板
ershisi| | 2010-6-12 22:31 | 只看该作者
用什么仿真的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

218

帖子

1

粉丝