Chen_blue7 发表于 2023-4-16 16:18:21

STC8A8K64D4的PWM输出问题

现在想使用该芯片产生两路互补的PWM信号,始终无法实现。
翻阅手册的时候,发现以下代码



由于数据手册无法复制,于是去ISP中复制,却发现ISP中的代码示例寄存器的地址与手册中的不符。下面是ISP中的范例程序:


#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);
}


上述代码尝试后无法输出PWM。
现在已经彻底被搞晕了。。。

神农鼎 发表于 2023-4-16 18:19:52

于是去ISP中复制=======ISP 的范例程序中的程序是STC8A8K64S4A12的,不是STC8A8K64D4的



你下载下面这个


第44个演示程序 SPWM


Chen_blue7 发表于 2023-4-16 21:06:00

神农鼎 发表于 2023-4-16 18:19
于是去ISP中复制=======ISP 的范例程序中的程序是STC8A8K64S4A12的,不是STC8A8K64D4的




这里提示关闭中断,中断标志位仍然会被置1,那我还需要进行软件清零吗



梁工 发表于 2023-4-19 12:58:14

02-2路互补输出SPWM-C语言


/*************        功能说明        **************
请先别修改程序, 直接下载HEX文件测试
本程序从P2.0(PWM0)输出正相PWM, 从P2.1(PWM1)输出反相(互补)PWM带死区.
演示使用2路PWM产生互补或同相的SPWM.

主时钟选择24MHZ, PWM时钟选择1T, PWM周期2400, PWM频率10KHz, 死区12个时钟(0.5us).正弦波表用200点.

输出正弦波频率 = 24000000 / 2400 / 200 = 50 HZ.

本程序仅仅是一个SPWM的演示程序, 用户可以通过上面的计算方法修改PWM周期和正弦波的点数和幅度.

本程序输出频率固定, 如果需要变频, 请用户自己设计变频方案.


















lmyyjx 发表于 2024-5-27 18:50:52

页: [1]
查看完整版本: STC8A8K64D4的PWM输出问题