Ai8G1K08 16PIN 的pwm输出管脚怎么指定
第一次使用这个芯片,在官方例程已经手册当中没有找到关于pwm输出到哪个管脚的设置寄存器,图片中手册的位置应该是增强型的pwm,但是我用这款应该不支持,那普通的3个通道的pwm在手册哪里?这个手册风格一时没有习惯过来#include "reg51.h"
#include "intrins.h"
#define CYCLE 0x1000
sfr P_SW1 = 0xa2;
sfr P_SW2 = 0xba;
sfr PWMSET = 0xF1;
sfr PWMCFG01 = 0xF6;
sfr PWMCFG23 = 0xF7;
sfr PWMCFG45 = 0xFE;
#define PWM0C (*(unsigned intvolatile 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 intvolatile xdata *)0xFF03)
#define PWM0TADCH (*(unsigned char volatile xdata *)0xFF03)
#define PWM0TADCL (*(unsigned char volatile xdata *)0xFF04)
#define PWM0IF (*(unsigned char volatile xdata *)0xFF05)
#define PWM0FDCR (*(unsigned char volatile xdata *)0xFF06)
#define PWM00T1 (*(unsigned intvolatile xdata *)0xFF10)
#define PWM00T1H (*(unsigned char volatile xdata *)0xFF10)
#define PWM00T1L (*(unsigned char volatile xdata *)0xFF11)
#define PWM00T2H (*(unsigned char volatile xdata *)0xFF12)
#define PWM00T2 (*(unsigned intvolatile xdata *)0xFF12)
#define PWM00T2L (*(unsigned char volatile xdata *)0xFF13)
#define PWM00CR (*(unsigned char volatile xdata *)0xFF14)
#define PWM00HLD (*(unsigned char volatile xdata *)0xFF15)
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 PWM0_Isr() interrupt 22
{
static bit dir = 1;
static int val = 0;
if (PWMCFG01 & 0x08)
{
PWMCFG01 &= ~0x08; //清中断标志
if (dir)
{
val++;
if (val >= CYCLE) dir = 0;
}
else
{
val--;
if (val <= 1) dir = 1;
}
_push_(P_SW2);
P_SW2 |= 0x80;
PWM00T2 = val;
_pop_(P_SW2);
}
}
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_SW1 = 0x80;
PWM0CKS = 0x00; // PWM0时钟为系统时钟
PWM0C = CYCLE; //设置PWM0周期
PWM00T1= 0x0000;
PWM00T2= 0x0001;
PWM00CR= 0x80; //使能PWM00输出
P_SW1 = 0x00;
PWMCFG01 = 0x0c; //启动PWM0模块并使能PWM0中断
EA = 1;
while (1);
}
上面的代码是我从官方例程改过的,但是也没实现预期的效果,就是不能进入中断,官方例程也不靠谱??
深圳国芯人工智能有限公司-工具软件https://www.stcai.com/gjrj
https://www.stcaimcu.com/data/download/Datasheet/STC8G.pdf
AI芯 发表于 2025-7-30 16:03
https://www.stcaimcu.com/data/download/Datasheet/STC8H.pdf
官方的hex文件写进去都没办法运行,都不能进入中断, 国芯人工智能 发表于 2025-7-30 15:48
关于STC8G1K08 16PIN芯片的PWM输出管脚配置问题,以下是专业说明:
STC8G1K08是STC公司推出的一款基于8051 ...
AI
也是捣乱,你看看你提供的寄存器地址都不对,别捣乱 DebugLab 发表于 2025-7-30 16:05
我用的貌似不是这款 AI-32位8051 发表于 2025-7-30 16:03
深圳国芯人工智能有限公司-工具软件https://www.stcai.com/gjrj
用的芯片是STC8G1K08-38I-SOP16 这个工具上貌似没有针对这的例程呢? bnrmlxnk 发表于 2025-7-30 16:15
用的芯片是STC8G1K08-38I-SOP16 这个工具上貌似没有针对这的例程呢?
8G1k08是没有PCA部分(3路PWM的那个)的,所以想用PWM的话,只能用定时器软件模拟生成了
或者可以更换成8g1k08A
这个型号带有ADC和PCA,功能更多一些
页:
[1]
2