8G1K08A輸出3路8位PWM例程
108 KHz PWM驅動5V霧化片
- //下載時設置時鐘為27.648MHz
- #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);
- }
- }
復制代碼 |