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

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:461
  • 最近打卡:2025-06-15 20:33:56

14

主题

54

回帖

1524

积分

金牌会员

积分
1524
发表于 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数值就会翻转,正的变负,负的变正

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:461
  • 最近打卡:2025-06-15 20:33:56

14

主题

54

回帖

1524

积分

金牌会员

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 13:02 , Processed in 1.252602 second(s), 50 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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