/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 PCA实现16位定时器举例-------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966-------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.GXWMCU.com --------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//若无特别说明,工作频率一般为11.0592MHz
#include "reg51.h"
#include "intrins.h"
#define FOSC 11059200L
#define FOSC 11059200L
#define T5KHz (FOSC / 12 / 5000) // 10KHz = (FOSC / 12 / 10000) 实际量测方波2.5K
#define T12KHz (FOSC / 12 / 12000) // 10KHz = (FOSC / 12 / 10000) 实际量测方波 6K
typedef unsigned char u8;
typedef unsigned int u16; //在8位51单片机,uint为16位
u16 value0;
u16 value1;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P_SW1 = 0xA2; //外设功能切换寄存器1
#define CCP_S0 0x10 //P_SW1.4
#define CCP_S1 0x20 //P_SW1.5
sfr CCON = 0xD8; //PCA控制寄存器
sbit CCF0 = CCON^0; //PCA模块0中断标志
sbit CCF1 = CCON^1; //PCA模块1中断标志
sbit CR = CCON^6; //PCA定时器运行控制位
sbit CF = CCON^7; //PCA定时器溢出标志
sfr CMOD = 0xD9; //PCA模式寄存器
sfr CL = 0xE9; //PCA定时器低字节
sfr CH = 0xF9; //PCA定时器高字节
sfr CCAPM0 = 0xDA; //PCA模块0模式寄存器
sfr CCAP0L = 0xEA; //PCA模块0捕获寄存器 LOW
sfr CCAP0H = 0xFA; //PCA模块0捕获寄存器 HIGH
sfr CCAPM1 = 0xDB; //PCA模块1模式寄存器
sfr CCAP1L = 0xEB; //PCA模块1捕获寄存器 LOW
sfr CCAP1H = 0xFB; //PCA模块1捕获寄存器 HIGH
sfr PCAPWM0 = 0xf2;
sfr PCAPWM1 = 0xf3;
sbit PCA_LED0 = P1^0; //PCA测试LED0
sbit PCA_LED1 = P1^1; //PCA测试LED1
void PCA_isr() interrupt 7
{
if (CCF0)
{
CCF0 = 0; //清中断标志
CCAP0L = value0;
CCAP0H = value0 >> 8; //更新比较值
value0 += T5KHz;
PCA_LED0 = !PCA_LED0;
}
if (CCF1)
{
CCF1 = 0; //清中断标志
CCAP1L = value1;
CCAP1H = value1 >> 8; //更新比较值
value1 += T12KHz;
PCA_LED1 = !PCA_LED1;
}
}
void main()
{
P1M1 &= ~1; //P1.x 设置为推挽输出
P1M0 |= 1;
ACC = P_SW1;
ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=0
P_SW1 = ACC; //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
CCON = 0; //初始化PCA控制寄存器
//PCA定时器停止
//清除CF标志
//清除模块中断标志
CL = 0; //复位PCA寄存器
CH = 0;
CMOD = 0x00; //设置PCA时钟源 - 系统时钟12分频
//禁止PCA定时器溢出中断
value0 = T5KHz;
CCAP0L = value0;
CCAP0H = value0 >> 8; //初始化PCA模块0
value0 += T5KHz;
value1 = T12KHz;
CCAP1L = value1;
CCAP1H = value1 >> 8; //初始化PCA模块1
value1 += T12KHz;
CCAPM0 = 0x49; //PCA模块0为16位定时器模式
CCAPM1 = 0x49; //PCA模块0为16位定时器模式
CR = 1; //PCA定时器开始工作
EA = 1;
while (1);
}
///*---------------------------------------------------------------------*/
///* --- STC MCU Limited ------------------------------------------------*/
///* --- STC15F4K60S4 系列 PCA实现16位定时器+16位外部捕获+6/7/8位PWM-----*/
///* --- Mobile: (86)13922805190 ----------------------------------------*/
///* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
///* --- Tel: 86-0513-55012928,55012929,55012966-------------------------*/
///* --- Web: www.STCMCU.com --------------------------------------------*/
///* --- Web: www.GXWMCU.com --------------------------------------------*/
///* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
///* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
///*---------------------------------------------------------------------*/
////本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
////若无特别说明,工作频率一般为11.0592MHz
//#include "reg51.h"
//#include "intrins.h"
//#define FOSC 11059200L
//#define T1ms (FOSC / 1000)
//typedef unsigned char BYTE;
//typedef unsigned int WORD;
//typedef unsigned long DWORD;
//sfr P1M1 = 0x91;
//sfr P1M0 = 0x92;
//sfr P_SW1 = 0xA2; //外设功能切换寄存器1
//#define CCP_S0 0x10 //P_SW1.4
//#define CCP_S1 0x20 //P_SW1.5
//sfr CCON = 0xD8; //PCA控制寄存器
//sbit CCF0 = CCON^0; //PCA模块0中断标志
//sbit CR = CCON^6; //PCA定时器运行控制位
//sbit CF = CCON^7; //PCA定时器溢出标志
//sfr CMOD = 0xD9; //PCA模式寄存器
//sfr CL = 0xE9; //PCA定时器低字节
//sfr CH = 0xF9; //PCA定时器高字节
//sfr CCAPM0 = 0xDA; //PCA模块0模式寄存器
//sfr CCAPM1 = 0xDB; //PCA模块1模式寄存器
//sfr CCAPM2 = 0xDC; //PCA模块2模式寄存器
//sfr CCAP0L = 0xEA; //PCA模块0捕获寄存器 LOW
//sfr CCAP1L = 0xEB; //PCA模块1捕获寄存器 LOW
//sfr CCAP2L = 0xEC; //PCA模块2捕获寄存器 LOW
//sfr CCAP0H = 0xFA; //PCA模块0捕获寄存器 HIGH
//sfr CCAP1H = 0xFB; //PCA模块1捕获寄存器 HIGH
//sfr CCAP2H = 0xFC; //PCA模块2捕获寄存器 HIGH
//sfr PCA_PWM0 = 0xF2; //PCA模块0的PWM寄存器
//sfr PCA_PWM1 = 0xF3; //PCA模块1的PWM寄存器
//sfr PCA_PWM2 = 0xF4; //PCA模块2的PWM寄存器
//sbit PCA_LED1 = P1^1; //测试LED1
//WORD value;
//BYTE cnt; //存储PCA计时溢出次数
//DWORD count0; //记录上一次的捕获值
//DWORD count1; //记录本次的捕获值
//DWORD length; //存储捕获到的脉冲宽度(count1 - count0)
//void PCA_isr() interrupt 7
//{
// if (CF) //判断是否为PCA计时溢出中断
// {
// CF = 0;
// cnt++; //PCA计时溢出次数+1
// }
//
// if (CCF0) //判断是否为CCF0中断(16位定时器中断)
// {
// CCF0 = 0; //清中断标志
// CCAP0L = value;
// CCAP0H = value >> 8; //更新比较值
// value += T1ms;
// PCA_LED1 = !PCA_LED1;
// }
//
//}
//void main()
//{
// P1M1 &= ~1; //P1.x 设置为推挽输出
// P1M0 |= 1;
//
// ACC = P_SW1;
// ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=0
// P_SW1 = ACC; //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
//
// CCON = 0; //初始化PCA控制寄存器
// //PCA定时器停止
// //清除CF标志
// //清除模块中断标志
// CL = 0; //复位PCA寄存器
// CH =
没有合适的资源?快使用搜索试试~ 我知道了~
STC15 不借助定时器仅用PCA输出可控频率的PWM波
共8个文件
oscm_3:1个
administrator:1个
a51:1个
5星 · 超过95%的资源 需积分: 50 45 下载量 146 浏览量
2020-01-19
09:19:58
上传
评论 4
收藏 23KB ZIP 举报
温馨提示
是用STC15W系列单片机(本例直接可用STC15W401-408AS于MCU)直接测试功能的KEIL4工程。不需要经过任何定时器,直接采用PCA比较器功能,分别输出可控频率的PWM波型,占空比50%。
资源推荐
资源详情
资源评论
收起资源包目录
OSCM_PCA作定时器输出PWM.zip (8个子文件)
OSCM_PCA作定时器输出PWM
OSCM_3.uvopt 9KB
OSCM_3.uvgui.Administrator 138KB
OSCM_3.hex 483B
OSCM_3.M51 6KB
OSCM_3 5KB
STARTUP.A51 6KB
OSCM_3.uvproj 13KB
main.c 9KB
共 8 条
- 1
资源评论
- jiaobaopan2021-04-19PWM输出了例程,可以做项目参考例程。
seniorbb
- 粉丝: 12
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功