Ai8G1K08A输出3路8位PWM例程
有网友需要使用Ai8G1K08A驱动超声波雾化片
该型号没有增强PWM,但是有PCA
可以使用PCA输出PWM
#include <STC8G.H>
#include "define.h"
#include <intrins.h>
#include <absacc.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#define RXD P30
#define TXD P31
#define PO0 P32
#define PO1 P33
#define PO2 P54
#define FOSC 27648000UL
void PWM_Out(unsigned char pwm_0,pwm_1,pwm_2)
{
unsigned char temp;
temp=PCA_PWM0&0xCD; //读PCA_PWM0,XCCAP0H(PCA_PWM0)、EPC0H(PCA_PWM0)清零后赋值给temp
if(pwm_0==0xFF) //如果pwm_0最大
temp|=0x02; //设置EPC0H(PCA_PWM0)为1
PCA_PWM0=temp; //写PCA_PWM0(先写高2位)
CCAP0H=pwm_0; //写CCAP0H(再写低8位)
temp=PCA_PWM1&0xCD; //读PCA_PWM1,XCCAP1H(PCA_PWM2)、EPC1H(PCA_PWM1)清零后赋值给temp
if(pwm_1==0xFF) //如果pwm_1最大
temp|=0x02; //设置EPC1H(PCA_PWM1)为1
PCA_PWM1=temp; //写PCA_PWM1(先写高2位)
CCAP1H=pwm_1; //写CCAP1H(再写低8位)
temp=PCA_PWM2&0xCD; //读PCA_PWM2,XCCAP2H(PCA_PWM2)、EPC2H(PCA_PWM2)清零后赋值给temp
if(pwm_2==0xFF) //如果pwm_2最大
temp|=0x02; //设置EPC2H(PCA_PWM2)为1
PCA_PWM2=temp; //写PCA_PWM2(先写高2位)
CCAP2H=pwm_2; //写CCAP2H(再写低8位)
}
void Init(void)
{
P_SW2|=EAXFR;
P3M0=0x00;
P3M1=0x00;
P5M0=0x00;
P5M1=0x00;
CCON=0x00; //设置PCA控制寄存器
CMOD=0x88; //设置空闲模式下PCA停止计数,禁止PCA计数器溢出中断,设置PCA时钟为系统时钟
CL=0x00; //设置PCA计数器
CH=0x00; //设置PCA计数器
CCAPM0=PWM0; //使能PCA模块0PWM功能
PCA_PWM0=0x00; //设置PCA模块0输出8位PWM
CCAPM1=PWM1; //使能PCA模块1PWM功能
PCA_PWM1=0x00; //设置PCA模块1输出8位PWM
CCAPM2=PWM2; //使能PCA模块2PWM功能
PCA_PWM2=0x00; //设置PCA模块2输出8位PWM
CR=1; //启动PCA
EA=1; //使能总中断
}
void main(void)
{
Init();
while(1)
{
PWM_Out(256/3,256/2,256/3*2);
while(1);
}
}
下载时设置时钟为27.648MHz
通过设置EPC0H(PCA_PWM0),极小值(0x00)或极大值(0xFF)时,波形是直线,不会出现关不死的情况
{:4_250:} 不知道你要控制什么参数,如果仅仅是得到一个方波频率,则用定时器高速输出更方便。 梁工 发表于 2024-10-24 21:23
不知道你要控制什么参数,如果仅仅是得到一个方波频率,则用定时器高速输出更方便。 ...
网友说要PWM,可能占空比不是固定50% CyberHamster 发表于 2024-10-25 12:41
网友说要PWM,可能占空比不是固定50%
那就只能用PWM了,PCA的PWM的周期是固定6位、7位、8位、10位的,对应主频为:
6位PWM对应主频:6.912M
7位PWM对应主频:13.824M
8位PWM对应主频:27.648M
10位PWM需要110.592M,这个做不到了。
下载程序直接输入需要的频率,建议使用8位PWM、27.648M。
梁工 发表于 2024-10-25 13:59
那就只能用PWM了,PCA的PWM的周期是固定6位、7位、8位、10位的,对应主频为:
6位PWM对应主频:6.912M
7 ...
是的,用的就是8位PWM,已经正常工作了 nice
页:
[1]