找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1316|回复: 1
收起左侧

STC8A单片机输出任意路(8路以内)同频率同占空比不同相位的pwm波怎么实现啊?

[复制链接]
ID:1005634 发表于 2022-10-26 22:11 | 显示全部楼层 |阅读模式
用定时器1查询延时和中断延时都试过了,示波器上显示的都是相位一样的PWM波。求大神指点。PWM波是直接用STC8A带的pwm寄存器生成的。代码如下:
回复

使用道具 举报

ID:491577 发表于 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高低电平的位置是可以设置的,也就是相位,占空比可以随意,但是频率必须一样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表