STC单片机之PCA/PWM
CCAP1H = (temp & 0xFF00) >> & 0xFF00) >> 8;
//
}
if (CF == 1)
{
CF = 0;
}
//
}
PCA.h
/*
* 文 件 名:PCA.h
* 芯 片:STC12C5A60S2
* 晶 振:12MHz
* 创 建 者:冷月
* 创建日期:2010.8.18
* 修 改 者:
* 修改日期:
* 功能描述:2路PCA的捕获、高速输出、16bit定时器、PWM接口
*/
#ifndef _PCA_H_
#define _PCA_H_
#define uchar unsigned char
#define uint unsigned int
//CCAPMn - ECOMn CAPPn CAPNn MATn TOGn PWMn CCFn
// 00H 0 0 0 0 0 0 0 0 无操作,待机状态
// 42H 0 1 0 0 0 0 1 0 8位PWM输出,无中断
// 63H 0 1 1 0 0 0 1 1 8位PWM输出,产生CEXn上升沿中断
// 53H 0 1 0 1 0 0 1 1 8位PWM输出,产生CEX0n下降沿中断
// 73H 0 1 1 1 0 0 1 1 8位PWM输出,产生CEXn跳变中断
// 20H 0 x 1 0 0 0 0 0 16位捕获模式,CEXn上升沿触发捕获
// 10H 0 x 0 1 0 0 0 0 16位捕获模式,CEXn下降沿触发捕获
// 30H 0 x 1 1 0 0 0 0 16位捕获模式,CEXn跳变触发捕获
// 48H 0 1 0 0 1 0 0 0 16位软件定时器
// 4CH 0 1 0 0 1 1 0 0 16位高速脉冲输出
//捕获
#define RISE 0x20 //上升沿捕获
#define DOWN 0x10 //下降沿捕获
//定时器
//CCAPnH,CCAPnL = t / (1/PCA时钟源)
#define TIMER 0x48
//高速输出(8Hz~6MHz)
//CCAPnH,CCAPnL = INT(PCA时钟源/(2*f) + 0.5)
#define HIGH_SPEED_OUT 0x4C
//PWM
//PWM频率 = PCA时钟源 / 256
//占空比 = (CCAP0L / 256) *100%
#define PWM 0x42
//PCA模块中断充许
#define ECCF 0x01
//PCA时钟源
#define CLK0 0x00 //Fosc/12
#define CLK1 0x02 //Fosc/2
#define CLK2 0x04 //定时器0的溢出率
#define CLK3 0x06 //ECI外部时钟
#define CLK4 0x08 //Fosc/1
#define CLK5 0x0a //Fosc/4
#define CLK6 0x0c //Fosc/6
#define CLK7 0x0e //Fosc/8
/*
* 函 数 名:PCA_Init
* 调 用:PCA_Init(0, RISE|ECCF, 0x00, 0x00, CLK0);
* 第1路PCA上捕获模式,升沿捕获
*
* PCA_Init(1, TIMER|ECCF, 0x03, 0xE8, CLK0);
* 第2路PCA定时器模式,PCA时钟源Fosc/12,定时1ms
*
* PCA_Init(0, HIGH_SPEED_OUT|ECCF, 0x17, 0x70, CLK0);
* 第1路PCA高速输出模式,PCA时钟源Fosc/12,输出脉冲频率1KHz
*
* PCA_Init(1, PWM, 0xFF, 0xFF, CLK0);
* 第2路PCA的PWM模式,PCA时钟源Fosc/12
* 功能描述:PCA初始化
*/
void PCA_Init(bit module, uchar PCA_CCAPMn, uchar PCA_CCAPnH, uchar PCA_CCAPnL, uchar PCACLK);
/*
* 函 数 名:InitTimer0
* 调 用:InitTimer0();
* 功能描述:定时器0作为PCA时钟源时,要先初始化定时器0
*/
void InitTimer0(void);
/*
* 函 数 名:Set_PWM_Fre
* 调 用:Set_PWM_Fre(523);
* 设置PWM频率为523Hz
* 功能描述:定时器0作为PCA时钟源时,PWM可设置184Hz~46KHz
*/
void Set_PWM_Fre(uint fre);
/*
* 函 数 名:Set_PWM0
* 调 用:Set_PWM0(40);
* 占空比40%
* 功能描述:设置PWM0占空比
*/
void Set_PWM0(uchar duty);
/*
* 函 数 名:Set_PWM1
* 调 用:Set_PWM1(40);
* 占空比40%
* 功能描述:设置PWM1占空比
*/
void Set_PWM1(uchar duty);
#endif
main.c
/*
* 文 件 名:main.c
* 芯 片:STC12C5A60S2
* 晶 振:12MHz
* 创 建 者:冷月
* 创建日期:2010.8.18
* 修 改 者:
* 修改日期:
* 功能描述:PCA之PWM模式实现LED灯渐亮渐灭
*/
#include
#include "Delay.h"
#include "PCA.h"
/*
* 函 数 名:main
* 功能描述:程序入口
* 输入参数:无
* 返 回 值:无
*/
void main(void)
{
uchar i;
PCA_Init(0, PWM, 0xFF, 0xFF, CLK0);
PCA_Init(1, PWM, 0xFF, 0xFF, CLK0);
while (1)
{
for (i=0; i<100; i++)
{
Set_PWM1(100-i);
Set_PWM0(i);
DelayMs1T(40);
}
for (i=100; i>0; i--)
{
Set_PWM0(i);
Set_PWM1(100 - i);
DelayMs1T(40);
}
}
}
STC单片机PCAPW 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)