机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖

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

[复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子
, F; i4 D( w$ b' C, \$ V, b) w
额,不好意思,没说清楚,在主函数中已经给order1赋值1了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子
* i3 {& x, i" V) f& f5 B! B) u' Q1 k/ [4 j( `9 J( ^/ ?. w
额,那个是switch函数,和pwm没关系
回复 支持 反对

使用道具 举报

发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子
8 z6 J* ~4 i1 M
5 {2 W! b+ U# z$ IOOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。
& M2 Y+ O' M  ]5 W
回复 支持 反对

使用道具 举报

发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子
3 O3 o( D# d. r2 p6 Q2 E# l6 A: X+ X7 F
               嗯~看懂了~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子- U4 V7 V0 ]* k) ]- h8 ~

3 f% O7 d7 n: P嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;0 h2 J9 `2 e' @! Q, Z

. n' S% Y0 Z, J: S" q. \TR1=0;
! k4 a. v% c7 S' i$ i- I) T' X+ b! ^, n. z- ]& X) P4 s8 `- E
break;
8 \5 E. Z9 n8 V8 D
4 ]2 \" ~2 }6 w4 g9 s  ?" _7 N相当郁闷
" t- z" b$ q6 k5 P+ O. V, h
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:3 E3 i. L: {9 X0 k& Q
int timer0(int par)) R( U; I9 e2 S1 R0 {, b
{
" g1 l1 ^! h2 }# F& T& l% W8 O        switch(par)
2 v5 _; ~# a$ p1 f{4 o& I# I) I- e7 n
case 1:
9 s3 U$ M/ ]! X/ @  o...* H; a$ I4 e) q/ a4 n: x
...! w% ^6 \2 W# O% |) ?
case 12:  ( m& ^+ [7 c  L/ M
        PWM0_5=0 ;( V) {- n9 h& D7 m
        TH0=-(3300-PWM_Value1[5])/256;-
* A; z) t; @. y# E7 P9 I        TL0=-(3300-PWM_Value1[5])%256;7 }  f8 }7 L% ~- Q$ s/ n
        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。, [, r  m. ~& ?
        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。% V% s# I, O" M( t% T1 n( q& E" P
        break;;
3 a0 c& p4 c# Q8 Z: s}
! i5 M% _/ H0 |5 Freturn(par++); 4 R9 d; x4 x9 {+ m1 H$ _% s
}
* f% j3 D' z- U6 o  x4 d' |. V8 J, k% x' ]
在主函数中调用timer0()的语句:+ s; U. a0 C& ~4 p* z
order1=timer0(order1);7 g3 z3 k; `. X/ q
if(order1==13) {order1=1; TR1=0;}
7 `" p5 d" c) Q7 R# _" C

点评

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

使用道具 举报

发表于 2011-5-3 20:07:29 | 显示全部楼层
看了一下你的程序,没看明白要实现什么功能,感觉有点乱,switch没这么用的。
# @5 ^5 m% v6 H) J2 x/ s按说跳转没问题,如果出现异常,建议写个测试函数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.051787 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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