模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

1663查看 | 13回复

[DIY交流] STC15W104的程序能直接写进STC15F104E吗???写进去没效果

[复制链接]
发表于 2021-6-23 19:19:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
买错芯片了,求大神指导哈,程序如下,多谢



#include<reg51.h>
#include<intrins.h>  
#define u8 unsigned char
#define u16 unsigned int

//----------------------------------------------------------
//STC15¼Ä´æÆ÷ÉùÃ÷

sfr P3M1=0xb1;
sfr P3M0=0xb2;
sfr AUXR=0x8e;
sfr T2H=0xd6;
sfr T2L=0xd7;
sfr IE2=0xaf;


//----------------------------------------------------------
//Òý½Å¶¨Òå

sbit A1=P3^0;
sbit A2=P3^1;
sbit B1=P3^2;
sbit B2=P3^3;

sbit IN1=P3^5;
sbit IN2=P3^4;


//----------------------------------------------------------
//Èí¼þPWM

u8 PWM_count;
u8 PWM_duty_A;
u8 PWM_duty_B;

u8 PWM_value;

//----------------------------------------------------------
//¿ØÖÆ

u16 timer1,timer2;

u16 pulse;

u16 IN1_H_time,IN2_H_time;
bit IN1_last,IN2_last;

bit get_pulse1,get_pulse2;
bit get_new;

int mix_x,mix_y;

bit Direction_A,Direction_B;


int pulse1=150,pulse2=150;
u8 lose_A=20,lose_B=20;  //¸üУºÉϵçĬÈÏ´¦ÓÚʧ¿Ø״̬£¬·ÀÖ¹µÚÒ»´ÎÐźżì²â´íÎó


//----------------------------------------------------------
//»ì¿ØÉèÖÃ
bit mix_en=0;  //¹Ø±Õ»ì¿Ø£¬Á½Â·¶ÀÁ¢
//bit mix_en=1;  //¿ªÆô»ì¿Ø






void delay_ms(u16 ms)                //STC15 @12.000MHz
{
        u16 i;

        do{
            i = 12000000 / 13022;
               
                        _nop_(),_nop_(),_nop_();
                  while(--i)        ;   
     }while(--ms);       
}

void delay_us(u8 us)                //@12.000MHz
{

        while(--us)
                _nop_(),_nop_();

}

void shock( u8 n)    //Õ𶯷¢Éù
{
        u8 i;
        for(i=0;i<250;i++)
        {
                A1=0,A2=0;
                B1=0,B2=0;               
                delay_us(n);
               
                A1=1;B1=1;
                delay_us(n);
               
                A1=0;B1=0;               
                delay_us(n);
                               
                A2=1;B2=1;
                delay_us(n);       
        }
        A1=0,A2=0;
        B1=0,B2=0;
        delay_us(n);
}


main()
{
       
        P3=0xF0;              //Éϵç¹Ø±ÕÊä³ö

        P3M0=0x0F;      //IOÍÆÍìÊä³ö
       
        delay_ms(400);
       
        shock(200);        //ÐÂÔö ÉϵçÒôÀÖ£¬±íÃ÷Õý³£¹¤×÷
        shock(150);
        shock(100);
       
       
        IE=0x80;
        IE2=0x04;
        T2L=0xF6;T2H=0xFF;  //¿ªÆôÈí¼þPWM
        AUXR=0x10;
       
       
       
        while(1)
        {
               
                if(get_pulse1)
                {
                        get_pulse1=0;
                       
                        pulse =IN1_H_time;                       
                        IN1_H_time=0;
                       
                        if(pulse >85 && pulse <215) //Ö»ÊÜÀíºÏÀí¶æÁ¿·¶Î§
                        {
                                timer1=0;
                               
                                if(pulse <105)pulse =105;
                                if(pulse >195)pulse =195;
                               
                                if(lose_A)lose_A--;  //¶ªÐźÅÖØÁ¬±£»¤
                                else get_new=1,pulse1=pulse;
                        }
                       
                }
               
                if(get_pulse2)
                {
                        get_pulse2=0;
                       
                        pulse =IN2_H_time;                       
                        IN2_H_time=0;
                       
                        if(pulse >85 && pulse <215)
                        {
                                timer2=0;
                               
                                if(pulse <105)pulse =105;
                                if(pulse >195)pulse =195;                //¶æÁ¿ÏÞ·ù 1050~1950       

                                if(lose_B)lose_B--;  //¶ªÐźÅÖØÁ¬±£»¤
                                else get_new=1,pulse2=pulse;
                        }                       
                       
                }
               
               
                if(get_new)
                {
                        get_new=0;
                       
                        if(mix_en)  //Òý½Å¸ßµçƽ ʹÄÜ»ì¿Ø
                        {
                                if(pulse2>152 || pulse2<148) //ͨµÀ2Ϊ²îÏòÊäÈ룬ÖÐλËÀÇø
                                {
                                        mix_x=pulse1 + pulse2 -150;  
                                        mix_y=pulse1 - pulse2 +150;       
                                }
                                else
                                {
                                        mix_x=pulse1;   //ͨµÀ1ΪͬÏòÊäÈ룬
                                        mix_y=pulse1;
                                }
                                                       
                        }
                        else        //Òý½ÅµÍµçƽ Á½Í¨µÀ¶ÀÁ¢
                        {
                                mix_x=pulse1;
                                mix_y=pulse2;                               
                        }
                       
                       
                        if(mix_x<105)mix_x=105;
                        if(mix_x>195)mix_x=195;
                       
                        if(mix_y<105)mix_y=105;
                        if(mix_y>195)mix_y=195;
                       
                       
                       
                        if(mix_x>=153 )       //Õýת
                        {
                                PWM_duty_A= (mix_x-151)*100/44; //²¹³¥Ä¦²ÁÁ¦
                                Direction_A=0;
                        }
                        else if(mix_x<=147 )  //·´×ª
                        {
                                PWM_duty_A= (149-mix_x)*100/44;
                                Direction_A=1;
                        }
                        else                  //Í£Ö¹
                        {
                                PWM_duty_A=0;
                        }
                       
                        if(mix_y>=153 )       //Õýת
                        {
                                PWM_duty_B= (mix_y-151)*100/44; //²¹³¥Ä¦²ÁÁ¦
                                Direction_B=0;
                        }
                        else if(mix_y<=147 )  //·´×ª
                        {
                                PWM_duty_B= (149-mix_y)*100/44;
                                Direction_B=1;
                        }
                        else                  //Í£Ö¹
                        {
                                PWM_duty_B=0;
                        }
                       
                }
               
               
        }
       
}


void T2_isr()interrupt 12//Èí¼þPWM 1Khz
{

       
        if(IN1)                                        //ͨµÀ1Âö¿í¼ì²â
        {
                IN1_last=1;
                IN1_H_time++;
        }
        else
        {
                if(IN1_last)get_pulse1=1;
                IN1_last=0;
        }
       
        if(IN2)                                        //ͨµÀ2Âö¿í¼ì²â
        {
                IN2_last=1;
                IN2_H_time++;
        }
        else
        {
                if(IN2_last)get_pulse2=1;
                IN2_last=0;
        }       
       
       
        PWM_count++;
        if(PWM_count==100) //100¼¶·Ö±æÂÊ
        {
                PWM_count=0;
               
                timer1++;
                if(timer1>500)//0.5SÎÞÐźű£»¤
                {
                        timer1=0; lose_A=30;
                       
                        pulse1=150,get_new=1;                       
                }
               
                timer2++;
                if(timer2>500)//0.5SÎÞÐźű£»¤
                {
                        timer2=0; lose_B=30;
                       
                        pulse2=150,get_new=1;                       
                }
        }
       
       
        if(PWM_duty_A > PWM_count)
        {
                if(Direction_A)A1=1;
                else A2=1;
        }
        else A1=0,A2=0;
       
        if(PWM_duty_B > PWM_count)
        {
                if(Direction_B)B1=1;
                else B2=1;
        }
        else B1=0,B2=0;

       
}

 楼主| 发表于 2021-6-23 23:08:11 | 显示全部楼层
本来应该是用STC15W104芯片的,买成了STC15F104E还买了十个。。。求大神帮我看看怎么修改程序。
回复 支持 反对

使用道具 举报

发表于 2021-6-24 05:47:18 | 显示全部楼层
应该可以吧,,,,,,,,,,,,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-24 08:21:50 来自手机 | 显示全部楼层
wszyz 发表于 2021-6-24 05:47
应该可以吧,,,,,,,,,,,,

不行,写到15f104e不能运行
回复 支持 反对

使用道具 举报

发表于 2021-6-24 15:55:15 | 显示全部楼层
重新定义各管脚及用到的寄存器,应该能用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-24 18:54:15 来自手机 | 显示全部楼层
zjs500217 发表于 2021-6-24 15:55
重新定义各管脚及用到的寄存器,应该能用

怎么修改?你知道吗?
回复 支持 反对

使用道具 举报

发表于 2021-6-25 13:47:43 来自手机 | 显示全部楼层
应该可以的吧,下载的时候单片机选择F104的,这个芯片只支持3.7V的吧
回复 支持 反对

使用道具 举报

发表于 2021-6-26 08:18:09 | 显示全部楼层
看了一下手册,15W和15F的定时/计数器不同,15W中是T0,T2,15F中是T0,T1,程序中使用了T2,所以不行,你试一下把程序中的T2改成T0或T1,重新设置计数中断试试。
zjs500217 发表于 2021-6-24 15:55
重新定义各管脚及用到的寄存器,应该能用

怎么修改?你知道吗?
回复 支持 反对

使用道具 举报

发表于 2021-6-27 14:34:34 来自手机 | 显示全部楼层
zy888035 发表于 2021-6-24 18:54
怎么修改?你知道吗?

先下载了15f的规格书,找到t1的中断号对应是多少!然后把萝莉的双路混控程序中的main函数中的t2定时器代码给改成t1的,具体参考stc-isp软件中的软件定时器就完了!中断服务函数也要改个中断号程序部分就没啥问题了!然后是硬件!然后15f是3.3的工作电压还是5v的电压!如果是5v的就用7805,如果是3.3的就可以用1117(主要1117的主供电不能超过12v,我已经炸了一个了,如果你要用高电压可以前端套个7805!超过30v的话.7805前面再套个7812!当然你的7886也承受不了这么大的电压了,这只是个人经验)!主要要注意滤波!因为电机的浪涌电流非常大!会导致单片机重启!联系主供电滤波用470uf以上电容,稳压后端用100uf的基本就没问题了!然后rz7886要注意散热!最好是加散热的铝块!我做了一个基本带385电机没啥问题!用个775的电机也没烧,当然775是空载!带负荷的还没试!在工地做事没时间!
回复 支持 反对

使用道具 举报

发表于 2021-6-28 09:41:36 | 显示全部楼层
抽了点时间给你改了下,主要把定时器T2改到T0,理论上来说是同时支持了15W104和15F104的,因我没有15F的芯片。你自己去测试一下吧STC15W104的程序能直接写进STC15F104E吗???写进去没效果 免费送模型,模吧 作者:q158354184 3962

双路双向混控有刷电调(同时支持15f104与15w104).zip

1.59 KB, 下载次数: 20, 下载积分: 牛币 -10

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-30 02:51:08 来自手机 | 显示全部楼层
q158354184 发表于 2021-6-28 09:41
抽了点时间给你改了下,主要把定时器T2改到T0,理论上来说是同时支持了15W104和15F104的,因我没有15F的芯 ...

多谢!我自己改了哈失败了!谢谢
回复 支持 反对

使用道具 举报

发表于 2021-7-7 06:19:39 来自手机 | 显示全部楼层
zy888035 发表于 2021-6-30 02:51
多谢!我自己改了哈失败了!谢谢

可以用不?
回复 支持 反对

使用道具 举报

发表于 2021-7-7 14:36:30 | 显示全部楼层
STC15F104E是有bug的,因为中断不正常。都已经停产了,现有的都是以前的呆滞库存。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-13 16:36:41 | 显示全部楼层

好像不行呢
才测试了哈,原来程序还有两个通道有输出,现在都没反映
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

QQ|关于模吧|APP下载|广告报价|手机版|企业会员|商城入驻|联系我们|模吧 ( 黔ICP备2022002348号-1 )

© 2013-2020 Moz8.com 模吧,玩出精彩!