久久久国产一区二区_国产精品av电影_日韩精品中文字幕一区二区三区_精品一区二区三区免费毛片爱

機械社區

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

作者: 馮喆喆    時間: 2018-11-5 20:08
標題: 用PIC單片機產生方波遇到這種波形
本帖最后由 馮喆喆 于 2018-11-5 20:11 編輯 ) p6 ]% F& Y, a! I7 J* m) e

4 M0 O2 }, _, U9 u$ F用PIC16F887單片機產生方波,當我把方波頻率設為4KHz時波形是正常的,當我改變TIMER2的分頻值,從4改為16 ,此時頻率應該變為1KHz,此時頻率是對了,可是波形卻變得很奇怪。  求有經驗的大神指導下
0 T% Y: f+ D* z) J+ P; u; F' O, d這是產生的4KHZ正常波形,占空比為50%
* \) |% y1 V" Q! {/ e: o
- K7 B. G% ^4 p$ N (, 下載次數: 55)
% ~$ r+ D) Z7 |7 S. [6 J  o: p) {- S
這是1KHZ有問題的波形,占空比為60%+ l% E3 M$ K5 g  _/ m# B, _
(, 下載次數: 47) $ }( e0 s4 x' X7 d4 M
- T; b2 C/ K+ y* K. e

作者: 馮喆喆    時間: 2018-11-5 20:14
主要的程序我也貼上來各位看一下  g/ M7 X' K6 U! j# a/ V

5 N; j- p/ h- w/ A' O% @) `* A/********端口初始化函數********/
, }8 G' W% Q: `' A3 Y2 uvoid init()
: B7 o! C0 ?; L. B: ]* y{
1 W8 Y" s) _& c8 R4 @        ANSELH=0x00;                     //設置B口為數字I/O口) ]; y& d2 [! Z4 ?  J# u
        OPTION_REG=0x00;" ]  Y: K$ H* ^) r; l3 N' d
        WPUB=0xFF;         //設置B口弱上拉) E& f% A2 s# S% V# w1 A# j
        INTCON=0x00;       //關總中斷  L3 V! B. m# u0 Z( W) h. i
        PIE1=0;            //PIE1的中斷禁止  |& M" `( T7 \$ x
        PIE2=0;            //PIE2的中斷禁止
4 C! S8 v" F- X! ?/ D        TRISB0=1;
) h6 `: R1 e9 L, J        TRISB1=1;          //將RB1設置為輸入口,按按鍵
- D& b& j9 c, O% z        TRISB2=1;          //將RB2設置為輸入口,按按鍵1 Y: k8 m5 S+ l5 \1 ~
        TRISB3=1;
# l( @4 Q0 B& q# z3 }        TRISB4=1;
8 \1 D7 ~, x& M# E1 g        RC1=0;
6 y- g. r/ L  K! d        TRISC1=0;          //脈寬調制輸出引腳,設置為輸出
+ r% h5 H# K% `& j' }% q& W}
/ ^2 @$ o7 {$ z% L7 M4 ]6 _' `4 K/********PWM初始化函數********/
+ E$ B5 s% t# e* Z' ]! M' j& f9 H' Vvoid PWM_Init()
  i- h  E# Z7 S- }, [2 u{( h# W, }, S- ^8 M2 Y) x1 v+ J; }, ]
        PR2=249;           //脈寬調制波形的周期為1000us        8 p" P" [) d0 K
        CCP2CON=0x0C;      //CCP2模塊工作在PWM模式,占空因數的低兩位為00
7 s* A; M$ S! [2 O9 M0 {7 E        T2CON=0x02;        //禁止TMR2,且前后分頻值為16,同時開始輸出PWM
( J+ |) m& b% L  ^7 |( v$ I+ Z* N3 b        CCPR2L=0xB8;       //脈寬調制波形的占空比初始值
" l) o1 c8 |, R; B  M' d! [}$ X3 I6 ~) @  E$ u( R$ q
/********鍵盤掃描函數*******    */
" v- p$ m& A8 i1 o9 Y: Nvoid keyscan()
) t! i" d: n8 A* ^& X{) G+ [% J+ u( O0 a6 h! r
        if(RB1==0)                  //如果是RB1鍵按下
# d8 S0 C0 W+ _" g0 h5 y        {$ r7 {2 s9 O! ?2 O7 v+ Q+ A
                delay_ms(5);              //延時去抖
# o) v  }3 L9 m! n" O$ k% n                if(RB1==0)              //確認是否有鍵按下) O" z7 ~3 _; L& C) V
                {% e. D4 t. c: G9 {: ~0 _( d* u" H
                        while(!RB1);        //等待按鍵釋放
7 Q  Z! i( q# ?- ~                        CCP2CON=0x0C;
% n1 P- W! _% Z9 u. y) F; n                        CCPR2L=0xB8;                   //80%占空比9 L% M; p$ u3 S1 X
                        TMR2ON=1;" Z- ^, s3 b$ f4 q
                }
) ^" B, S, F& J4 Z        }2 x( }8 j! `! Q3 I+ E. z7 i% N% e( z
        if(RB2==0)                  //如果是RB2鍵按下1 {# {  C) k; C( N
        {* Y$ n$ y3 [4 p! \: V
                delay_ms(5);              //延時去抖9 e& y0 g% U6 t( P1 f
                if(RB2==0)              //確認是否有鍵按下+ c- p7 z3 w' I- l* T; E) I
                {+ ^3 d+ J" w3 h0 b4 F
                        while(!RB2);        //等待按鍵釋放  ?) |- j1 D" r2 s
                        CCP2CON=0x0C;
- [4 w1 f+ x" q                        CCPR2L=0x96;                   //60%占空比: q7 F0 j, p! H+ g2 z6 g4 `
                        TMR2ON=1;# z/ W& S4 s# [4 U) A& j
                }& H9 [1 i0 H2 |; V* V
        }/ [2 ]# Q& i6 F* W2 V  [; {" v
        if(RB0==0)                  //如果是RB0鍵按下; m9 T" }* K! X  f! T$ p
        {
0 [4 G9 R! x  L0 Y6 f" I' T                delay_ms(5);              //延時去抖
8 n4 h  w1 ^- Z                if(RB0==0)              //確認是否有鍵按下* ]% {+ n7 G2 D2 {
                {  P) v0 V5 W9 f* Z7 n3 m; n1 r+ [
                        while(!RB0);        //等待按鍵釋放4 S) X" B( R' A6 c8 V
                        CCP2CON=0x00;                   //關PWM
6 `3 z- I, a0 p% f* h                        TMR2ON=0;                        //禁止TMR2  f; H0 P) N* B& ]
                        //delay_ms(5);3 }  o) ~# y& W  T6 ^
                        RC1=0;# Q0 X; N1 n- a6 ^. |7 l! S7 Z: I) Z; m
                }
5 f% S  G- ]! p5 P3 T* `, S        }. [% `9 M- X5 E, M  l1 q
}7 W% }! f& \  A& L7 G! H  u1 R
/********主函數********/( k3 Z( T. Z" f# G! J' c7 P
void main()
1 e: @. ^& H# \/ v; d. I4 W$ W{# O, q! T8 g7 T' g
        init();                     //系統初始化; E/ ~/ r- F3 [8 {* s7 E8 J" M! b8 i
        PWM_Init();                 //脈沖寬度初始化# a7 A; S# a/ D( ^0 J$ S
        while(1). I$ N+ X# G+ }1 N  V
        {+ N3 r- N0 d; H/ s2 L
                keyscan();              //調用按鍵掃描處理脈寬因數
% w2 L: B9 d- Q( i, ~  k  b1 e        }
4 |# {, M7 B6 K  v; v3 K}
作者: 遠祥    時間: 2018-11-6 07:38
單片機常用問題嗎?
作者: 馮喆喆    時間: 2018-11-6 14:45
遠祥 發表于 2018-11-6 07:38
( h, M: `' V2 t9 D& C; V單片機常用問題嗎?
/ g' W9 F2 q7 I0 L
這個是用PIC單片機產生PWM波,應該比較常見吧




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