打印
[51单片机]

大家帮我看看这段超简单的switch语句,我是不是有...

[复制链接]
2593|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 hetiandemeng017 于 2015-10-10 14:06 编辑

解决了:答案见https://bbs.21ic.com/forum.php?mo ... p;extra=#pid6035938
---------------------------原文-----------------------------------------------------------------------------------------------------------------------------
折腾了一天,以为弟弟的舵机非常easy就搞定。采用12MHz晶振的单片机的T0中断来产生需要的pwm脉冲,有什么难的:
结果出现怪异的现象:
看这个关键的switch语句,原设想该是这样:(比方说我定pwm高电平持续时间是950us,即t取值950)
代码如果是这样(按照逻辑来),结果却不安常理出牌:

但是如果把代码改成这样,实在觉得奇葩,结果却perfect!-----别问我怎么想到的,不说了,试了一个下午,瞎猫碰到死老鼠,哎!

尼玛,我这两天是不是看av看多了,各位师兄帮我瞧瞧!50分不成敬意,全部给最佳答案。再谢!
后补:有朋友说示波器正负接反了,没错!我的这个示波器就是正负不分,声卡自己做的,哈哈哈!凑活着看吧!

爪子 - 副本.zip

834.68 KB

相关帖子

沙发
hetiandemeng017|  楼主 | 2015-10-9 19:54 | 只看该作者
自己顶!真心不要沉

使用特权

评论回复
板凳
hetiandemeng017|  楼主 | 2015-10-9 22:23 | 只看该作者
不要沉

使用特权

评论回复
地板
dirtwillfly| | 2015-10-9 23:16 | 只看该作者
没看出问题。2.5微秒那么长的执行时间,不建议放在中断服务程序里执行啊

使用特权

评论回复
5
hetiandemeng017|  楼主 | 2015-10-9 23:57 | 只看该作者
dirtwillfly 发表于 2015-10-9 23:16
没看出问题。2.5微秒那么长的执行时间,不建议放在中断服务程序里执行啊 ...

哈哈,终于有人关注了。好的!
中断里的子程序仅仅是给定时器重新赋值用的,子程序很短,不长的。执行完就跳出去等待下一次中断。麻痹,我又测试了一晚上,又遇到更多证据。等我总结总结打包贴上来!

另外不是keil优化的问题,我已经将优化等级调成0了!

使用特权

评论回复
6
ayb_ice| | 2015-10-10 08:14 | 只看该作者
hetiandemeng017 发表于 2015-10-9 23:57
哈哈,终于有人关注了。好的!
中断里的子程序仅仅是给定时器重新赋值用的,子程序很短,不长的。执行完 ...

不要动不动怀疑就怀疑是KEIL的问题,
努力检查程序吧,特别注意细节问题,特别是开始与结束,逻辑转换部分,转换前与转换后的瞬间状态等

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
hetiandemeng017 + 3 赞一个!
7
hetiandemeng017|  楼主 | 2015-10-10 09:45 | 只看该作者
ayb_ice 发表于 2015-10-10 08:14
不要动不动怀疑就怀疑是KEIL的问题,
努力检查程序吧,特别注意细节问题,特别是开始与结束,逻辑转换部 ...

完整程序不大,就在附件里。我已经耗一整天了,没有乱说的。正是因为怕误会keil,所以才贴出来共讨论。还请大侠们路过摘花,手留芳香!

使用特权

评论回复
8
jtboy105| | 2015-10-10 10:13 | 只看该作者
没用过这个IC,但是有以下建议:
1.你可以Debug进去,看当设置IO为高时,实际IO是否正常。并是否是在自己需要的位置。
 再可以跟进去确认下设置Timer数值是否正常。
2.设置PWM。感觉你这种方式有是复杂。一般我是会开一个中断。比如开一个20K的中断。每进一次是50uS.
设定一个Ram,当小于19时。为高。当大于400时清掉。程序代码量也会小一些。

使用特权

评论回复
9
hetiandemeng017|  楼主 | 2015-10-10 10:23 | 只看该作者
jtboy105 发表于 2015-10-10 10:13
没用过这个IC,但是有以下建议:
1.你可以Debug进去,看当设置IO为高时,实际IO是否正常。并是否是在自己需 ...

我可能是一根筋,其实实现方法到时多种多样,你的建议就是其中一种。但是我眼睛里有沙子我就睡不好,因为keil也好,单片机也好在我心里有崇高的逻辑地位。
debug显示正常,你说怪不。我在想换个单片机试试!
但我手里没有别的型号单片机,诸位大虾谁有时间帮我试试。我在研究会

使用特权

评论回复
10
ayb_ice| | 2015-10-10 11:08 | 只看该作者
hetiandemeng017 发表于 2015-10-10 09:45
完整程序不大,就在附件里。我已经耗一整天了,没有乱说的。正是因为怕误会keil,所以才贴出来共讨论。还 ...

直接说你的要求就可以了
要产生什么样的信号,用什么样的资源的CPU

很多人解决问题的基本都不一样的

使用特权

评论回复
11
ayb_ice| | 2015-10-10 11:11 | 只看该作者
hetiandemeng017 发表于 2015-10-10 09:45
完整程序不大,就在附件里。我已经耗一整天了,没有乱说的。正是因为怕误会keil,所以才贴出来共讨论。还 ...

变量在==9的时候被清零了,然后后面又立刻加一了,实际又变成1了,这可能是问题的所在

使用特权

评论回复
12
hetiandemeng017|  楼主 | 2015-10-10 11:41 | 只看该作者
ayb_ice 发表于 2015-10-10 11:08
直接说你的要求就可以了
要产生什么样的信号,用什么样的资源的CPU

https://bbs.21ic.com/icview-1158492-1-1.html
大侠,我不是仅仅解决一个课题,我是想解开这个谜!我已经将问题更加简化了,请看这里,亲~

使用特权

评论回复
13
hetiandemeng017|  楼主 | 2015-10-10 11:42 | 只看该作者
ayb_ice 发表于 2015-10-10 11:11
变量在==9的时候被清零了,然后后面又立刻加一了,实际又变成1了,这可能是问题的所在 ...

https://bbs.21ic.com/icview-1158492-1-1.html
大侠,我已经将问题更加简化了,请看这里,亲~

使用特权

评论回复
14
hetiandemeng017|  楼主 | 2015-10-10 11:43 | 只看该作者
ayb_ice 发表于 2015-10-10 11:11
变量在==9的时候被清零了,然后后面又立刻加一了,实际又变成1了,这可能是问题的所在 ...

我改过这句,貌似不是!请帮我看另外一个简化版本,大侠!

使用特权

评论回复
15
hetiandemeng017|  楼主 | 2015-10-10 11:45 | 只看该作者
jtboy105 发表于 2015-10-10 10:13
没用过这个IC,但是有以下建议:
1.你可以Debug进去,看当设置IO为高时,实际IO是否正常。并是否是在自己需 ...

恩,你的建议不错。不过我现在的问题是解开这个心中的纠结,望大侠移步这里:https://bbs.21ic.com/icview-1158492-1-1.html
我已经将问题更加简化了,大侠一定要不吝笔墨啊!

使用特权

评论回复
16
focuscounter| | 2015-10-10 12:06 | 只看该作者
ayb_ice 发表于 2015-10-10 08:14
不要动不动怀疑就怀疑是KEIL的问题,
努力检查程序吧,特别注意细节问题,特别是开始与结束,逻辑转换部 ...

兄台是经验之人?

有兴趣加入我们公司吗?同时欢迎这里自荐或推荐的朋友!

我们急聘电子工程师(单片机开发工程师 嵌入式硬件工程师 逻辑电路设计工程师)

单片机开发工程师

1. 电子类及其相关专业,本科及以上学历,三年以上相关工作经验;
2. 熟练使用51系列、ARM系列单片机的应用与开发;
3. 熟悉电子电路的原理设计、PCB设计;
4. 具有一定的汇编、C语言编程能力;
5. 学习能力较强、勤奋,具备团队合作精神及良好的敬业精神。


嵌入式硬件工程师

任职资格:
1. 电子、自动化、通信及其相关专业,本科及以上学历,两年以上相关工作经验。
2. 能够编写嵌入式系统方案,熟悉嵌入式系统架构;
3. 熟练使用51系列、ARM系列、DSP等的应用与开发;
4. 熟悉电子电路的原理设计、PCB设计
5. 具有一定的汇编、C语言编程能力;
6. 学习能力较强、勤奋,具备团队合作精神及良好的敬业精神


逻辑电路设计工程师

任职资格:
1. 电子类及其相关专业,一年以上相关工作经验;
2. 熟悉FPGA、CPLD等芯片的应用;
3. 熟悉VHDL或Verilog语言;
5. 学习能力较强、勤奋,具备团队合作精神及良好的敬业精神。

有意者可直接投简历至该邮箱:focusbanker@aliyun.com

电话:020-34693082转0
地址:广州市番禺区南村镇江南工业二区二横路4号

使用特权

评论回复
17
forthlab| | 2015-10-10 13:23 | 只看该作者
T0中断周期是多少?
不会是中断重入了吧

在中断中不应该有延时或其他占用CPU时间过长的代码,要快进快出。
如果我编写这个程序,会把这个代码放在主程序中,不会放在定时中断里面。

哦,对了,你放主程序做循环试试?

使用特权

评论回复
18
丁弋宇| | 2015-10-10 13:55 | 只看该作者
我看是看AV少了
经验不足

使用特权

评论回复
19
hetiandemeng017|  楼主 | 2015-10-10 14:04 | 只看该作者
forthlab 发表于 2015-10-10 13:23
T0中断周期是多少?
不会是中断重入了吧

谢谢forthlab,我搞定了!

使用特权

评论回复
20
hetiandemeng017|  楼主 | 2015-10-10 14:04 | 只看该作者
丁弋宇 发表于 2015-10-10 13:55
我看是看AV少了
经验不足

赞同,嘻嘻

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:那个我是新手,胡言乱语还请包涵一下哦哦!

4

主题

99

帖子

1

粉丝