机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 2873|回复: 3
打印 上一主题 下一主题

用PIC单片机产生方波遇到这种波形

[复制链接]
跳转到指定楼层
1#
发表于 2018-11-5 20:08:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 冯喆喆 于 2018-11-5 20:11 编辑
3 n  V! T# `. z; B) A, V, `0 ]# H! V# X, H# v
用PIC16F887单片机产生方波,当我把方波频率设为4KHz时波形是正常的,当我改变TIMER2的分频值,从4改为16 ,此时频率应该变为1KHz,此时频率是对了,可是波形却变得很奇怪。  求有经验的大神指导下
4 N" `! n2 |+ l( D! a8 k7 M这是产生的4KHZ正常波形,占空比为50%9 A' X' U5 s& X. h, O
: P  s' E. V1 ~3 v2 P" i

4 u& C7 Z" y# A+ R& Z" c& b" `4 ~
这是1KHZ有问题的波形,占空比为60%
$ j& E0 [  ]6 L+ O5 ]
( X7 v% v) B- g
; L5 ]9 V. Z$ L8 \5 `2 |( N7 V
回复

使用道具 举报

2#
 楼主| 发表于 2018-11-5 20:14:34 | 只看该作者
主要的程序我也贴上来各位看一下" o. `' P, U- n- `+ @) F

  ~/ x, ?/ Q) K! q! t0 X/********端口初始化函数********/' e0 Q# @' Q& R1 x- q
void init()
/ U) e" h$ [& T) w: T, v{
/ b  P0 ^+ P2 v; u4 h% r  T( O4 _5 \        ANSELH=0x00;                     //设置B口为数字I/O口
, X' \, E  K( b0 M( r  g7 z6 u( M        OPTION_REG=0x00;) o, y$ Y' H% Q$ e% V
        WPUB=0xFF;         //设置B口弱上拉
% P  c& m  r5 D* T) m* n  S        INTCON=0x00;       //关总中断) j; d% ]  D$ k+ I& }+ f* E  m
        PIE1=0;            //PIE1的中断禁止
& S/ b. h; y. p* T3 O, ]- N: ?        PIE2=0;            //PIE2的中断禁止
/ l# R) W$ j2 L4 m        TRISB0=1;6 H) ]6 Z+ w) n( O. l& b' X
        TRISB1=1;          //将RB1设置为输入口,按按键
8 Z) ^* C: q/ u& }9 H5 P        TRISB2=1;          //将RB2设置为输入口,按按键
1 t6 K* e# m0 W7 _# a5 C3 r        TRISB3=1;- o( s1 k  t8 n( t
        TRISB4=1;! B9 @+ W- u5 B. J" i# K$ }
        RC1=0;
3 S: n  K. Z9 w' l        TRISC1=0;          //脉宽调制输出引脚,设置为输出
" H% n- ]+ z  J& r$ W}
0 a7 O7 C; n+ c: G  m/********PWM初始化函数********/7 i1 O5 T) Y( g8 R" [5 x
void PWM_Init()2 ^- j9 t5 [1 L0 O
{
9 z, l2 g3 E! }( G; j        PR2=249;           //脉宽调制波形的周期为1000us       
. ?$ t/ `+ b! q9 \2 K! M        CCP2CON=0x0C;      //CCP2模块工作在PWM模式,占空因数的低两位为001 E! s8 P/ X% e5 j8 R. G
        T2CON=0x02;        //禁止TMR2,且前后分频值为16,同时开始输出PWM
  W; M; W$ h) R8 r/ q        CCPR2L=0xB8;       //脉宽调制波形的占空比初始值
9 {$ K) }! x5 [}
5 p( o7 ~  y, N- o/********键盘扫描函数*******    */# o( }+ l4 ]$ {) g3 q) w6 m# U
void keyscan()9 f7 h& w* g2 a) f- \" A! |4 @- ^
{
! Z9 V5 g2 _" k. @5 W        if(RB1==0)                  //如果是RB1键按下
5 K4 F3 h# v1 L, c& [* p# [5 [        {# T. ~9 F& h* G5 @" s1 P, a( B+ L/ V# t
                delay_ms(5);              //延时去抖' D* X" |# G: ?5 g5 K3 ?7 w7 b/ ], m
                if(RB1==0)              //确认是否有键按下
3 W% F5 K/ [2 G2 h- p, A) @                {
' ~! ?5 P  n7 H  f+ ^6 W3 H2 v7 ?                        while(!RB1);        //等待按键释放
% \0 Q. J- p& x! i1 P( A% x                        CCP2CON=0x0C;$ |" d7 _' J+ E
                        CCPR2L=0xB8;                   //80%占空比
. x* l9 L& {4 _% Y7 T                        TMR2ON=1;, I7 j* {8 g2 y# Z* h& a( Q; `
                }9 k# m* w" M8 j! ?: Y
        }
2 Z" J1 p0 C3 b& l2 `# N! h        if(RB2==0)                  //如果是RB2键按下
" L2 K  j  p) [        {  n5 K4 ?% U2 |/ a6 s! B. Y( S
                delay_ms(5);              //延时去抖
8 H1 [2 z: |. Y4 |% b& q5 D7 m5 k                if(RB2==0)              //确认是否有键按下! Z* U7 U1 s  D
                {
% l- ?  ]7 f0 @. @) W3 p( D                        while(!RB2);        //等待按键释放
- _/ o3 [9 h4 o$ x  _                        CCP2CON=0x0C;
  z1 N5 m+ O; m8 H                        CCPR2L=0x96;                   //60%占空比
! `1 S" A4 u# o+ u  |, m# W- Q                        TMR2ON=1;
0 t1 v2 X. w: r4 R9 J                }5 F( X* u. D+ a4 ^% w$ _
        }
0 B1 m* Z0 F2 T' l, ~& D1 d        if(RB0==0)                  //如果是RB0键按下
; o! N  T1 |+ ]5 q- V: n6 N        {% `* t* y8 b3 ]5 @2 a* B$ |8 W+ G
                delay_ms(5);              //延时去抖2 o3 V  c2 w" _! x
                if(RB0==0)              //确认是否有键按下  F4 n  A" U# L; t+ F) B
                {' Y! d' c3 t6 f
                        while(!RB0);        //等待按键释放
8 u3 P( b) m1 y' {5 C; y                        CCP2CON=0x00;                   //关PWM# Q$ h# l2 S7 [) z4 Q
                        TMR2ON=0;                        //禁止TMR25 i. h3 Z/ Y6 f4 m, l7 U& d
                        //delay_ms(5);1 \5 H7 w2 ~5 P( m" K% Q0 F3 L
                        RC1=0;' J- X- n) @9 K0 d% _  h6 w
                }+ Z! d# o: D! j$ c* W) }
        }
7 v! ~1 ]5 _# ]+ g/ Q}0 c* z+ S- e+ \+ d" }0 x* `3 _
/********主函数********/
1 ]. F1 Z# E# x5 V7 Uvoid main()4 u/ i& O  `+ Q' j1 O
{
9 `, F* g% o/ S) z1 Z) M        init();                     //系统初始化$ }9 K" d1 }# Z) o8 Y
        PWM_Init();                 //脉冲宽度初始化$ X$ b+ j( E0 S- g4 L  v
        while(1)7 }- X- E2 a: b1 [; {
        {
  Y0 B1 r) d# J# A$ F0 l4 L                keyscan();              //调用按键扫描处理脉宽因数# y8 u6 f4 |9 r) `
        }
/ r3 s  S$ G( J2 a' i}
回复 支持 反对

使用道具 举报

3#
发表于 2018-11-6 07:38:09 | 只看该作者
单片机常用问题吗?
回复 支持 反对

使用道具 举报

4#
 楼主| 发表于 2018-11-6 14:45:37 | 只看该作者
远祥 发表于 2018-11-6 07:38# c8 n. \; H8 B. H4 A
单片机常用问题吗?

7 P, z. ~; Z0 L6 W这个是用PIC单片机产生PWM波,应该比较常见吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2024-11-23 22:21 , Processed in 0.057747 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表