qq_42230203 2021-04-23 20:58 采纳率: 0%
浏览 15

为什么WFIFI BBS控制不了舵机?


#include "reg52.h"

#define uchar unsigned char
#define uint unsigned int

/***С³µ¿ØÖƶ¨Òå**/
#define DIR P1
#define QIAN 0xaa 
#define HOU 0x55 
#define ZUO 0xa50
#define YOU 0x5a
#define STOP 0x00 

void uart_init();
void Time0_init();
void uart_timer();
void uart_tx_string(uchar *str);
void uart_tx_byte(uchar str);
void Delayms(unsigned int n);
void Delayus(unsigned int n);

sbit SEV_PWM = P0^0;  
sbit SEH_PWM = P0^1;  
 
uchar count = 0;
uchar SEV_count = 15;
uchar SEH_count = 15;

uchar rec;//½ÓÊÕµ½µÄ×Ö½Ú
uchar buff[9]="00000000";//½ÓÊÕµ½µÄÊý¾Ý°ü
uchar flag;//Êý¾Ý°ü¿ªÊ¼½ÓÊÕ±êÖ¾
uchar num; //Êý×éϱê
uchar buf_ready;//½ÓÊÕµ½Êý¾Ý°üÖÃ1

/*********************************************************
º¯ÊýÃû£ºÖ÷º¯Êý
*********************************************************/
void main()
{
        uart_init();
          Time0_init();
          uart_timer();
                DIR = STOP;
        Delayms(1);
          buff[1] = 0x80;
          buff[2] = 0x80;
                buff[3] = 0x80;
                buff[4] = 0x80;
        uart_tx_string("hello    car!\n");
        while(1)
        {
                                if(buf_ready == 1)//½ÓÊÕÒ»×éÊý¾ÝÍê³É±êÖ¾
                                {
                                            buf_ready = 0;
                                }
                                
                            
                if(buff[1]>0x80)
          
        {
            SEV_count++;
            if(SEV_count >= 25)
            {
                SEV_count = 25;
            }
            count = 0; 
            
        }   
        else if(buff[1]<0x80)
        {
            SEV_count--;
            if(SEV_count <= 5)
            {
                SEV_count = 5;
            }
            count = 0;
           
        }   
        else if (buff[2]>0x80)
        {
            SEH_count++;
            if(SEH_count >= 25)
            {
                SEH_count = 25; 
            }
            count = 0;
            
        }   
        else if(buff[2]<0x80)
        {
            SEH_count--;
            if(SEH_count <= 5) 
            {
                SEH_count = 5;
            }
            count = 0;
        }
        else 
                
            SEH_count = 15;
            SEV_count = 15;
            count = 0;
            
                        
                        
                                
                              if(buff[3]>0xb0){DIR = QIAN;Delayus(buff[3]-0xa0);DIR = STOP;Delayus(0x20);}//buff[3]¿ØÖÆÇ°ºó
                                else if(buff[3]<0x40){DIR = HOU;Delayus(0x60-buff[3]);DIR = STOP;Delayus(0x20);}//ͨ¹ýÑÓʱ¿ØÖÆËÙ¶È
                                
                                else if(buff[4]>0xd0){DIR = YOU;Delayus(20);DIR = STOP;Delayus(5);}//buff[4]¿ØÖÆ×óÓÒ
                                else if(buff[4]<0x20){DIR = ZUO;Delayus(20);DIR = STOP;Delayus(5);}
                                else DIR = STOP;
                            }
        }


/*********************************************************
º¯ÊýÃû£º´®¿ÚÖжÏ
*********************************************************/
void uart_timer() interrupt 4
{
        if(RI == 0)
                {
                    return;
                }
         {
                     ES = 0;
                     RI = 0;                     
                rec=SBUF;
                                if(rec==0x66 && flag==0)//Êý¾ÝÍ·
                                {
                                            flag = 1;  
                                            num=0;
                                            buff[0] = rec;
                                }
                                else if(flag == 1)//¿ªÊ¼½ÓÊÕÊý¾Ý°übuff[8]
                                {
                                    
                                            num++;
                                            buff[num] = rec;
                                            if(num==7 && buff[7]==0x99)//½ÓÊÕµ½Êý¾Ýβ
                                            {
                                                    buf_ready = 1;
                                                    flag = 0;
                                                    num = 0;
                                            }
                                            else if(num == 7)//½ÓÊÕ´íÎó
                                            {
                                                    flag = 0;
                                                    num = 0;
                                            }
                            
                                }
                 }
    ES = 1;
}
/*********************************************************
º¯ÊýÃû£º´®¿Ú³õʼ»¯
²¨ÌØÂÊ£º9600
¾§Õñ£º11.059M
*********************************************************/
void uart_init()
{
          IP = 0x08;
          TMOD &= 0x00;
          PCON &= 0x7F;
            TMOD |= 0x21;
                TH1=0xfd; //9600
                TL1=0xfd;
                PCON |= 0x80 ;//9600
                SCON=0x50;
          ET1=0;
                TR1=1; //start Timer1
                EA=1;
                ES=1;
        TH0 = 0xff;   
        TL0 = 0xa4;

        ET0 = 1;      
        TR0 = 1;     
}

void Time0_init() interrupt 1
{
    TR0 = 0;      
    TH0 = 0xff;   
    TL0 = 0xa4;
    
    if(count <= SEH_count) 
    {
       
        SEH_PWM = 1;
    }
    else
    {
        SEH_PWM = 0;
    }
    
    if(count <= SEV_count) 
    {
        SEV_PWM = 1;
    }
    else
    {
        SEV_PWM = 0;
    }
    count++;
    if (count >= 200) 
    {
        count = 0;
    }
    TR0 = 1; 

}
/*********************************************************
º¯ÊýÃû£º´®¿Ú·¢ËÍÒ»¸ö×Ö½Ú
*********************************************************/
void uart_tx_byte(uchar str)
{
        SBUF=str;
        while(!TI);
                Delayms(2);
}

/*********************************************************
º¯ÊýÃû£º´®¿Ú·¢ËÍÒ»¸ö×Ö·û´®
*********************************************************/
void uart_tx_string(uchar *str)
{
        while(*str!='\0')
        {
                uart_tx_byte(*str++);
                Delayms(2);
        }
}

/*********************************************************
º¯ÊýÃû£ºÑÓʱº¯Êý
*********************************************************/
void Delayms(unsigned int n)
{
        unsigned int i,j;
        for(j=n;j>0;j--)
                for(i=112;i>0;i--);
}

void Delayus(unsigned int n)
{
        while(n--);
}

  • 写回答

2条回答 默认 最新

  • 有问必答小助手 2021-04-26 14:26
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

    ​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误