bnrmlxnk 发表于 2025-7-30 15:47:50

Ai8G1K08 16PIN 的pwm输出管脚怎么指定

第一次使用这个芯片,在官方例程已经手册当中没有找到关于pwm输出到哪个管脚的设置寄存器,图片中手册的位置应该是增强型的pwm,但是我用这款应该不支持,那普通的3个通道的pwm在手册哪里?这个手册风格一时没有习惯过来



bnrmlxnk 发表于 2025-7-30 16:00:43

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

上面的代码是我从官方例程改过的,但是也没实现预期的效果,就是不能进入中断,官方例程也不靠谱??

AI-32位8051 发表于 2025-7-30 16:03:14




深圳国芯人工智能有限公司-工具软件https://www.stcai.com/gjrj

AI芯 发表于 2025-7-30 16:03:40





https://www.stcaimcu.com/data/download/Datasheet/STC8G.pdf


DebugLab 发表于 2025-7-30 16:05:30




bnrmlxnk 发表于 2025-7-30 16:08:30

AI芯 发表于 2025-7-30 16:03
https://www.stcaimcu.com/data/download/Datasheet/STC8H.pdf

官方的hex文件写进去都没办法运行,都不能进入中断,

bnrmlxnk 发表于 2025-7-30 16:10:10

国芯人工智能 发表于 2025-7-30 15:48
关于STC8G1K08 16PIN芯片的PWM输出管脚配置问题,以下是专业说明:

STC8G1K08是STC公司推出的一款基于8051 ...

AI
也是捣乱,你看看你提供的寄存器地址都不对,别捣乱

bnrmlxnk 发表于 2025-7-30 16:11:32

DebugLab 发表于 2025-7-30 16:05


我用的貌似不是这款

bnrmlxnk 发表于 2025-7-30 16:15:00

AI-32位8051 发表于 2025-7-30 16:03
深圳国芯人工智能有限公司-工具软件https://www.stcai.com/gjrj

用的芯片是STC8G1K08-38I-SOP16 这个工具上貌似没有针对这的例程呢?

王昱顺 发表于 2025-7-30 17:24:27

bnrmlxnk 发表于 2025-7-30 16:15
用的芯片是STC8G1K08-38I-SOP16 这个工具上貌似没有针对这的例程呢?



8G1k08是没有PCA部分(3路PWM的那个)的,所以想用PWM的话,只能用定时器软件模拟生成了
或者可以更换成8g1k08A
这个型号带有ADC和PCA,功能更多一些
页: [1] 2
查看完整版本: Ai8G1K08 16PIN 的pwm输出管脚怎么指定