機械社區(qū)

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
12
返回列表 發(fā)新帖
打印 上一主題 下一主題

單片機C語言程序問題,請教

[復制鏈接]
11#
 樓主| 發(fā)表于 2011-5-2 20:41:27 | 只看該作者
回復 metalstorm 的帖子
$ R7 q; L0 a' h, H
3 m$ b, M2 f% H! V額,不好意思,沒說清楚,在主函數(shù)中已經(jīng)給order1賦值1了
回復 支持 反對

使用道具 舉報

12#
 樓主| 發(fā)表于 2011-5-2 20:43:34 | 只看該作者
回復 robi 的帖子9 K% A- C$ j/ h0 j# u

; V0 n; q8 f. u. `' Q. Z額,那個是switch函數(shù),和pwm沒關系
回復 支持 反對

使用道具 舉報

13#
發(fā)表于 2011-5-2 20:52:18 | 只看該作者
回復 三月的暴風雪 的帖子2 W" ^' L. B2 L* G$ J
: {3 k8 F6 q% M! G8 c
OOP編程思想一般都建議子函數(shù)使用參數(shù)傳遞機制。當單步執(zhí)行到case12時,能否通過編程軟件的調試功能查看timer()函數(shù)中的order1變量的實際值是多少?最好在order++語句前增加一個輸出語句,將order1打印出來,這個值才是千真萬確的判斷條件。如果order1不等于1,能排除不少可能因素。
" O, T7 X) a, J. N( J  L6 T8 Q
回復 支持 反對

使用道具 舉報

14#
發(fā)表于 2011-5-2 21:01:06 | 只看該作者
回復 三月的暴風雪 的帖子; j# W! u# [, f
  y/ }5 w) J, ~7 b' S
               嗯~看懂了~
回復 支持 反對

使用道具 舉報

15#
 樓主| 發(fā)表于 2011-5-2 21:41:59 | 只看該作者
回復 metalstorm 的帖子
/ i$ C! n& @5 B6 t* c' ]
1 {5 x4 b) p  s, X/ d" }( ?/ L5 h嗯,按您的方法調試了,在執(zhí)行order1++之前一直等于1,直到執(zhí)行完order1++之后,那個就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;7 C4 N1 \) e2 N+ J4 y( }/ V" x* J

# O* Y; c' r: X; U+ p3 iTR1=0;+ K  k) W' ~' p2 S! i0 t* I; p

' o: _/ n6 e/ E6 l$ kbreak;
9 w5 _- a) l; v5 O' S$ r8 w. f+ k" F7 m8 p- B% J$ F( P
相當郁悶' ?* i# t+ d5 C# `
回復 支持 反對

使用道具 舉報

16#
發(fā)表于 2011-5-2 22:11:59 | 只看該作者
不太明白,學習了,
回復 支持 反對

使用道具 舉報

17#
發(fā)表于 2011-5-2 23:19:30 | 只看該作者
建議將timer()函數(shù)改寫為參數(shù)傳遞機制:
& C1 G* M  O3 |int timer0(int par)' T0 u) F) T9 p& u$ J% U- [7 I* q
{
2 a2 j+ h4 V' W0 V        switch(par)' i3 Z0 {; C0 |
{
+ R9 h/ ]) K* Pcase 1:* s0 q) k" s2 Y9 g
...0 Z0 r- N2 I7 O
...
! O  @! ?: L* {6 H' jcase 12:  ; t& C7 _8 z+ \) z
        PWM0_5=0 ;
" ^  X; ^' l- ~* Z! j0 G; v* P        TH0=-(3300-PWM_Value1[5])/256;-0 V8 ~6 O7 D( J+ ?# ~/ J: F! D
        TL0=-(3300-PWM_Value1[5])%256;2 Q- X% i% ?& t+ h
        order1=0;  //為什么要在這里清零?建議刪除該行,改為在主函數(shù)中調用timer0()后,判斷如果order1==13,則=1。0 ]) T4 a9 s! }; \( O
        TR1=0;  //為什么要在這里清零?建議刪除該行,改為在主函數(shù)中調用timer0()后,判斷如果order1==13,則清零。
7 S. F! V  A* d  u- b        break;;# l% K8 J# v  k0 O) ~/ I" O" H
}9 c% S1 \$ \: A
return(par++);
; V3 z+ a3 x2 N  S( ^0 f}% l' B+ H& l( R( r5 o

. Y+ T9 {% ^- G! ~( _在主函數(shù)中調用timer0()的語句:
  F8 l1 M/ r8 h* B5 ?1 rorder1=timer0(order1);) [1 `$ O8 m; s. n; N. b
if(order1==13) {order1=1; TR1=0;}
, z' |4 i2 L. L2 m  R% p

點評

Thank you very much!  發(fā)表于 2011-5-2 23:37
回復 支持 反對

使用道具 舉報

18#
發(fā)表于 2011-5-3 20:07:29 | 只看該作者
看了一下你的程序,沒看明白要實現(xiàn)什么功能,感覺有點亂,switch沒這么用的。
5 X1 T1 j! ~0 z" i按說跳轉沒問題,如果出現(xiàn)異常,建議寫個測試函數(shù)test(),本函數(shù)逐個顯示所有變量的當前值,test()加在每個break;之前。

點評

呵呵,謝謝,已經(jīng)可以了  發(fā)表于 2011-5-3 23:02
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規(guī)則

小黑屋|手機版|Archiver|機械社區(qū) ( 京ICP備10217105號-1,京ICP證050210號,浙公網(wǎng)安備33038202004372號 )

GMT+8, 2024-9-28 01:16 , Processed in 0.056668 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表