STC8A8K通过串口输入数字来调整PWM输出的占空比来控制电压的程序
时间: 2023-12-10 10:42:35 浏览: 78
通过占空比调节输出电压
以下是STC8A8K通过串口输入数字来调整PWM输出的占空比来控制电压的简单程序:
```c
#include <STC8.H>
#define FOSC 24000000L
#define BAUD 9600
#define T1MS (65536-FOSC/1000)
void InitUART(void);
void InitTimer1(void);
void InitPWM(void);
void main(void)
{
unsigned char sdata;
unsigned int duty;
InitUART();
InitTimer1();
InitPWM();
while(1)
{
if(RI)
{
sdata=SBUF;
RI=0;
duty=sdata*10; //将接收到的字符转换为占空比
if(duty>1000) //判断占空比是否越界
{
duty=1000;
}
CCAP1H=duty>>2; //设置PWM高位
CCAP1L=duty; //设置PWM低位
}
}
}
void InitUART(void)
{
SCON=0x50;
TMOD&=0x0F;
TMOD|=0x20;
TH1=T1MS/BAUD;
TL1=TH1;
TR1=1;
ES=1;
EA=1;
}
void InitTimer1(void)
{
TMOD|=0x10;
TH1=T1MS>>8;
TL1=T1MS;
ET1=1;
TR1=1;
}
void InitPWM(void)
{
P1M1|=0x04;
P1M0|=0x04;
CCON=0;
CMOD=0x02;
CL=0;
CH=0;
CCAPM1=0x42;
CR=1;
}
```
该程序使用STC8A8K单片机控制PWM输出,通过串口输入数字来调整PWM输出的占空比,从而控制电压。程序使用了定时器1中断来产生PWM波形,使用串口中断来接收数据并转换为占空比,使用PWM寄存器来设置PWM输出的占空比。在程序中还添加了一些错误处理代码,以避免占空比越界等问题。
阅读全文