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

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 3312|回復: 3

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

[復制鏈接]
1#
發表于 2018-11-5 20:08:17 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
本帖最后由 馮喆喆 于 2018-11-5 20:11 編輯 , ^% U7 ]0 W7 ?: I, h
2 _  h5 B. C& T: u2 w, p
用PIC16F887單片機產生方波,當我把方波頻率設為4KHz時波形是正常的,當我改變TIMER2的分頻值,從4改為16 ,此時頻率應該變為1KHz,此時頻率是對了,可是波形卻變得很奇怪。  求有經驗的大神指導下
  V$ ?9 q1 i2 R# s- ?, h1 Q' q* E3 L這是產生的4KHZ正常波形,占空比為50%
9 f( b* }% @" V" d8 Y
8 M. H% T$ O& X  ^$ g
+ R3 E, G0 b, H0 S" b5 m' b( r" v: q, a. l* r
這是1KHZ有問題的波形,占空比為60%/ |7 v% R$ k( I% W0 V7 c
0 K& \& N; N& r% T' M' A

0 s4 G& q, e" N7 K$ r
回復

使用道具 舉報

2#
 樓主| 發表于 2018-11-5 20:14:34 | 只看該作者
主要的程序我也貼上來各位看一下# o# S  w- J8 ?: f+ n
5 q1 O; Y% H4 S4 U  n
/********端口初始化函數********/" y) M' |" {8 g2 o7 H; @3 u1 a
void init()2 U4 Q  q8 \) {* N) J! n  M
{
4 a" A1 V$ [* X9 Y        ANSELH=0x00;                     //設置B口為數字I/O口
7 s9 J, h) R0 b9 K( |        OPTION_REG=0x00;
. Y8 @& Y: |! _        WPUB=0xFF;         //設置B口弱上拉
  a+ b0 r9 |6 J        INTCON=0x00;       //關總中斷, d+ q! L7 ^; {3 `+ J; h
        PIE1=0;            //PIE1的中斷禁止2 G7 {& l# q, q, T
        PIE2=0;            //PIE2的中斷禁止
; D/ ?, X& T8 c        TRISB0=1;
) l3 l* k, g) o% J4 z        TRISB1=1;          //將RB1設置為輸入口,按按鍵
6 s. E/ O% m% u4 V0 x3 d0 @. \( u        TRISB2=1;          //將RB2設置為輸入口,按按鍵4 y, W) s* S4 ~
        TRISB3=1;# w1 y9 b( W: `' Z% i- c
        TRISB4=1;
9 u- U( g& V, H1 W        RC1=0;
0 x* N, F/ D0 g        TRISC1=0;          //脈寬調制輸出引腳,設置為輸出4 M4 ^0 `1 r) y0 z, L
}
3 {! W1 f* |; T0 t9 y$ ?, F/********PWM初始化函數********/
0 Z0 ?9 f' W8 U) Bvoid PWM_Init(); v7 p' V7 B# [0 ~- W7 y
{
8 \' T# L. ?% }, J) M        PR2=249;           //脈寬調制波形的周期為1000us        , p' E: a4 G0 I% _! r8 x7 g" b! O
        CCP2CON=0x0C;      //CCP2模塊工作在PWM模式,占空因數的低兩位為00
! r# Q" q* s: F6 H7 S4 V# b        T2CON=0x02;        //禁止TMR2,且前后分頻值為16,同時開始輸出PWM
; Q, _! y. t: W4 R" @        CCPR2L=0xB8;       //脈寬調制波形的占空比初始值
" @8 i) P7 `2 X" P3 ~3 M) C! X}9 K' y$ W- `9 x2 s' p0 ], w
/********鍵盤掃描函數*******    */
2 N- G+ Y) _- C9 @2 N7 z8 v% ?0 P& Lvoid keyscan()
/ k  x/ U& c% s2 k{+ R. @+ N% P4 ]: |5 r( f2 f2 T
        if(RB1==0)                  //如果是RB1鍵按下
! h4 }' Q7 M6 K" {8 n        {
+ P/ d3 }. j1 M9 d( m4 S) s                delay_ms(5);              //延時去抖
& \+ q- C  R: x* Y3 Q                if(RB1==0)              //確認是否有鍵按下
6 X. w* Y8 X2 M  z, z6 K                {
4 z$ K7 O1 Q- e2 E5 r: D                        while(!RB1);        //等待按鍵釋放( {# b& P* |5 A. L4 Z9 |" g* O
                        CCP2CON=0x0C;
6 M, I; G: q' z% ^1 E                        CCPR2L=0xB8;                   //80%占空比
! D+ f. s: m6 z  h6 f/ I                        TMR2ON=1;$ V7 Z! i' A. X
                }
1 ^$ j7 v3 s" m2 l        }- Y, S  I4 Z0 c, M% M
        if(RB2==0)                  //如果是RB2鍵按下
- j, V" V( h( Y        {
8 H2 S4 ?9 O, @0 I                delay_ms(5);              //延時去抖
) S+ V- @/ L& s- ?$ |                if(RB2==0)              //確認是否有鍵按下! B: a2 K: i, S$ Q6 f7 j6 ^4 }
                {
) h0 B& b  M$ J2 d* t) a! h4 C. d                        while(!RB2);        //等待按鍵釋放
( f  @- Q+ v+ J- L5 e7 B( A                        CCP2CON=0x0C;# E% D. c2 @  j9 c3 U" w( V
                        CCPR2L=0x96;                   //60%占空比8 h9 c$ s  y0 `
                        TMR2ON=1;1 }! Q; U' ]  H0 m  k* b
                }
& v! n8 ]  h) M4 e        }
* i: m- S- E; r* W; W        if(RB0==0)                  //如果是RB0鍵按下6 e- S: L! [4 [
        {& E5 W) m* z8 Y
                delay_ms(5);              //延時去抖3 t' r, _4 w( t, j( t' X6 i
                if(RB0==0)              //確認是否有鍵按下1 z0 B# W) U6 ?7 @! H, l1 k
                {
& [' q: F/ U/ O! H4 P# A                        while(!RB0);        //等待按鍵釋放
' Z/ `3 U6 X9 v5 C6 R$ }                        CCP2CON=0x00;                   //關PWM& _# j9 ?# B: z( Q3 q+ Z
                        TMR2ON=0;                        //禁止TMR22 a/ D! `- k% ]: d
                        //delay_ms(5);
7 n" z4 {. F) o0 |2 r( _                        RC1=0;
3 k% g* T/ |+ b# n- w                }
) C# g) ~+ m, B1 w2 r4 b; S        }6 h( g9 a! M) m0 k; O  |
}. |+ d& B) ^' M) r. t
/********主函數********/
: n- W& R( @8 r# `/ M  tvoid main()
2 P% H* j0 m' K$ U{' K, B0 A7 z+ G2 w4 P
        init();                     //系統初始化
, d' W+ \, z- ]0 m        PWM_Init();                 //脈沖寬度初始化
. y9 @8 J; G% Y' t        while(1)9 \! F" i  h7 d- {% y7 a
        {
2 b+ S$ t2 i9 L2 ~                keyscan();              //調用按鍵掃描處理脈寬因數, n# u5 B/ E  ^. k. o& S
        }
6 }5 X1 Q. D- C+ H2 |}
3#
發表于 2018-11-6 07:38:09 | 只看該作者
單片機常用問題嗎?
4#
 樓主| 發表于 2018-11-6 14:45:37 | 只看該作者
遠祥 發表于 2018-11-6 07:38
, V4 l. X0 j- K單片機常用問題嗎?
9 r, D, h1 k4 c" c# R# K" X9 H
這個是用PIC單片機產生PWM波,應該比較常見吧
您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規則

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

GMT+8, 2025-7-25 21:37 , Processed in 0.070218 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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