5984|0

1379

帖子

0

TA的资源

裸片初长成(中级)

楼主
 

PIC16F877的外围功能模块简单应用实例(3) [复制链接]

 CCP模块的PWM工作方式简介

 CCP模块设置为PWM方式时的初始化程序

/*CCP1模块的PWM工作方式初始化子程序*/

void      CCP1INIT()

{

 CCPR1L=0X7F

 CCP1CON=0X3C                  /*设置CCP1模块为PWM工作方式,且其工作循环

                                                 *的低2位为11,高8位为01111111=7F*/

 INTCON=0X00                            /*禁止总中断和外围中断*/

 PR2=0XFF                                   /*设置PWM的工作周期*/

 TRISC=0XFB                        /*设置CCP1引脚为输出方式*/

}

该初始化子程序设置CCP1模块输出分辨率为10位的PWM波形,且占空比为50%

 

      下面给出一个调试通过的例程,可作为读者编制程序的参考。

#include  <pic.h>

/*该程序用于使CCP1模块产生分辨率为10位的PWM波形,占空比为50%*/

 

/*CCP1模块的PWM工作方式初始化子程序*/

void CCP1INIT()

{

 CCPR1L=0X7F

 CCP1CON=0X3C                  /*设置CCP1模块为PWM工作方式,且其工作

                                                 *循环的低2位为11,高8位为01111111=7F*/

 INTCON=0X00                            /*禁止总中断和外围中断*/

 PR2=0XFF                                   /*设置PWM的工作周期*/

 TRISC=0XFB                        /*设置CCP1引脚为输出方式*/

}

/*主程序*/

main()

{

       CCP1INIT()                            /*CCP1模块的PWM工作方式初始化*/

      T2CON=0X04                  /*打开TMR2,且使其前分频为0

                                                     *同时开始输出PWM波形*/

do

       {

             

       }while(1)                         /*系统开始输出PWM波形。如果系统是

                                                 *多任务的,则可以在此执行其它任务,而

                                                 *不会影响PWM波形的产生*/

}

 

 

2.  程序清单

#include         <pic.h>

/*此程序实现"看门狗"WDT的功能*/

unsigned         long        I

/*系统初始化子程序*/

void             initial()

{

       OPTION = 0X0F                     /*把前分频器分配给WDT,且分频倍率为1:128*/

       TRISD = 0X00                 /*D口设为输出*/

}

/*延时子程序*/

void        DELAY()

{

 for (i=19999--i)

       continue

}

/*主程序*/

main ()

{

       initial()                             /*初始化,设定看门狗的相关寄存器*/

       PORTD = 0X00                /*D口送00H,发光二极管亮*/

       DELAY()                         /*给予一定时间的延时*/

       PORTD = 0XFF               /*D口送FFH,发光二极管灭*/

while(1)

{

}                                        /*死循环,等待看门狗溢出复位*/

}    

=====================================================

   该例在PIC16F877休眠前使8个发光二极管的高4个发光,然后进入休眠工作方式;若按键引起的中断将其激活,则低4个发光。用C语言编写程序时,语句SLEEP()相当于汇编语言中的语句“sleep”,使单片机进入休眠状态。

#include      <pic.h>

/*该程序实现PIC16F877的休眠工作方式,并由实验板上的按键产生"电平变化中断"将其*从休眠状态中激活。休眠与激活的状态由与D口相连的8LED显示。休眠时高4

*LED发光,低4LED熄灭; 激活以后高4LED熄灭,低4LED发光*/

unsigned     long    i

/*系统初始化子程序*/

void initial()

{

                  di()                       /*全局中断禁止,"电平变化中断"只执行唤醒功能*/

                  RBIE=1                 /*PORTB口电平变化中断允许*/

                  RBIF=0                 /*清除B口电平变化中断标志*/

                  TRISB4=1

                  TRISB5=1

                  TRISB2=0

                  TRISB1=0             /*设置与键盘有关的各I/O口的输入输出方式*/

                  TRISD=0X00        /*D口为输出*/

                  PORTB=0X00        /*键盘的行线送低电平,为“电平变化中断” 作准备*/

                  PORTB=PORTB     /*PORTB的值,锁存旧值,也为“电平变化

                                                 *中断”作准备*/

}

/*主程序*/

main ()

{

                  initial()                  /*初始化*/

                  PORTD=0X0F              /*4LED灯亮*/

                  SLEEP()                /*单片机开始进入休眠状态*/

                  PORTD=0XF0              /*激活后,低4LED灯亮*/

while(1)

                  {

                     

                  }

}

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 2/10 下一条
福禄克有奖直播:高精度测温赋能电子制造 报名中!
直播时间:2025年2月28日(周五)上午10:00
直播主题:高精度测温赋能电子制造
小伙伴们儿快来报名直播吧~好礼等你拿!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表