微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC单片机之PCA/PWM

STC单片机之PCA/PWM

时间:11-11 来源:互联网 点击:

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);

}

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top