发 帖  
【四旋翼飞行器】76小时吃透四轴算法!史上最强软硬结合实战项目,👉戳此立抢👈
[问答] 这段程序问题出现在哪,还请指教?
249 51单片机
分享
#include "reg51.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

//-----------------------------------------------

/* define constants */
#define FOSC 11059200L

#define T1MS (65536-FOSC/12/1000)   //1ms timer calculation method in 12T mode

/* define SFR */
sbit TEST_LED = P1^0;               //work LED, flash once per second
sbit pwm1 = P1^1;
sbit pwm2 = P1^2;
sbit pwm3 = P1^3;
sbit pwm4 = P1^4;
sbit k1=P1^5;
sbit k2=P1^6;
sbit k3=P1^7;
sbit k4=P2^0;
/* define variables */
WORD count;                         //1000 times counter
WORD a,b,c;
WORD time;
WORD p1,p2,p3,p4;
//-----------------------------------------------

/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
    TL0 = T1MS;                     //reload timer0 low byte
    TH0 = T1MS >> 8;                //reload timer0 high byte
    if (count++ == 100)               //1ms * 1000 -> 1s
    {
        count = 0;               //reset counter
        TEST_LED = ! TEST_LED;      //work LED flash
    }
                if (count<=p1)
                {
                  pwm1=0;               
                }
                else{pwm1=1;}
         if (count<=p2)
                {
                  pwm2=0;               
                }
                else{pwm2=1;}
                if (count<=p3)
                {
                  pwm3=0;        
                }
                else{pwm3=1;}
                if (count<=p4)
                {
                  pwm4=0;               
                }
                else{pwm4=1;}
//-----------------------------------------------

/* main program */
void main()
{
    while (1){
        if (k1==0)
                {
                        for(a=0;a++;a<10000)
                        {
                        if(a<5000)
                        {
                                if(k1==1)
                                {
                                  for(b=0;b++;b<10000)
                                        {
                                           if(k1==0)
                                                 {
                                                         p1=80;
                                                         p2=60;
                                                         p3=90;
                                                         p4=80;
                                                         TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
               TL0 = T1MS;                     //initial timer0 low byte
               TH0 = T1MS >> 8;                //initial timer0 high byte
               TR0 = 1;                        //timer0 start running
                                                         ET0 = 1;                        //enable timer0 interrupt
                                                         EA = 1;                         //open global interrupt switch
                                                         count = 0;                                                         //initial counter
                                                   b=10000;
                                                         a=10000;
                                                 }
                                                 else
                                                 {
                                                 a=10000;
                                                 b=10000;
                                                 }
                                        }
                                }
                        }
                        if(a>4999)
                        {
                                if(k3==0&&k1==0)
                                {
                                p1=100;
                                p2=60;
                                p3=90;
                                p4=80;
                                TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                TL0 = T1MS;                     //initial timer0 low byte
                                TH0 = T1MS >> 8;                //initial timer0 high byte
                                TR0 = 1;                        //timer0 start running
                                ET0 = 1;                        //enable timer0 interrupt
                                EA = 1;                         //open global interrupt switch
                                count = 0;                      //initial counter
                                }
                                else
                                {
                                        if(k1==0)
                                        {
                                        p1=100;
                                        p2=80;
                                        p3=80;
                                        p4=100;
                                        TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                        TL0 = T1MS;                     //initial timer0 low byte
                                        TH0 = T1MS >> 8;                //initial timer0 high byte
                                        TR0 = 1;                        //timer0 start running
                                        ET0 = 1;                        //enable timer0 interrupt
                                        EA = 1;                         //open global interrupt switch
                                        count = 0;                      //initial counter
                                        }
                                }
                        }

                        }
                        if (k3==0)
                        {
                                p1=100;
                                p2=0;
                                p3=0;
                          p4=100;
                                TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                TL0 = T1MS;                     //initial timer0 low byte
                                TH0 = T1MS >> 8;                //initial timer0 high byte
                                TR0 = 1;                        //timer0 start running
                                ET0 = 1;                        //enable timer0 interrupt
                                EA = 1;                         //open global interrupt switch
                                count = 0;                      //initial counter
                        }
                        else
                        {
                        p1=100;
                        p2=0;
                        p3=0;
                        p4=0;TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                        TL0 = T1MS;                     //initial timer0 low byte
                        TH0 = T1MS >> 8;                //initial timer0 high byte
                        TR0 = 1;                        //timer0 start running
                        ET0 = 1;                        //enable timer0 interrupt
                        EA = 1;                         //open global interrupt switch
                        count = 0;                      //initial counter
                        }
                }
                else
                {
                        if (k2==0)
                        {
                                p1=50;
                                p2=100;
                                p3=0;
                                p4=0;
                                TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                TL0 = T1MS;                     //initial timer0 low byte
                                TH0 = T1MS >> 8;                //initial timer0 high byte
                                TR0 = 1;                        //timer0 start running
                                ET0 = 1;                        //enable timer0 interrupt
                                EA = 1;                         //open global interrupt switch
                                count = 0;                      //initial counter
                        }
                        else
                        {
                                if (k3==0)
                                {
                                  p1=0;
                                        p1=40;
                                        p1=100;
                                        p1=0;
                                        TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                        TL0 = T1MS;                     //initial timer0 low byte
                                        TH0 = T1MS >> 8;                //initial timer0 high byte
                                        TR0 = 1;                        //timer0 start running
                                        ET0 = 1;                        //enable timer0 interrupt
                                        EA = 1;                         //open global interrupt switch
                                        count = 0;                      //initial counter
                          }
                                else
                                {
                                        if (k4==0)
                                        {
                                          p1=0;
                                                p2=30;
                                                p3=0;
                                                p4=100;
                                                TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                                TL0 = T1MS;                     //initial timer0 low byte
                                                TH0 = T1MS >> 8;                //initial timer0 high byte
                                                TR0 = 1;                        //timer0 start running
                                                ET0 = 1;                        //enable timer0 interrupt
                                                EA = 1;                         //open global interrupt switch
                                                count = 0;                      //initial counter
                                        }
                                }
                        }
                }
  }
}       //loop
}

0
奖励7积分
2019-2-9 21:23:20   评论 分享淘帖 邀请回答
2个回答
2019-2-11 14:02:01 评论

举报

问题出在hanjia.c你这个是main.c
2019-2-11 15:22:36 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
课程
    关闭

    站长推荐 上一条 /8 下一条

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