×
单片机 > 单片机程序设计 > 详情

用 STC12C5A60S2 产生PWM波

发布时间:2020-05-28 发布时间:
|


#include "reg51.h"

#include "intrins.h"

#define FOSC 18432000L

typedef unsigned char BYTE;

typedef unsigned int WORD;

/*Declare SFR associated with the PCA */

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 timer run control bit

sbit CF = CCON^7; //PCA timer overflow flag

sfr CMOD = 0xD9; //PCA mode register

sfr CL = 0xE9; //PCA base timer LOW

sfr CH = 0xF9; //PCA base timer 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 timer clock source as Fosc/2

//Disable PCA timer overflow interrupt

CCAP0H = CCAP0L = 0x80; //PWM0 port output 50% duty cycle square 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);

}


其中,关于PWM的占空比的问题,我也想了好久刚开始没想明白,怎么就0x80对应的占空比就是50%呢?后来才知道,将0x80转换成十进制就是128,正好是256的一半,所以占空比是50%,也就是说,要想得到20%的占空比,就要给CCAP0H和CCAP0L附0x33, 下载到单片机后用示波器测就是20%的占空比。


上面那句  PCAPWM1 = 0x03;  不知道是什么意思,写了这句话P1.4口就无法输出PWM波,去掉之后就可以正常输出了。


关键字:STC12C5A60S2  PWM波

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
用中断方式.实现PIC单片机的串口传输