STC单片机的两路pca/pwm可以同时一路做为定时器,另一路做pwm输出吗?寄存器设置好像有冲突

如题所述

STC单片机的两路pca/pwm可以同时一路做为定时器,另一路做pwm输出,完全可以,只是PCA

定时器的时钟频率为相同,这是一个简单的示例,PCA0为定时器,PWM1为pwm输出,

pwm输出 由定时器 中断 100次 加1 调节pwm的输出。

 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-29
STC12C5A系列单片机没有问题,我已调试过了。但是12C56系列的单独作PWM或定时器没有问题,但同时一路做PWM与定时器不行,到现在也没有调试出来,如有高手把它调试出来了,请分享一下。
我现在把STC12C5A16S2的调试程序给大家分享:
#include "reg51.h"
#include "intrins.h"
#define FOSC 18432000L
#define T100Hz (FOSC / 12 / 100)

typedef unsigned char BYTE;
typedef unsigned int WORD;
BYTE value;
WORD num,cnt;

sbit LED = P1^0;

void DelayMs()
{
WORD ms = 5000;
while(--ms);
}
/*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 PCA_isr() interrupt 7 using 1
{
CCF1 = 0; //Clear interrupt flag
CCAP1L = value;
CCAP1H = value >> 8; //Update compare value
value += T100Hz;
if (cnt-- == 0)
{
cnt = 10; //Count 100 times
LED = !LED; //Flash once per second
}
}
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 = 0x08; //PWM1 port output 0% duty cycle square wave
// PCAPWM0 = 0x03;
// PCAPWM1 = 0x03;
CCAPM1 = 0x49; //PCA module-1 work in 8-bit PWM mode
//and no PCA interrupt
CR = 1; //PCA timer start run
value = T100Hz;
CCAP1L = value;
CCAP1H = value >> 8; //Initial PCA module-0
value += T100Hz;
EA = 1;

while (1)
{
value++;
CCAP0H = CCAP0L = value;
CCAP1H = CCAP1L = value;
DelayMs();
}
}
第2个回答  2015-04-16

完全可以 同时做 PCA 定时器 与 PWM 输出。

第3个回答  2012-03-24
CH,CL是公用的,如果T0产生的溢出率非常低,那么如果设置pwm的语句和设置定时器的语句之间的时间比较长,那会出现问题,解决这个问题的办法就是:要么宏晶设计芯片时对每一路都设计CH,CL,要么提高T0的溢出率
第4个回答  2011-07-29
可以同时用的,不是用同一个寄存器的
相似回答