STC8G2K64S4的硬件PWM波实现-P0.5
目录
STC8G2K64S4的硬件PWM波实现 P0.5
关键词由CSDN通过智能技术生成
STC8G2K64S4的硬件PWM波实现 P0.5 工作笔记。
STC8G2K64S4的硬件PWM共分6组,每组共7路PWM输出,这里采用0组,P0.5输出PWM方波输出。
#include "reg51.h"
#include "intrins.h"
sfr P_SW2 = 0xba;
sfr PWMSET = 0xF1;
sfr PWMCFG01 = 0xF6;
sfr PWMCFG23 = 0xF7;
sfr PWMCFG45 = 0xFE;
#define PWM0C (*(unsigned int volatile xdata *)0xFF00)
#define PWM0CH (*(unsigned char volatile xdata *)0xFF00)
#define PWM0CL (*(unsigned char volatile xdata *)0xFF01)
#define PWM0CKS (*(unsigned char volatile xdata *)0xFF02)
#define PWM0TADC (*(unsigned int volatile xdata *)0xFF03)
#define PWM0TADCH (*(unsigned char volatile xdata *)0xFF03)
#define PWM05T1 (*(unsigned int volatile xdata *)0xFF38)
#define PWM05T1H (*(unsigned char volatile xdata *)0xFF38)
#define PWM05T1L (*(unsigned char volatile xdata *)0xFF39)
#define PWM05T2H (*(unsigned char volatile xdata *)0xFF3A)
#define PWM05T2 (*(unsigned int volatile xdata *)0xFF3A)
#define PWM05T2L (*(unsigned char volatile xdata *)0xFF3B)
#define PWM05CR (*(unsigned char volatile xdata *)0xFF3C)
#define PWM05HLD (*(unsigned char volatile xdata *)0xFF3D)
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
PWMSET = 0x01; //使能 PWM0 模块(必须先使能模块后面的设置才有效)
P_SW2 = 0x80;
PWM0CKS = 0x00; //PWM0 时钟为系统时钟
PWM0C = 0x6000; //设置 PWM0 周期为 1000H 个 PWM 时钟
PWM05T1= 0x0000; //在计数值为 00 地方 PWM00 通道输出低电平
PWM05T2= 0x3000; //在计数值为 0x300H 地方 PWM00 通道输出高电平,占空比为50%
PWM05CR= 0x80; //使能 PWM00 输出
P_SW2 = 0x00;
PWMCFG01 = 0x01; //启动 PWM0 模块
while (1);
}
```改变PWM05T2的值可以改变占空比,需使用以下语句更改:
**P_SW2 = 0x80;
PWM05T2= 0x1000; //占空比约为16%
P_SW2 = 0x00;**