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口相连的8个LED显示。休眠时高4个 *LED发光,低4个LED熄灭; 激活以后高4个LED熄灭,低4个LED发光*/ 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; /*高4个LED灯亮*/ SLEEP(); /*单片机开始进入休眠状态*/ PORTD=0XF0; /*激活后,低4个LED灯亮*/ while(1) { ; } }
|