找回密码
 立即注册
查看: 59|回复: 1

冲哥帮忙看下这个程序怎么改

[复制链接]
  • TA的每日心情
    开心
    昨天 20:44
  • 签到天数: 88 天

    [LV.6]常住居民II

    12

    主题

    42

    回帖

    284

    积分

    中级会员

    积分
    284
    发表于 2024-4-5 14:18:53 | 显示全部楼层 |阅读模式
    #include "COMM/STC32G.h"
    #include "COMM/usb.h"
    #include "sys_init.h"
    #include "pwm1.h"
    #include "stdlib.h"
    #include "string.h"
    #include "stdio.h"


    char *USER_DEVICEDESC=NULL;
    char *USER_PRODUCTDESC=NULL;
    char *USER_STCISPCMD="@STCISP#";
    sbit P32=P3^2;
    sbit P33=P3^3;
    sbit P34=P3^4;
    //u16 a;

    //void Timer0_Init(void)                //1毫秒@24.000MHz
    //{
    //        AUXR &= 0x7F;                        //定时器时钟12T模式
    //        TMOD &= 0xF0;                        //设置定时器模式
    //        TL0 = 0x30;                                //设置定时初始值
    //        TH0 = 0xF8;                                //设置定时初始值
    //        TF0 = 0;                                //清除TF0标志
    //        TR0 = 1;                                //定时器0开始计时
    //        ET0 = 1;                                //使能定时器0中断
    //}



    void main()
    {
            long pwm=0;
            long a=0;
    //        Timer0_Init();
            sys_init();
            usb_init();


            EA=1;
            P2M0=0X00;
            P2M1=0X00;
    //        P3M0=0X00;
    //        P3M1=0X00;
        PWMA_Init();

            while(1)
            {
                    PWMA1_Set(pwm);
                    delay_ms(2);
                    if(DeviceState !=DEVSTATE_CONFIGURED)
                            continue;
                    if(bUsbOutReady)
                    {
                            a=atoi(UsbOutBuffer);

                            if(a>0)
                            {
                                    pwm=pwm+100;
                            }
                            else if(a<0)
                            {
                                    pwm=pwm-100;
                            }
                            else if(a==0)
                                            pwm=0;
                            printf("PWM比较值:%d\r\n",pwm);
                            usb_OUT_done();
                            memset(UsbOutBuffer,0,OutNumber);
                    }
                    if(P32==0)
                    {
                            delay_ms(5);
                            if(P32==0)
                            {
                                    pwm=pwm+500;
                                    while(P32==0);
                            }
                    }
                    if(P33==0)
                    {
                            delay_ms(5);
                            if(P33==0)
                            {
                                    pwm=pwm-500;
                                    while(P33==0);
                            }
                    }
                    if(P34==0)
                    {
                            delay_ms(5);
                            if(P34==0)
                            {
                                    pwm=0;
                                    while(P34==0);
                            }
                    }
                    printf("PWM比较值:%d\r\n",pwm);
            }

           
           
    }
    现在问题是加到32767或减到-32768打印出来的PWM数值就会翻转,正的变负,负的变正

    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 20:44
  • 签到天数: 88 天

    [LV.6]常住居民II

    12

    主题

    42

    回帖

    284

    积分

    中级会员

    积分
    284
     楼主| 发表于 2024-4-5 16:47:50 | 显示全部楼层
    搞好了,把atoi换成atol,打印部分%d改成%ld就好了
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-3 04:19 , Processed in 0.070956 second(s), 32 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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