C8051F 使用PCA产生不了PWM

2020-01-12 17:29发布

请问各位做过相关程序的朋友,C8051F 在使用PCA产生PWM时 是否可以不通过中断?(MCU在忙着采集,不能频繁中断)
网上找了个例程,无论是8位还是16位实际对应CEX0没有PWM波形输出,MCU刷过其他程序确认是好的,向高手请教,谢谢。


8位PWM波产生程序
#include
#define uchar unsigned char
#define uint unsigned int

void Osc_Init()
{
uint i=0;
CLKMUL=0x00;//复位4倍时钟乘法器
CLKMUL=0x00;//选择时钟乘法器的输入
CLKMUL|=0x80;//时钟乘法器使能,连接时钟乘法器的是内部振荡器
for(i=0;i<20;i++);// Wait 5us for initialization
CLKMUL|=0xC0;//初始化时钟乘法器
while((CLKMUL&0x20)==0);
CLKSEL=0X03;//0X03为4倍;0x02为2倍 系统时钟选择位
OSCICN=0x83;//内部振荡器输出为0x83--12MHz; 0x82--6MHz;0x81 3MHz
}

void pca_init()
{
uint Value ;
PCA0CN=0x00                ; // Stop counter; clear all flags
PCA0MD=0x08; // Use SYSCLK as time base
PCA0CPM0=0x42; // Module 0 = 16-bit PWM mode and
Value=265-(265*0.5); // Configure initial PWM duty cycle = 60%
PCA0CPH0=(Value&0xFF);
CR = 1;
}

void part_init()
{
PCA0MD&=~0x40;//关闭看门狗
P0SKIP=0xff;//跳过P0口
P1SKIP=0x1f;//跳过P1.1
P1MDOUT|=0x20;//P1.2配置为推挽输出
XBR1=0x41;//将PCA输出配置到P1.2脚
}

void main()
{
OSCICN=0x83;
Osc_Init();
pca_init();
part_init();
while(1)
{
}
}

16位PWM波产生程序
#include
#define uchar unsigned char
#define uint unsigned int

void Osc_Init()
{
uint i=0;
CLKMUL=0x00;//复位4倍时钟乘法器
CLKMUL=0x00;//选择时钟乘法器的输入
CLKMUL|=0x80;//时钟乘法器使能,连接时钟乘法器的是内部振荡器
for(i=0;i<20;i++);// Wait 5us for initialization
CLKMUL|=0xC0;//初始化时钟乘法器
while((CLKMUL&0x20)==0);
CLKSEL=0X03;//0X03为4倍;0x02为2倍 系统时钟选择位
OSCICN=0x83;//内部振荡器输出为0x83--12MHz; 0x82--6MHz;0x81 3MHz
}

void PCA0_Init (void)
{
uint Value ;
PCA0CN = 0x00; // Stop counter; clear all flags
PCA0MD = 0x08; // Use SYSCLK as time base
PCA0CPM0 = 0xC2; // Module 0 = 16-bit PWM mode and Value = 65536 - (65536 * 0.5); // Configure initial PWM duty cycle = 60%
PCA0CPL0 = (Value & 0x00FF);
PCA0CPH0 = (Value & 0xFF00)>>8;
CR = 1;
}

void port_init (void)
{
PCA0MD&=~0x40;//关闭看门狗
P0SKIP=0xff;//跳过P0口
P1SKIP=0x03;//跳过P1.1
P1MDOUT|=0x04;//P1.2配置为推挽输出
XBR1=0x41;//将PCA输出配置到P1.2脚
}

void main()
{
OSCICN=0x83;
Osc_Init();
PCA0_Init ();
port_init ();
}

while(1) { }
1条回答
dz46316740
1楼 · 2020-01-12 18:41.采纳回答
 精彩回答 2  元偷偷看…… 0人看过

一周热门 更多>