标题:
STC8A单片机输出任意路(8路以内)同频率同占空比不同相位的pwm波怎么实现啊?
[打印本页]
作者:
yjx156
时间:
2022-10-26 22:11
标题:
STC8A单片机输出任意路(8路以内)同频率同占空比不同相位的pwm波怎么实现啊?
用定时器1查询延时和中断延时都试过了,示波器上显示的都是相位一样的PWM波。求大神指点。
PWM波是直接用STC8A带的pwm寄存器生成的。代码如下:
作者:
hhh402
时间:
2022-10-27 09:56
STC8A增强型PWM可以自由设定高低电平位置。频率必须相同,占空比和相位随便调。
范例:
#include "reg51.h"
#include "intrins.h"
//测试工作频率为11.0592MHz
sfr P_SW2 = 0xba;
sfr PWMCFG = 0xf1;
sfr PWMIF = 0xf6;
sfr PWMFDCR = 0xf7;
sfr PWMCR = 0xfe;
#define PWMC (*(unsigned int volatile xdata *)0xfff0)
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2)
#define TADCP (*(unsigned int volatile xdata *)0xfff3)
#define PWM0T1 (*(unsigned int volatile xdata *)0xff00)
#define PWM0T2 (*(unsigned int volatile xdata *)0xff02)
#define PWM0CR (*(unsigned char volatile xdata *)0xff04)
#define PWM0HLD (*(unsigned char volatile xdata *)0xff05)
#define PWM1T1 (*(unsigned int volatile xdata *)0xff10)
#define PWM1T2 (*(unsigned int volatile xdata *)0xff12)
#define PWM1CR (*(unsigned char volatile xdata *)0xff14)
#define PWM1HLD (*(unsigned char volatile xdata *)0xff15)
#define PWM2T1 (*(unsigned int volatile xdata *)0xff20)
#define PWM2T2 (*(unsigned int volatile xdata *)0xff22)
#define PWM2CR (*(unsigned char volatile xdata *)0xff24)
#define PWM2HLD (*(unsigned char volatile xdata *)0xff25)
#define PWM3T1 (*(unsigned int volatile xdata *)0xff30)
#define PWM3T2 (*(unsigned int volatile xdata *)0xff32)
#define PWM3CR (*(unsigned char volatile xdata *)0xff34)
#define PWM3HLD (*(unsigned char volatile xdata *)0xff35)
#define PWM4T1 (*(unsigned int volatile xdata *)0xff40)
#define PWM4T2 (*(unsigned int volatile xdata *)0xff42)
#define PWM4CR (*(unsigned char volatile xdata *)0xff44)
#define PWM4HLD (*(unsigned char volatile xdata *)0xff45)
#define PWM5T1 (*(unsigned int volatile xdata *)0xff50)
#define PWM5T2 (*(unsigned int volatile xdata *)0xff52)
#define PWM5CR (*(unsigned char volatile xdata *)0xff54)
#define PWM5HLD (*(unsigned char volatile xdata *)0xff55)
#define PWM6T1 (*(unsigned int volatile xdata *)0xff60)
#define PWM6T2 (*(unsigned int volatile xdata *)0xff62)
#define PWM6CR (*(unsigned char volatile xdata *)0xff64)
#define PWM6HLD (*(unsigned char volatile xdata *)0xff65)
#define PWM7T1 (*(unsigned int volatile xdata *)0xff70)
#define PWM7T2 (*(unsigned int volatile xdata *)0xff72)
#define PWM7CR (*(unsigned char volatile xdata *)0xff74)
#define PWM7HLD (*(unsigned char volatile xdata *)0xff75)
void main()
{
P_SW2 = 0x80;
PWMCKS = 0x00; // PWM时钟为系统时钟
PWMC = 0x0800; //设置PWM周期为0800H个PWM时钟
PWM0T1= 0x0100; //PWM0在计数值为100H地方输出低电平
PWM0T2= 0x0700; //PWM0在计数值为700H地方输出高电平
PWM1T2= 0x0080; //PWM1在计数值为0080H地方输出高电平
PWM1T1= 0x0780; //PWM1在计数值为0780H地方输出低电平
PWM0CR= 0x80; //使能PWM0输出
PWM1CR= 0x80; //使能PWM1输出
P_SW2 = 0x00;
PWMCR = 0x80; //启动PWM模块
while (1);
}
说明:PWM0,PWM1高低电平的位置是可以设置的,也就是相位,占空比可以随意,但是频率必须一样。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1