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。
现在已经彻底被搞晕了。。。
于是去ISP中复制=======ISP 的范例程序中的程序是STC8A8K64S4A12的,不是STC8A8K64D4的
你下载下面这个
第44个演示程序 SPWM
神农鼎 发表于 2023-4-16 18:19
于是去ISP中复制=======ISP 的范例程序中的程序是STC8A8K64S4A12的,不是STC8A8K64D4的
这里提示关闭中断,中断标志位仍然会被置1,那我还需要进行软件清零吗
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周期和正弦波的点数和幅度.
本程序输出频率固定, 如果需要变频, 请用户自己设计变频方案.
页:
[1]