OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 350|回复: 7

跪求普通IO定时器产生下图波形,节省代码存储空间,寄存器最好是8位的,我自己做出来了,但是占空间大~~

[复制链接]

  离线 

7

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2017-7-6
在线时间
31 小时
发表于 2017-8-11 18:00:11 | 显示全部楼层 |阅读模式
5金钱
        我自己写了个程序,虽然实现了一模一样的波形,但是占存储空间很大,还有十几个这样的波形呢,我只做了3个,空间就用了百分之20多。
       
                if(r_PWM_t < 26)        //1个
                                {
                                        Motor = 0;
                                }
                                else if(r_PWM_t <= 73)
                                {
                                        r_PWM_3t++;
                                        if(r_PWM_3t == 5)
                                        {
                                                r_PWM_3t = 0;
                                                b_t = 1;
                                        }
                                        if(b_t)
                                        {
                                                b_t = 0;
                                                Motor = ~Motor;
                                        }
                                }
                                else if(r_PWM_t < 99)     //2个
                                {
                                        Motor = 0;
                                }
                                else if(r_PWM_t <= 146)
                                {
                                        r_PWM_3t++;
                                        if(r_PWM_3t == 5)
                                        {
                                                r_PWM_3t = 0;
                                                b_t = 1;
                                        }
                                        if(b_t)
                                        {
                                                b_t = 0;
                                                Motor = ~Motor;
                                        }
                                }
                                else if(r_PWM_t < 172)   //3个
                                {
                                        Motor = 0;
                                }
                                else if(r_PWM_t <= 219)
                                {
                                        r_PWM_3t++;
                                        if(r_PWM_3t == 5)
                                        {
                                                r_PWM_3t = 0;
                                                b_t = 1;
                                        }
                                        if(b_t)
                                        {
                                                b_t = 0;
                                                Motor = ~Motor;
                                        }
                                }
                                else if(r_PWM_t < 245)    //4个
                                {
                                        Motor = 0;
                                }
                                else if(r_PWM_t <= 292)
                                {
                                        r_PWM_3t++;
                                        if(r_PWM_3t == 5)
                                        {
                                                r_PWM_3t = 0;
                                                b_t = 1;
                                        }
                                        if(b_t)
                                        {
                                                b_t = 0;
                                                Motor = ~Motor;
                                        }
                                }
                                else if(r_PWM_t <= 302)
                                {Motor = 0;}

                                else if(r_PWM_t <= 307)
                                {b_1t = 1;}
                                else if(r_PWM_t <= 312)
                                {
                                        Motor = 1;
                                        b_1t = 0;
                                }

                                else if(r_PWM_t <= 317)
                                {b_1t = 1;}
                                else if(r_PWM_t <= 322)
                                {
                                        Motor = 1;
                                        b_1t = 0;
                                }

                                else if(r_PWM_t <= 327)
                                {b_1t = 1;}
                                else if(r_PWM_t <= 332)
                                {
                                        Motor = 1;
                                        b_1t = 0;
                                }                               
                               
                                else if(r_PWM_t <= 337)
                                {b_1t = 1;}
                                else if(r_PWM_t <= 342)
                                {
                                        Motor = 1;
                                        b_1t = 0;
                                }
                               
                                else if(r_PWM_t <= 346)
                                {b_1t = 1;}

                                if(r_PWM_t > 346)
                                {       
                                        r_PWM_t = 0;
                                        b_1t = 0;
                                }
                        }
                        if(b_1t)
                        {
                                if(r_PWM_4t > 1)
                                {Motor = 0;}
                                else {Motor = 1;}
                                if(r_PWM_4t > 12)
                                {r_PWM_4t = 0;}
                        }

总的

总的

后面一下段

后面一下段

最佳答案

回复

使用道具 举报

  离线 

7

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2017-7-6
在线时间
31 小时
 楼主| 发表于 2017-8-11 18:00:12 | 显示全部楼层
回复

使用道具 举报

  离线 

482

主题

8万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
117144
金钱
117144
注册时间
2010-12-1
在线时间
898 小时
发表于 2017-8-11 23:45:51 | 显示全部楼层
优化代码了
回复

使用道具 举报

  离线 

2

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
484
金钱
484
注册时间
2017-3-23
在线时间
86 小时
发表于 2017-8-12 08:47:10 | 显示全部楼层
编译器优化代码的等级可以改一下试试
回复

使用道具 举报

  离线 

7

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2017-7-6
在线时间
31 小时
 楼主| 发表于 2017-8-14 08:54:07 | 显示全部楼层
未知1908 发表于 2017-8-12 08:47
编译器优化代码的等级可以改一下试试

代码太长,这波形室友规则的,所以就得找到好的方法
回复

使用道具 举报

  离线 

2

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
484
金钱
484
注册时间
2017-3-23
在线时间
86 小时
发表于 2017-9-8 12:58:11 | 显示全部楼层
程功之道 发表于 2017-8-14 08:54
代码太长,这波形室友规则的,所以就得找到好的方法

可以设置一下编译器的代码优化Level试试
回复

使用道具 举报

  离线 

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2017-7-15
在线时间
13 小时
发表于 2017-10-15 12:20:51 | 显示全部楼层
先区分波形,大体化成几种类型,然后使用公共程序,直接在里面赋值。周期,占空比,循环次数都可以写入。
回复

使用道具 举报

  离线 

7

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2017-7-6
在线时间
31 小时
 楼主| 发表于 2017-10-19 14:01:21 | 显示全部楼层
妖孽11 发表于 2017-10-15 12:20
先区分波形,大体化成几种类型,然后使用公共程序,直接在里面赋值。周期,占空比,循环次数都可以写入。

恩恩,想出来了,谢谢
回复

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-20 21:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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