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

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 3316|回復: 3

用PIC單片機產生方波遇到這種波形

[復制鏈接]
1#
發表于 2018-11-5 20:08:17 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
本帖最后由 馮喆喆 于 2018-11-5 20:11 編輯
3 Z9 o  t5 X" P$ A" s+ `% p! p
  q* V! F. U) {4 h用PIC16F887單片機產生方波,當我把方波頻率設為4KHz時波形是正常的,當我改變TIMER2的分頻值,從4改為16 ,此時頻率應該變為1KHz,此時頻率是對了,可是波形卻變得很奇怪。  求有經驗的大神指導下7 s2 k7 @' m3 Z/ K, i7 s, B
這是產生的4KHZ正常波形,占空比為50%! Q* W0 J' _8 k) f# j
9 K- I6 a4 Q: M- ?, f( Y6 C

; q6 h! B+ Q# F" l4 H1 |: d) X$ z8 d, [, v) V# o
這是1KHZ有問題的波形,占空比為60%
) O6 v% }$ d2 `/ T& t
& j0 m+ u) i% V4 N: k3 I& e- T' w
! s2 ~" P, S' x! r/ H2 \1 H
回復

使用道具 舉報

2#
 樓主| 發表于 2018-11-5 20:14:34 | 只看該作者
主要的程序我也貼上來各位看一下) d8 ]9 Z8 m, T+ h1 Q8 `( V4 R
% L% V2 l2 Z9 V! @: I& H
/********端口初始化函數********/
- f4 R; |- W3 a! Mvoid init()/ _) {$ l) H* R* _; a% r7 k/ F4 H
{8 e) w% G. K, p% `' y9 \: ^* F
        ANSELH=0x00;                     //設置B口為數字I/O口& W; H8 k9 z- c1 p
        OPTION_REG=0x00;& I; M4 `" H! K6 K0 N9 u* T" `/ f
        WPUB=0xFF;         //設置B口弱上拉/ W& l2 g" N3 ]! o
        INTCON=0x00;       //關總中斷, F, }$ L3 J3 A$ @
        PIE1=0;            //PIE1的中斷禁止: s. J- }3 V4 p$ ]
        PIE2=0;            //PIE2的中斷禁止: h4 X- ?& a8 e( S
        TRISB0=1;
/ A9 @1 x4 {7 S% U        TRISB1=1;          //將RB1設置為輸入口,按按鍵) _3 d/ p9 ?- ~2 t- z1 J
        TRISB2=1;          //將RB2設置為輸入口,按按鍵1 M0 r4 Z' N) I: n
        TRISB3=1;
; K  Z- H! Y& \        TRISB4=1;9 t0 ?) a/ N! y/ `2 T5 [
        RC1=0;  l! z* s/ Q/ A) R8 {: s
        TRISC1=0;          //脈寬調制輸出引腳,設置為輸出
7 C9 ^7 M5 _) k' t" T}
: J$ D6 h1 Y- ?* _' ?/********PWM初始化函數********/* \) L$ m3 ?8 p
void PWM_Init()# O' H! x, f* @$ D! r2 p2 P: o. T
{) k4 i2 C9 ^) G! o4 r9 n
        PR2=249;           //脈寬調制波形的周期為1000us       
. R6 w) @# a3 ^+ A! c        CCP2CON=0x0C;      //CCP2模塊工作在PWM模式,占空因數的低兩位為00& S; w" q" p" M" k
        T2CON=0x02;        //禁止TMR2,且前后分頻值為16,同時開始輸出PWM/ M) V& o0 G6 Y) O3 C4 V5 `2 t
        CCPR2L=0xB8;       //脈寬調制波形的占空比初始值
+ D5 q2 A' u! a# n# G) d}! f/ Y7 s8 b( r9 [1 J: Y$ q0 X6 |
/********鍵盤掃描函數*******    */8 P9 Q8 w# p. J* B$ f
void keyscan()1 Y4 ]- ]5 e  o" r6 W
{0 ]+ k/ @3 [' T" l7 I7 m( `7 l" k& w
        if(RB1==0)                  //如果是RB1鍵按下
+ }; }- f+ X/ b# Y        {
  o4 x* F8 H6 q" e$ E$ n                delay_ms(5);              //延時去抖
1 `$ E" _+ C+ |                if(RB1==0)              //確認是否有鍵按下
$ Y8 n9 m/ Q3 |9 O                {
/ F; v! Z6 O% U3 z, b                        while(!RB1);        //等待按鍵釋放9 e$ b7 p. |1 ^8 E+ N( ], i
                        CCP2CON=0x0C;
5 N, h5 k- l9 N' c                        CCPR2L=0xB8;                   //80%占空比3 Z9 b* g3 _1 Y2 ]& {/ D$ H# C$ J; ?
                        TMR2ON=1;
: D" p! A4 c  x- I" a) X                }
. d- U2 [9 }6 n$ t! Q2 v. I        }
5 ?: |: [- z+ q2 p        if(RB2==0)                  //如果是RB2鍵按下
8 \5 o  O; x$ t& H& n2 F, c% P        {8 M& F# T( p# o. `$ G
                delay_ms(5);              //延時去抖' Z, ]9 n; N* J7 O! b* j6 J; k
                if(RB2==0)              //確認是否有鍵按下
" Y6 T" n, A% A4 g+ B! j                {
2 @8 _5 _% ]+ B& I- P; M7 U                        while(!RB2);        //等待按鍵釋放
, j* T$ T' }  a6 G                        CCP2CON=0x0C;  G! Z, J! S4 f1 c: u; \  D* F
                        CCPR2L=0x96;                   //60%占空比# F% ~4 L0 _  Q+ z; O- G
                        TMR2ON=1;* C3 o. X! A+ c/ I1 v
                }
% @) E0 s) }4 l5 l        }
5 w+ i/ B; g" w1 ~        if(RB0==0)                  //如果是RB0鍵按下7 g, E6 N% S% d. ~: N  ]
        {
) i" @$ G( ~# ~8 G                delay_ms(5);              //延時去抖! y8 b! P! z+ G! j
                if(RB0==0)              //確認是否有鍵按下
# ]$ d& \9 g/ M                {' o' e8 L, m# |$ x( {8 }, H
                        while(!RB0);        //等待按鍵釋放
# v( ]& b. G! z% r( H8 W7 ^+ G0 ~                        CCP2CON=0x00;                   //關PWM
7 K( S( p4 a" i9 V  t                        TMR2ON=0;                        //禁止TMR2
6 x8 K5 s3 ^: U$ L; j2 x                        //delay_ms(5);
+ G, q' T! l( x                        RC1=0;
" V$ S3 h; O; a& N; W/ a                }
' C$ f1 V2 ]# U" L$ p' ~1 p- E        }
3 W! z/ u- V+ ~8 D}
4 u) m1 k' n! s4 E  R/********主函數********/
) p5 o% r! A- Y! n' kvoid main()
* d8 {, j: |6 I0 J, ]0 z* R{5 e/ |! e! L; b0 m' V) {( U* E! S
        init();                     //系統初始化
9 h( _9 D) D4 h" M' G& Z; U2 g        PWM_Init();                 //脈沖寬度初始化6 R" V/ e. S! o1 Z7 V! c+ v6 @* ^
        while(1). F' w8 J2 Z5 f- E& j
        {
, x/ H& r$ x1 j6 M! [) k                keyscan();              //調用按鍵掃描處理脈寬因數
" r, A- \* D9 |3 W5 S6 z9 }( f        }
& r9 n4 E9 z' F}
3#
發表于 2018-11-6 07:38:09 | 只看該作者
單片機常用問題嗎?
4#
 樓主| 發表于 2018-11-6 14:45:37 | 只看該作者
遠祥 發表于 2018-11-6 07:38
" d2 Z5 y' X! @0 X' i) M; R: b單片機常用問題嗎?

% c* p8 q# e* I+ p" ?& p# t! N這個是用PIC單片機產生PWM波,應該比較常見吧
您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規則

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

GMT+8, 2025-7-26 14:54 , Processed in 0.085857 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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