您的位置 首页 新品

STC12C5201AD单片机的PWM功用的使用总结

52xxAD系列单片机的内部集成了两路可编程计数阵列模块(PCA),可用于软件定时器、外部脉冲的捕捉、高速输出和脉宽调制输出(PWM)。这里主要

52xxAD系列单片机的内部集成了两路可编程计数阵列模块(PCA),可用于软件定时器、外部脉冲的捕捉、高速输出和脉宽调制输出(PWM)。

这儿主要是对PWM输出功用进行介绍。
首先要清楚与PCA/PWM运用有关的特别功用寄存器

符号
描绘
地址
位地址及其符号
复位值
B7
B6
B5
B4
B3
B2
B1
B0
CCON
PCA control register
D8H
CF
CR
CCF1
CCF0
00xx,xx00
CMOD
PCA mode register
D9H
CIDL
CPS2
CPS1
CPS0
ECF
0xxx,0000
CCAPM0
PCA module 0 mode register
DAH
ECOM0
CAPP0
CAPN0
MAT0
TOG0
PWM0
ECCF0
X000,0000
CCAPM1
PCA module 1 mode register
DBH
ECOM1
CAPP1
CAPN1
MAT1
TOG1
PWM1
ECCF1
X000,0000
CL
PCA base time low
E9H
0000,0000
CH
PCA base time high
F9H
0000,0000
CCAP0L
PCA module_0 captureregister low
EAH
0000,0000
CCAP0H
PCA module0 capture register high
FAH
CCAP1L
PCA module_1 capture register low
EBH
0000,0000
CCAP1H
PCA module_1 capture register high
FBH
0000,0000
PCA_PWM0
PCA PWM mode auxiliary register 0
F2H
EPC0H
EPC0L
Xxxx,xx00
PCA_PWM1
PCA PWM mode auxilia
F3H
EPC1H
EPC1L
Xxxx,xx00
1、PCA作业形式寄存器CMOD
CIDL:闲暇形式下是否中止PCA计数的操控位
当CIDL=0时,闲暇形式下PCA计数器持续作业
当CIDL=1时,闲暇形式下PCA计数器中止作业
CPS2CPS1CPS0:pca计数器脉冲源挑选操控位。
0 0 0 0,体系时钟SYSCLK/12
0 0 1 1,体系时钟SYSCLK/2
0 1 0 2,定时器0的溢出脉冲。因为定时器0能够作业在1T形式,所以能够到达计一个时钟就溢出,然后到达最高频率CPU作业时时钟SYSCLOCK,经过改动定时器0的溢出率,能够完成可调频率的PWM输出。
0 1 1 3,ECI/P1.2(或P1.4)脚输入的外部时钟(最大速率=SYSCLK/2)
1 0 0 4,体系时钟 SYSCLK
1 0 1 5,体系时钟/4,sysclk/4
1 1 0 6,体系时钟/6,
1 1 1 7, 体系时钟/8
2、PCA操控寄存器CCON
CF:PCA计数器阵列溢出标志位。当PCA计数器溢出时,CF由硬件置位。假如CMOD寄存器的ECF方位位,则CF标志可用来发生中止。CF位可经过硬件或软件置位,但只可经过软件清零。
CR:PCA计数器阵列运转操控位,该位经过软件置位,用来发动计数器阵列计数,经过软件清零,用来封闭PCA计数器。
CCF1:pca模块1中止标志。当呈现匹配或捕获时该位由硬件置位,有必要经过软件清零
CCF0:PCA模块0中止标志。
3、PCA比较/捕获寄存器CCAPM0和CCAPM1
ECOM0:答应比较器功用操控位。为1,答应
CAPP0:正捕获操控位。为1,答应
CAPN0:负捕获操控位。为1,答应
MAT0:匹配操控位。
为1时,PCA计数值与模块的比较/捕获寄存器的值的匹配将置位CCON寄存器的中止标志位CCF0。
TOG0:翻转操控位。当tog0=1时,作业在PCA高速输出形式,PCA计数器的值与模块的比较/捕获寄存器的值的匹配将使CEX0脚翻转。(CCP0/PCA0/PWM0/P1.3)
PWM0:脉冲调理形式
当PWM0=1时,答应CEX0脚用作脉宽调理输出(CCP0/PCA0/PWM0/P1.3)
ECCF0:时能CCF0中止。使能寄存器CCON的比较/捕获标志CCF0,用来发生中止。
4、PCA的16位寄存器——低8位CL和高8位CH
用于保存PCA的装载值。
5、PCA捕捉/比较寄存器——CCAPnL(低位字节)和CCAPnH(高位字节)
当PCA模块用于捕获或比较时,它们用于保存各个模块的16位捕捉计数值;当PCA模块用于PWM形式时,它们用来操控输出的占空比。其间,n=0、1,别离对应模块0和模块1.复位值均为00H,对应的地址别离为:
CCAP0_EAH CCAP0H_FAH:
CCAP1_EBHCCAP1H_FAH;
PCA模块的作业形式设定表如下:
ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn模块功用
0 0 0 0 0 0 0无此操作
1 0 0 0 0 1 0 8位PWM,无中止
1 1 0 0 0 1 1 8位PWM输出,由低变高可发生中止
1 0 1 0 0 1 1 8位PWM输出,由高变低可发生中止
1 1 1 0 0 1 1 8位PWM输出,由低变高或许有高变低均可发生中止
X 1 0 0 0 0 x 16位捕获形式,由CCPn/PCAn的上升沿触发
X 0 1 0 0 0 x 16位捕获形式,由CCPn/PCAn的下降沿触发
X 1 1 0 0 0 x 16位捕获形式,由CCPn/PCAn的跳变触发
1 0 0 1 0 0 x 16位软件定时器
1 0 0 1 1 0 x 16位高速输出
6、 PCA的16位计数器——低8位CL和高8位CH
用于保存PCA的装载值。
7、 PCA捕捉/比较寄存器CCAPnL(低位字节)和CCAPnH(高位字节)
当PCA 模块用于捕获或比较时,它们用于保存各个模块的16位捕捉计数值;当PCA模块用于PWM形式时,它们用来操控输出的占空比。其间,n=0,1别离对应模块0和模块1.复位值均为00H。它们对应的地址别离为:
CCAP0L_EAH CCAP0H_FAH:模块0的捕捉/比较寄存器
CCAP1L_EBH CCAP1H_FBH:模块1的捕捉/比较寄存器。
脉宽调理形式
Plus width modulation 是一种运用程序来操控波形占空比、周期、相位波形的技能,在三相电机驱动,D/A转化等场合有广泛的运用。
STC12C5201AD系列的PCA模块能够经过程序设定,使其作业于8位PWM形式。
因为一切的模块共用仅有的PCA定时器,一切它们的输出频率相同。各个模块的输出占空比是独立改变的,与运用的捕捉寄存器EPCnL,CCAPnL有关。当寄存器CL的值小于EPCnL,CCAPnL时,输出为低;当寄存器CL的值大于等于EPCnL,CCAPnL的值时,输出为高。当CL得值由FF变为00溢出时,EPCnH,CCAPnH的内容装载到EPCnL,CCAPnL中,这样就完成无搅扰的更新PWM 。要运用PWM形式,模块CCAPMn寄存器的PWMn和ECOMn位有必要置位。
因为PWM是8位的,故PWM的频率=PCA时钟输入源频率/256
PCA时钟输入源能够从以下的几种进行挑选:SYSCLK SYSCLY/2SYSCLK/4SYSCLK/6 SYSCLK/8SYSCLK/12定时器0的溢出,ECI/P3.4的输入。
假如要完成可调频率的PWM 输出,可挑选定时器0的溢出率或则ECI脚的输入作为PCA/PWM的时钟输入源
当EPCnL=0及CCAPnL-00H时,PWM固定输出高
当EPCnL=1及CCAPnL=FFH时,PWM固定输出低
当某个I/O口作为PWM运用时,改口的状况
PWM之前口的状况 PWM输出时口的状况
弱上拉/准双向强推挽输出/强上拉输出,要加输出限流电阻1K-10K
强推挽输出/强上拉输出强推挽输出/强上拉输出,要加输出限流电阻1K-10K
仅为输入/高阻 PWM无效
开漏开漏
下面就是STC手册中的一个C言语比如
#include
#include “intrins.h”
#define FOSC 12000000L
Typedef unsigned int WORD;
Typedef unsigned char BYTE;
sfr CCON=0xd8;//PCA control register
sbit CCF0=CCON^0;//PCA module_0 interrupt flag
sbit CCF1=CCON^1;//pca module_1 interrupt flag
sbit CR=CCON^6;//pca time run control bit
sbit CF=CCON^7;//PCA timer overflow flag
sfr CMOD=0xd9;//pca mode register
sfr CL=0xe9;//PCA base time low
sfr CH=0xf9;//PCA base time high
sfr CCAPM0=0XDA;//PCA module_0 mode register
sfr CCAP0L=0XEA;//PCA module_0 capture register low
sfr CCAP0H=0XFA;//PCA module_0 capture register high
sfr CCAPM1=0XDB;//PCA module_1 mode register
sfr CCAP1L=0xeb;//PCA module_1 capture register low
sfr CCAP1H=0XFB,//PCA module_1 capture register high
sfr PCAPWM0=0XF2;
sfr PCAPWM1=0XF3;
void main()
{
CCON=0;//initial PCA control register
//PCA timer stop running
//clear CF flag
//clear all module interrupt flag
CL=0;//reset PCA base timer
CH=0;
CMOD=0X02;//set PCA time clock source as fosc/2
//disable PCA timer overflow interrupt
CCAP0H=CCAP0L=0X80;//PWM0 port output 50% duty cycle sequare wave
CCAPM0=0X42;//PCA module_0 work in 8_bit PWM mode
// and no PCA interrupt
CCAP1H=CCAP1L=0XFF;//pwm1 port output 0% duty cycle square wave
PCAPWM1=0X03;//
CCAPM1=0X42;//PCA module_1 work in 8_bit PWM mode and no PCA interrupt
CR=1;//PCA timer start run
While(1);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/317843.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部