有网友需要使用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[5:4])、EPC0H(PCA_PWM0[1])清零后赋值给temp
- if(pwm_0==0xFF) //如果pwm_0最大
- temp|=0x02; //设置EPC0H(PCA_PWM0[1])为1
- PCA_PWM0=temp; //写PCA_PWM0(先写高2位)
- CCAP0H=pwm_0; //写CCAP0H(再写低8位)
-
- temp=PCA_PWM1&0xCD; //读PCA_PWM1,XCCAP1H(PCA_PWM2[5:4])、EPC1H(PCA_PWM1[1])清零后赋值给temp
- if(pwm_1==0xFF) //如果pwm_1最大
- temp|=0x02; //设置EPC1H(PCA_PWM1[1])为1
- PCA_PWM1=temp; //写PCA_PWM1(先写高2位)
- CCAP1H=pwm_1; //写CCAP1H(再写低8位)
-
- temp=PCA_PWM2&0xCD; //读PCA_PWM2,XCCAP2H(PCA_PWM2[5:4])、EPC2H(PCA_PWM2[1])清零后赋值给temp
- if(pwm_2==0xFF) //如果pwm_2最大
- temp|=0x02; //设置EPC2H(PCA_PWM2[1])为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);
- }
- }
复制代码
|