//*************************************************************
// |-| |-| |-|
// | | | | | |
// __| |________| |_______|_|_____------>PWM1
//
// |----| |----| |----|
// | | | | | |
// __| |_____| |____| |_------>PWM2
//本实验利用PIC单片机的CCP模块功能产生PWM功能,PWM的周期为:
//(PR2+1)*4TOSC*(TMR2预分频值)
//了解CCP模块的CCP1CON寄存器功能,
//了解TMR2与CCP模块的之间关系,
//掌握对CCP模块的相关寄存器的初始化及设置
//软件平台:XC8编程器与MPLAB X IDE集成开发环境
//作者: 孙安青(Sun An-qing)
//利用CCP1模块产生的PWM信号由RC2引脚输出,
//同时利用CCP2模块产生的PWM信号由RC1引脚输出,两者都可用示波器即可
//观察到该PWM波形.
修改者:Leo
时间:20101223
显示效果让LED灯显示效果由亮到灭, 再到亮,再到灭。
/* * 设置步骤见datasheet 的page 68 setup for PWM operation */
#include #define uchar unsigned char #define uint unsigned int // CONFIG #pragma config FOSC = HS // 12MHZ ???? #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT disabled) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
void delay1ms(uint DelayTime)
{
uint temp;
for(;DelayTime>0;DelayTime--)
{
for(temp=0;temp<270;temp++)
{;}
}
}
void main(void)
{
//***********************************************************
CCP1M3=1;//Enable CPP1 Work as PWM mode
CCP1M2=1;
CCP1M1=1;
CCP1M0=1;
TRISC2=0;//Enable RC2 work as output
CCPR1L=0x10;//PWM脉宽值,改变PWM的脉宽,只需改变CCPR1L中的值
CCP1X=0;//以及CCP1CON中的CCP1X和CCP1Y这两个位的值
CCP1Y=0;
//***********************************************************
CCP2M3=1;//Enable CPP2 Work as PWM mode
CCP2M2=1;
CCP2M1=1;
CCP2M0=1;
TRISC1=0;//Enable RC1 work as output
CCPR2L=0x20;//PWM脉宽值,改变PWM的脉宽,只需改变CCPR2L中的值
CCP2X=0;//以及CCP2CON中的CCP2X和CCP2Y这两个位的值
CCP2Y=0;
//***********************************************************
TOUTPS3=0;//Enable TMR2--->1:1
TOUTPS2=0;
TOUTPS1=0;
TOUTPS0=0;
T2CKPS1=1;//Enable TMR2--->1:16
T2CKPS0=1;
TMR2ON=1;//Enable TMR2 Working
TMR2=0;
while(1)
{
for(;num <= 1023; num++)
{
PR2=num;//PWM周期,改变PWM的周期,只需改变PR2中的值即可
delay1ms(10);
}
}
}
关键字:PIC16F877A CCP使用
引用地址:
PIC16F877A 的CCP使用
推荐阅读最新更新时间:2024-03-16 15:19
PIC16F877A 看门狗定时器实验
//*******************PIC16F877A 看门狗定时器实验******************* // //PORTA,PORTB,PORTC,PORTD,PORTE复位时为输入状态 //PORTA.4(RA4)为开漏输出 // //WDT运行于独立的内部RC振荡器,即使器件时钟停振,WDT仍正常工作 //PIC16F877A单片机的WDT只能在烧写芯片时通过配置位启动或停止 //WDT基本溢出时间为18ms,由于温度影响,该值在7-33ms之间变化 //WDT和TMR0共用一个预分频器 //PSA=1; //预分频器分配给WDT使用 //PS2 PS1 PS0 WDT //
[单片机]
PIC16F877A单片机在智能双电源装置中的应用
1. 智能双电源装置的简介 随着对供电可靠性的要求也越来越高,很多场合用两路电源来保证供电的可靠性。当常用电源异常,智能双电源装置能自动切换到备用电源,智能双电源装置就是这种在两路电源之间进行可靠切换、以保证供电的装置。在医院、宾馆和矿山等有广泛的应用。 智能双电源装置由开关本体和控制器两部分组成。开关本体由电机通过机械联锁机构控制常用电源的断路器和备用电源的断路器的分合,进而控制电源的切换。控制器通过对电压的采样来判断电源是否异常,如果出现异常应产生相应的切换。 2. PIC16F877A的简介 美国Microchip公司的PIC 8位单片机其生产史11年,但现在其产量已跃居世界第二位(仅次于Motoro
[单片机]
pic16f877a.h中文注释
存放路径:在PICC软件hi-tech安装目录下,?:\Microchip\cc8.05\include,找到pic1687xa.h,里面即有 以下是头文件内容及详细注释: /* * Header file for the Microchip * PIC 16F873A chip * PIC 16F874A chip * PIC 16F876A chip * PIC 16F877A chip * Midrange Microcontroller */ #if defined(_16F874A) || defined(_16F877A) #define __PINS_40 #endif static volatile unsign
[单片机]
PIC16f877A读写24c02程序
P IC 16f877A读写24c02程序 #include pic.h #include string.h #define uchar unsigned char #define uint unsigned int static volatile unsigned char a CC @ 0x20; //发收数据暂存器 static volatile bit acc0 @ (unsigned)&acc*8+0; //接收 static volatile bit acc7 @ (unsigned)&acc*8+7; //发送 static volatile unsigned char err
[单片机]
PIC16F877A单片机控制Modem的串行通信设计
在工程中,常采用Modem通过模拟线路进行数据的远程传输。我们用工业级PIC16F87系列单片机控制Modem完成串行异步/同步通信,在较低速率的线路上实现了数据的实时传输,收到了很好的效果。 本文就系统中PIC单片机控制Modem的串行通信技术,在硬件、软件两方面进行了分析。 1 PIC单片机及其同步/异步串行接口USART模块功能简介 PIC16F877A单片机内部有8K*14的FLASH程序存储器和512字的RAM数据存储器:不仅采用哈佛体系结构,而且还采用哈佛总线结构,流水线操作,PIC16F877A大大提高了指令执行速度,PIC单片机的系统时钟可以工作在DC- 20MHz的频率范围之内。优化的CPU结
[单片机]
PIC16F877A 内部EEPROM读写演示Demo
#include htc.h #include stdio.h __CONFIG(0xFF32); #define u8 unsigned char #define u16 unsigned int void Delay_ms(u16 xms) { int i,j; for(i=0;i xms;i++) { for(j=0;j 71;j++) ; } } void EEPROM_write(u8 addr,u8 data) { GIE=0; while(WR==1); EEADR=addr; EEDATA=data; EEPGD=0; //0-EEPROM 1-Program WREN=1
[单片机]
PWM的小程序在PIC16F877A上的应用
/*该程序用于使CCP1模块产生分辨率为10位的PWM波形,占空比为50%*/ #include p18f458.h /*CCP1模块的PWM工作方式初始化子程序*/ void CCP1INIT() { CCPR1L=0X7F; CCP1CON=0X3C; /*设置CCP1模块为PWM工作方式,且其工作 循环的低2位为11,高8位为01111111=7F*/ INTCON=0X00; /*禁止总中断和外围中断*/ PR2=0XFF; /*设置PWM的工作周期*/ TRISC=0XFB; /*设置CCP1引脚为输出方式*/ } /*主程序*/ main() { C
[单片机]
PIC16F877A单片机接收BA5104红外线遥控解码程序
//熟悉使用单片机进行红外线遥控解码 //1、首先根据BA5104遥控IC的编码形式进行解码 //2、把解码出来的按键用LED指示 //************************************************** //************************************************** //硬件设置: //1、SW1开关2闭合,其他断开 //2、SW2开关1闭合,其他断开 //3、SW4开关全部闭合 //************************************************** //******************************
[单片机]