STC8G2K64S4的硬件PWM波实现 P0.5

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;** 

猜你喜欢

转载自blog.csdn.net/cjmsea/article/details/118074211
今日推荐