amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 170|回复: 1

C8051F 使用PCA产生不了PWM

[复制链接]
发表于 2019-6-7 11:53:40 | 显示全部楼层 |阅读模式
请问各位做过相关程序的朋友,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) { }
发表于 2019-6-7 12:39:30 来自手机 | 显示全部楼层
推挽输出io口设置成p1.5了
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-7-20 12:17

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表