搜索
bottom↓
回复: 1

PWM 程序中哪里有问题

[复制链接]

出0入0汤圆

发表于 2012-7-12 12:58:46 | 显示全部楼层 |阅读模式
现在的问题:1、PWM_2输出的舵机控制信号,舵机乱转。定时中断程序里面是不是有问题啊
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ZQ 20000
uint PWM_Z[3];
uint PWM_S[3];
uint PWM_DD;
uchar BC=0,BC1=0,JS; //  路标,第几路PWM、接收数据存储器
sbit PWM_0=P1^0;
sbit PWM_1=P1^1;
sbit PWM_2=P1^2;
sbit led=P1^3;
void ys(uint ss)
{  uchar i,j;
  for(i=ss;i>0;i--)
    for(j=110;j>0;j--);
}
void timer0(void) interrupt 1
{         
        switch(BC)
        {
                case 1:
           if(PWM_Z[0]!=0)
        {
            PWM_0=1;
                           TH0=(65536-PWM_Z[0])/256;   //第一路 输出低电平时长
                           TL0=(65536-PWM_Z[0])%256;
         }
                           break;
                case 2:
            PWM_0=0;
      if(PWM_Z[1]!=0)
           {
            
                PWM_1=1;
               TH0=(65536-PWM_Z[1])/256;   //第二路 输出低电平时长
                           TL0=(65536-PWM_Z[1])%256;
         }
                           break;
                case 3:    PWM_1=0;
              if(PWM_Z[2]!=0)
              {
                PWM_2=1;
                           TH0=(65536-PWM_Z[2])/256;   //第三路 输出低电平时长
                           TL0=(65536-PWM_Z[2])%256;
             }
                           break;
                case 4:    PWM_2=0;
                           TH0=PWM_DD/256;
                           TL0=PWM_DD%256;
         BC=0;
                           break;
               
                }
    BC1=BC;
                BC++;
   
}
void enst (char RXS)
   {  JS=0;
      led=1;
   if(RXS<=8)   
     switch(RXS)
    {
   case 7:      //舵机复位
        PWM_S[2]=1500;
     break;
   case 8:
        PWM_S[0]=5000;
     PWM_S[1]=5000;
     TR0 = 1;//启动定时器0
     ys(200);
     break;
              }
  qidong()
  {     TMOD=0x01;
        TH0=(65536-PWM_Z[2])/256;
        TL0=(65536-PWM_Z[2])%256;
        EA = 1;//打开总中断
        ET0 = 1;//打开定时器0中断
        PT0=1;  //定时器0 设置为最高优先中断
        PX0=0;
  PWM_S[0]=0;
  PWM_S[1]=0;
  PWM_S[2]=0;
  }
void main()
{
   led=0;
   P2=0x0f;
    qidong();
   while(1)
   {     
       if(led==1)
     {   led=0;
           ys(20);
           if(led==1)
           enst(P2);
                      }
  if(BC1==0)
  {  PWM_Z[0]=PWM_S[0];
     PWM_Z[1]=PWM_S[1];
     PWM_Z[2]=PWM_S[2];
     PWM_DD=65536-ZQ+PWM_S[0]+PWM_S[2]+PWM_S[1];
     BC1++;
                     }
   
   }
   
   }

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2012-7-12 13:00:03 | 显示全部楼层
其它两个输出端信号也不稳定
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 18:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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