国产精品乱码一区-性开放网站-少妇又紧又爽视频-西西大胆午夜人体视频-国产极品一区-欧美成人tv-四虎av在线-国产无遮挡无码视频免费软件-中文字幕亚洲乱码熟女一区二区-日产精品一区二区三区在线观看-亚洲国产亚综合在线区-五月婷婷综合色-亚洲日本视频在线观看-97精品人人妻人人-久久久久久一区二区三区四区别墅-www.免费av-波多野结衣绝顶大高潮-日本在线a一区视频高清视频-强美女免费网站在线视频-亚洲永久免费

機械社區

標題: 用PIC單片機產生方波遇到這種波形 [打印本頁]

作者: 馮喆喆    時間: 2018-11-5 20:08
標題: 用PIC單片機產生方波遇到這種波形
本帖最后由 馮喆喆 于 2018-11-5 20:11 編輯
2 V- p1 U) F7 r+ E4 E
5 D. m. ]. F  X; u' C( v' Q. E% ?用PIC16F887單片機產生方波,當我把方波頻率設為4KHz時波形是正常的,當我改變TIMER2的分頻值,從4改為16 ,此時頻率應該變為1KHz,此時頻率是對了,可是波形卻變得很奇怪。  求有經驗的大神指導下
5 f, F; Y& [4 c. o, `這是產生的4KHZ正常波形,占空比為50%4 _4 e+ {+ j/ i4 f

  a% A7 a$ {9 T- | (, 下載次數: 61)
- c2 E) e- W  t' Q$ ]" V8 _: b  A3 k1 p* ?3 D, i. o
這是1KHZ有問題的波形,占空比為60%
6 F' L3 u# m) e* y- Q (, 下載次數: 56) " D+ j( j- D% w2 ^% P3 x; P' E
' f& i6 k+ c( }+ f

作者: 馮喆喆    時間: 2018-11-5 20:14
主要的程序我也貼上來各位看一下
( G+ j! c, o9 F1 A3 P) I7 t
/ |) x8 F- t$ e/ ]/********端口初始化函數********/6 y$ R. i8 S" S
void init()
( w. ?0 n' t5 q0 R  {' _) w# J- s{
3 N9 h8 r# b% e! p% S  J, g, p2 r: q        ANSELH=0x00;                     //設置B口為數字I/O口* Q. D1 G% |1 x& E$ M) @  X$ p
        OPTION_REG=0x00;. t+ m4 b- @- |
        WPUB=0xFF;         //設置B口弱上拉- W: I. M& m( P4 q9 a+ \
        INTCON=0x00;       //關總中斷
8 b* s& s2 G) V& o2 c& Q        PIE1=0;            //PIE1的中斷禁止
0 M4 v' c" Q  @. p& E        PIE2=0;            //PIE2的中斷禁止' c2 ?/ T( [6 v. g+ p
        TRISB0=1;
. W3 w! a; e" x) _& p5 C        TRISB1=1;          //將RB1設置為輸入口,按按鍵
6 A5 q6 t. R, D( s        TRISB2=1;          //將RB2設置為輸入口,按按鍵& Y" `' W0 t2 q. r, Z! i  E
        TRISB3=1;
  V, C( G0 b, k4 Y        TRISB4=1;' Z' ^2 u7 G7 `. m6 c& U) Z
        RC1=0;
& A3 r9 h6 h: }$ b; J" m$ j5 W        TRISC1=0;          //脈寬調制輸出引腳,設置為輸出
; D1 B+ L, G& B2 c8 {}
$ W- E: |9 i; j: t' O- z0 `8 ~/********PWM初始化函數********/
" C; K, }# n4 s/ F7 d0 wvoid PWM_Init()
! e, b6 J  c1 X: I{
/ E& f& N0 B% x& N% c5 W6 g* m        PR2=249;           //脈寬調制波形的周期為1000us       
/ N+ b- O" m# q2 u1 Z/ K4 [+ V) W        CCP2CON=0x0C;      //CCP2模塊工作在PWM模式,占空因數的低兩位為00
0 }4 @* J9 o% V! e* c9 h        T2CON=0x02;        //禁止TMR2,且前后分頻值為16,同時開始輸出PWM7 H  T, N0 z1 V5 {/ O
        CCPR2L=0xB8;       //脈寬調制波形的占空比初始值! Z) ~1 C1 C2 m. V. o6 N+ h
}8 Z/ H3 @9 j. c+ p" G
/********鍵盤掃描函數*******    */
& a* H' n7 {, c. @0 uvoid keyscan()  I7 Y: s  N* x$ t- E4 j/ w0 R: C
{: I4 m3 x2 s( g- n6 D" p3 F5 L
        if(RB1==0)                  //如果是RB1鍵按下+ |1 {2 \  Y1 c% S2 D6 M  Y
        {
0 ^4 \% y0 g- `# T                delay_ms(5);              //延時去抖" K8 g% W* K" f( Q  r
                if(RB1==0)              //確認是否有鍵按下
$ s$ _; u) C/ r" G                {
: s$ K% ]  F1 `                        while(!RB1);        //等待按鍵釋放
$ c4 p! K% f) e8 |% h4 w                        CCP2CON=0x0C;- {; q% y) y1 n7 L- l/ ~
                        CCPR2L=0xB8;                   //80%占空比0 b' Y. n' |, n5 c8 i4 ~! I7 r
                        TMR2ON=1;
7 [7 Z, w% I1 k! L$ F" N                }+ ?  w3 u% Z- F
        }9 @* H% W& Z0 n8 I% p
        if(RB2==0)                  //如果是RB2鍵按下+ A* C! m4 J2 H& ~+ Q: Z5 }! V
        {. D; o/ ?) ^3 k- r, n* C
                delay_ms(5);              //延時去抖
" }# \; |, ?. G3 Q                if(RB2==0)              //確認是否有鍵按下0 `3 e/ x4 P' D& D) M
                {
" ]! j% J. ]; k2 R# v2 e                        while(!RB2);        //等待按鍵釋放! ^9 r! O" b: ?8 v5 }
                        CCP2CON=0x0C;
" f+ S  U8 j- M, B7 y9 B                        CCPR2L=0x96;                   //60%占空比) K, U) N) D- m  S' _+ _+ V" v
                        TMR2ON=1;  ]  i! E  b3 o# ^0 e+ i% r' |" a
                }0 S5 c: ?4 j+ @. x9 j. ?5 A! A- n
        }  H. R! C) S! s7 Q! j
        if(RB0==0)                  //如果是RB0鍵按下5 I; z9 k4 V9 ^! s
        {
# U3 Y# a6 k" Y                delay_ms(5);              //延時去抖' z; d3 d& ~. S. o$ R, K
                if(RB0==0)              //確認是否有鍵按下# ?3 C5 Z) I3 g/ Y
                {
/ H# a0 _2 ^4 }( p' @# B1 J3 C                        while(!RB0);        //等待按鍵釋放
' k( V- N. U; ^                        CCP2CON=0x00;                   //關PWM5 K6 |; J' p7 ~3 F
                        TMR2ON=0;                        //禁止TMR2
/ z  y& X+ B9 k9 t                        //delay_ms(5);
# X% D7 i' ^3 Y. O5 m; M; V- k                        RC1=0;
* x" I8 ?- l$ ?( U8 e                }* P6 p! h  O; d- H0 \) q
        }
: x/ ~, N$ i: e! y8 e}2 G9 m" d$ H+ ^& r* B3 d- e
/********主函數********/% S+ r- g3 B( |/ {( v1 _  g
void main()  @' Z5 P4 h9 ^$ `0 y
{4 U$ @1 d, H/ i  |8 H
        init();                     //系統初始化! a+ K9 e  q* {3 c% @( \
        PWM_Init();                 //脈沖寬度初始化5 I! k2 H/ _. i
        while(1)7 n7 ~; m7 j/ L; A( ?/ p8 N" n; r
        {; Z- W& f  n) ^( Y
                keyscan();              //調用按鍵掃描處理脈寬因數% e  P# w& m; v2 c" R; a5 O
        }
2 F( y/ E7 |) f0 z6 ~$ a2 D}
作者: 遠祥    時間: 2018-11-6 07:38
單片機常用問題嗎?
作者: 馮喆喆    時間: 2018-11-6 14:45
遠祥 發表于 2018-11-6 07:380 r6 O) q, b2 X9 g: s
單片機常用問題嗎?

# x8 ^' K3 T" e) k這個是用PIC單片機產生PWM波,應該比較常見吧




歡迎光臨 機械社區 (http://www.whclglass.com.cn/) Powered by Discuz! X3.5