![]() |
發(fā)布時(shí)間: 2018-11-5 20:08
正文摘要:本帖最后由 馮喆喆 于 2018-11-5 20:11 編輯 ( T4 I+ B6 `/ d' t% n+ \! G, _* n3 u5 R' j- H, N 用PIC16F887單片機(jī)產(chǎn)生方波,當(dāng)我把方波頻率設(shè)為4KHz時(shí)波形是正常的,當(dāng)我改變TIMER2的分頻值,從4改為16 ,此時(shí)頻 ... |
遠(yuǎn)祥 發(fā)表于 2018-11-6 07:38 這個(gè)是用PIC單片機(jī)產(chǎn)生PWM波,應(yīng)該比較常見吧 |
單片機(jī)常用問題嗎? |
主要的程序我也貼上來各位看一下 /********端口初始化函數(shù)********/ void init(); z! Y+ W" C# g& d {4 J, x( x$ ?. |, y' Z% d; Q: B! c6 K ANSELH=0x00; //設(shè)置B口為數(shù)字I/O口 OPTION_REG=0x00; WPUB=0xFF; //設(shè)置B口弱上拉 INTCON=0x00; //關(guān)總中斷 PIE1=0; //PIE1的中斷禁止 PIE2=0; //PIE2的中斷禁止, b* Z+ U) ?" J TRISB0=1; TRISB1=1; //將RB1設(shè)置為輸入口,按按鍵 TRISB2=1; //將RB2設(shè)置為輸入口,按按鍵$ T6 c) ?: V6 Z( ^/ a# S" p TRISB3=1; TRISB4=1;# L7 J! n# q! H- ^# A+ W( i RC1=0; TRISC1=0; //脈寬調(diào)制輸出引腳,設(shè)置為輸出 }/ K1 b1 z3 n( t* K$ j /********PWM初始化函數(shù)********/, H3 @, d) p7 o; I8 `* c void PWM_Init()- C) \. n6 W: Y0 _ { U8 v9 B1 Z, B( i PR2=249; //脈寬調(diào)制波形的周期為1000us , O( @& P, y4 w- e CCP2CON=0x0C; //CCP2模塊工作在PWM模式,占空因數(shù)的低兩位為000 M/ r, Q e* q# w2 `) i T2CON=0x02; //禁止TMR2,且前后分頻值為16,同時(shí)開始輸出PWM CCPR2L=0xB8; //脈寬調(diào)制波形的占空比初始值 }) e+ w. ]3 x5 } H: y& w4 V- h /********鍵盤掃描函數(shù)******* */! a; L* P1 j" M" s7 Y) Q* _ void keyscan()7 I5 u7 u/ N: \8 c5 m9 D1 j { if(RB1==0) //如果是RB1鍵按下! L x& H7 u5 Y; y+ R+ w {1 x2 ~1 F7 h1 h& L c3 |7 x2 | delay_ms(5); //延時(shí)去抖" E" U: w2 k, p. q if(RB1==0) //確認(rèn)是否有鍵按下 N* A: n- f; }4 W- A { while(!RB1); //等待按鍵釋放3 g Q0 j8 u( b+ g$ M* C CCP2CON=0x0C; CCPR2L=0xB8; //80%占空比 TMR2ON=1;9 i$ l: U: p! V+ Q% R! J( N3 v } }, U" O6 z/ y; r% X# p( j if(RB2==0) //如果是RB2鍵按下 {9 [/ e8 I! J% V- r% L' }& w7 `6 d: | k2 r delay_ms(5); //延時(shí)去抖 if(RB2==0) //確認(rèn)是否有鍵按下 {2 H. v7 v# M& }6 @* U6 i6 C while(!RB2); //等待按鍵釋放# a8 C6 `( X- j: w* D/ | CCP2CON=0x0C; CCPR2L=0x96; //60%占空比 TMR2ON=1;) {9 Y8 ^. \( A& l8 c( L& t }4 J( k( r) u L2 |! ^4 y }* @0 x5 K" g0 i7 T. } if(RB0==0) //如果是RB0鍵按下. N2 r; L/ q" M4 v { delay_ms(5); //延時(shí)去抖4 l5 ^& P* Z/ t( b if(RB0==0) //確認(rèn)是否有鍵按下 { while(!RB0); //等待按鍵釋放' y/ R5 U9 H. J9 K V9 Q7 ~ CCP2CON=0x00; //關(guān)PWM TMR2ON=0; //禁止TMR2% W& e. J" J: X- X$ I //delay_ms(5); RC1=0; }# x- E# j3 G" V; j } }# |2 X! d" ^4 m+ {1 j1 Q4 P! \ /********主函數(shù)********/1 O0 a. }9 Z' A# L+ J$ @ void main()2 p$ w) f' D: F3 _ I7 a3 Q { init(); //系統(tǒng)初始化 PWM_Init(); //脈沖寬度初始化 while(1) {/ I O- e2 o% W! |7 u keyscan(); //調(diào)用按鍵掃描處理脈寬因數(shù)$ Z5 O! B( v1 D5 @7 d; f) A3 ^4 m } } |
Archiver|手機(jī)版|小黑屋|機(jī)械社區(qū) ( 京ICP備10217105號(hào)-1,京ICP證050210號(hào),浙公網(wǎng)安備33038202004372號(hào) )
GMT+8, 2025-7-25 21:37 , Processed in 0.083911 second(s), 21 queries , Gzip On.
Powered by Discuz! X3.5 Licensed
© 2001-2025 Discuz! Team.