机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖

单片机C语言程序问题,请教

[复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子% \- u* y7 C- f6 f+ \1 s
% C+ i6 @2 V8 K3 {6 h' {9 A
额,不好意思,没说清楚,在主函数中已经给order1赋值1了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子
, p' V; F7 _' U' l2 j7 x; v3 N* D7 r! D+ |" g, i# H
额,那个是switch函数,和pwm没关系
回复 支持 反对

使用道具 举报

发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子- w# X" g) o& s8 ^! o. ]/ J

: d5 g/ V2 j* N( G2 H9 M# lOOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。
  ]) [5 A7 M% v: _
回复 支持 反对

使用道具 举报

发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子0 z  M$ s6 y3 ^5 w3 @/ A
/ E# [4 H$ e# s
               嗯~看懂了~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子% k  J6 M5 K+ e/ ?, D

2 g1 W- t8 \( ^7 i% v# K! }" }嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;$ f3 f5 Q( u! m+ T) n8 v, r

$ {  L, n/ ~" \7 CTR1=0;7 n, |+ Z; V$ q1 k, p

9 A: }( J$ ]* y# L4 ?break;
  ]) l. W6 X0 `  T4 ^
) d1 t8 @! F; \1 C. J# P$ C相当郁闷3 H1 Z2 i* t# Z: h
回复 支持 反对

使用道具 举报

发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
回复 支持 反对

使用道具 举报

发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:1 l7 _) ?0 P7 N& ^* V9 C/ k
int timer0(int par)- b  x) Q4 {" I5 a, _
{2 q5 G  ~" E. ~  M+ b) v$ y6 A
        switch(par)! m2 A" i4 a2 m9 t0 _' M" U
{& |8 j- {' c; R8 t4 A. i
case 1:2 P% g4 g1 ]/ C! a
...
6 t+ U/ P" ]9 ]* [5 T$ W$ g...& c6 P$ s; z0 x
case 12:  4 H* f+ @- }/ U5 t% m' u0 V
        PWM0_5=0 ;% Z2 e, N2 f0 a; B. Y5 U
        TH0=-(3300-PWM_Value1[5])/256;-
/ _" K& m2 o; A# }8 `+ k! O2 d( B        TL0=-(3300-PWM_Value1[5])%256;
0 {6 k7 E* E4 y( U# l& \) z$ P9 K" d        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。
- g5 N+ D3 X# x' I& B        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。
$ N# n, t  P/ p) E2 N/ S/ ^1 a        break;;
4 E) m8 B. g' M$ n) H4 w7 ?}
% b% a2 n* d$ `) I: Sreturn(par++);
5 [0 j5 v' d$ F- a% J$ ^$ V8 R}( r) Q" H# A; Q7 ~& X0 [( \# W
" y& \9 s3 G, ^
在主函数中调用timer0()的语句:
* T- w2 [2 y" \+ D/ ?' porder1=timer0(order1);
# X0 b" N4 l+ |7 B; Cif(order1==13) {order1=1; TR1=0;}
  V4 U7 ^4 _. h( w

点评

Thank you very much!  发表于 2011-5-2 23:37
回复 支持 反对

使用道具 举报

发表于 2011-5-3 20:07:29 | 显示全部楼层
看了一下你的程序,没看明白要实现什么功能,感觉有点乱,switch没这么用的。
1 w& q' W) l* R2 M$ ^按说跳转没问题,如果出现异常,建议写个测试函数test(),本函数逐个显示所有变量的当前值,test()加在每个break;之前。

点评

呵呵,谢谢,已经可以了  发表于 2011-5-3 23:02
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2024-11-29 14:52 , Processed in 0.054096 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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