机械必威体育网址
标题:
用PIC单片机产生方波遇到这种波形
[打印本页]
作者:
冯喆喆
时间:
2018-11-5 20:08
标题:
用PIC单片机产生方波遇到这种波形
本帖最后由 冯喆喆 于 2018-11-5 20:11 编辑
2 ]" v0 e7 n+ T" j/ y+ F
( I: b/ K# k# b* j! o; E* t
用PIC16F887单片机产生方波,当我把方波频率设为4KHz时波形是正常的,当我改变TIMER2的分频值,从4改为16 ,此时频率应该变为1KHz,此时频率是对了,可是波形却变得很奇怪。 求有经验的大神指导下
/ V H5 D7 H& T$ j e: O
这是产生的4KHZ正常波形,占空比为50%
( k* Y( Y X6 c/ }
+ V" B: {7 a! }# k
(, 下载次数: 44)
上传
点击文件名下载附件
下载积分: 威望 -10 点
, q4 n1 F# z. e1 ~8 X5 G
+ J M( V" a2 Z! [8 B" C
这是1KHZ有问题的波形,占空比为60%
) q k% B# y! Z8 x1 Z" s* b
(, 下载次数: 38)
上传
点击文件名下载附件
下载积分: 威望 -10 点
, ?2 P( T o, I8 y6 p% N
0 y' A- ?1 C( \6 W0 A1 X9 y
作者:
冯喆喆
时间:
2018-11-5 20:14
主要的程序我也贴上来各位看一下
) [# z# p! Z) n* m/ I
5 v* i) [9 F M1 `/ z. Q
/********端口初始化函数********/
% ~( s9 P# V$ x, r3 u' }
void init()
9 @/ l7 f2 i4 Q; T
{
! i! O$ k- ?! D, x
ANSELH=0x00; //设置B口为数字I/O口
: D& ^. u8 i" F4 X. y4 N L
OPTION_REG=0x00;
5 L: n1 l$ X' c. p- _3 G# h
WPUB=0xFF; //设置B口弱上拉
* X; W# y# i3 w# M0 W
INTCON=0x00; //关总中断
: B- t0 B4 F1 G9 H6 c! n
PIE1=0; //PIE1的中断禁止
( H, S1 s+ M' N9 v- t9 ?
PIE2=0; //PIE2的中断禁止
" `( [( I8 e: ?1 _0 s. l
TRISB0=1;
4 B9 l* w! |( \) O5 F
TRISB1=1; //将RB1设置为输入口,按按键
0 x9 c, E, ~# l3 W3 y' N
TRISB2=1; //将RB2设置为输入口,按按键
0 p1 l: w( [; n
TRISB3=1;
+ f4 l1 A! ?, E" R3 a1 w
TRISB4=1;
: U7 d7 F) ]$ U- K& }: r0 [' n" S
RC1=0;
: K( ~' C5 W8 E7 J& F
TRISC1=0; //脉宽调制输出引脚,设置为输出
2 m) d) p/ {( {" h4 o" r( U0 i# R* k
}
7 q3 w# J, N% P
/********PWM初始化函数********/
. J3 V" ^$ I$ g8 j: @- t
void PWM_Init()
) G/ s& ~0 F8 X
{
/ p7 q- @8 N1 o/ ^$ r, \5 ?
PR2=249; //脉宽调制波形的周期为1000us
& d: R" n4 P# o; g9 _
CCP2CON=0x0C; //CCP2模块工作在PWM模式,占空因数的低两位为00
; Y% T% o5 B7 d
T2CON=0x02; //禁止TMR2,且前后分频值为16,同时开始输出PWM
! b8 A$ `* l1 \4 d/ @) ]8 H) S# N
CCPR2L=0xB8; //脉宽调制波形的占空比初始值
6 s: ], F8 ` O' V
}
6 L t G- e: w) @; F3 w
/********键盘扫描函数******* */
+ t2 J. W+ l+ z8 s: T2 `
void keyscan()
: }/ g/ ^7 w1 [) ` a
{
5 @. \2 Q$ p' R+ Y' J/ V
if(RB1==0) //如果是RB1键按下
+ l, M& y3 G6 w$ X
{
1 y- V* V, N9 |9 A$ D% u
delay_ms(5); //延时去抖
' I: v* Y# @7 c7 ?+ ^+ u
if(RB1==0) //确认是否有键按下
+ Z/ k. x6 p8 V5 q
{
. T3 E) A& N8 l: z" H3 t: q" u% {
while(!RB1); //等待按键释放
: v7 Q5 {4 g( M1 ]! j* k
CCP2CON=0x0C;
; i6 H6 I& [) P% G# N0 x+ @ `
CCPR2L=0xB8; //80%占空比
- m- Y% |2 G6 L: T
TMR2ON=1;
7 e$ G3 Q# x; l" e- K: _
}
9 }+ {) p4 [: t* k( c# U# |- O7 O1 z# O
}
/ @8 ?& P% U0 w/ q6 L1 w
if(RB2==0) //如果是RB2键按下
3 x) a9 Q, w6 G
{
7 G6 x3 j( P |2 P% `1 k$ p3 N
delay_ms(5); //延时去抖
0 d- \4 N$ B' e0 o; _
if(RB2==0) //确认是否有键按下
4 C3 y5 g/ y" `
{
' ?/ H; T, p, K4 y/ R5 _. R/ c; Y+ J4 K
while(!RB2); //等待按键释放
# V) i4 ] q. ] z3 Y; r) e* \: ?1 C
CCP2CON=0x0C;
+ V0 r$ g$ \+ Z1 m- S
CCPR2L=0x96; //60%占空比
$ u/ o1 e- u/ p( u
TMR2ON=1;
: A9 n; D }) X' e4 V
}
1 j# p4 S! K T" v m3 \8 y" z& y+ }
}
J: V5 z1 B: ]6 a/ ^+ I4 {- i) A
if(RB0==0) //如果是RB0键按下
/ b+ j1 t: `/ X+ K% g
{
( ]* m, T9 B: G: ]
delay_ms(5); //延时去抖
) G. @2 g m4 X
if(RB0==0) //确认是否有键按下
) k- z a( W+ U/ C$ s
{
6 B3 I- P, O/ k$ Q! x. k; F
while(!RB0); //等待按键释放
- J; n0 J# m$ X5 p* V
CCP2CON=0x00; //关PWM
2 H: r9 D8 C( E( [( H+ `6 N
TMR2ON=0; //禁止TMR2
% B* J6 s' a6 @7 I2 U3 A
//delay_ms(5);
5 `! {* f1 K1 |1 ? {
RC1=0;
: T" u8 w8 B2 H# T: S$ \4 | t5 [
}
7 e- [, z4 `1 Z1 ?( | T
}
9 e }/ g: \7 G& Z: V
}
7 u, [/ {) J3 o. U
/********主函数********/
' K1 w: w1 }1 u! k |
void main()
' d# ^+ ]9 `6 R6 h, _' x3 T3 f
{
+ \/ v6 Z8 c# z7 K9 V" s7 s
init(); //系统初始化
2 X, [- ~; Q' O5 {" z; ?" r
PWM_Init(); //脉冲宽度初始化
+ W5 q, Z$ ]! M6 Y* c: L2 Q
while(1)
- O, Z6 D a% g( U( n/ c2 a
{
! `$ d1 K6 e2 f; p/ p
keyscan(); //调用按键扫描处理脉宽因数
) [8 I' T1 B' J
}
: n: @! g D( J. T" p
}
作者:
远祥
时间:
2018-11-6 07:38
单片机常用问题吗?
作者:
冯喆喆
时间:
2018-11-6 14:45
远祥 发表于 2018-11-6 07:38
0 f& {/ L. ]. |9 W
单片机常用问题吗?
+ v/ ?# }: h) y2 @
这个是用PIC单片机产生PWM波,应该比较常见吧
欢迎光临 机械必威体育网址 (//www.szfco.com/)
Powered by Discuz! X3.4