peitianyu 发表于 2024-10-13 21:36:57

8g1k08a 8pin pca高速脉冲 p54不输出

本帖最后由 DebugLab 于 2024-10-13 22:21 编辑


#include "config.h"

#define   PCA_T1US      (MAIN_Fosc / 12 / 1000000)// 1us 12分频
#define   PWM_DUTY      (20000*PCA_T1US)            // 20ms

u16 g_pwm_tmps[3];
u16 g_pwm_highs[3]={PCA_T1US*500, PCA_T1US*2500, PCA_T1US*500};
u16 g_pwm_lows[3]={PWM_DUTY-PCA_T1US*500, PWM_DUTY-PCA_T1US*2500, PWM_DUTY-PCA_T1US*500};

void PCA_Init(void)
{
    CCON = 0x00;
    CMOD = 0x00;                              //PCA时钟为系统时钟12分频
    CL = 0x00;
    CH = 0x00;

    CCAPM0 = 0x4d;                              //PCA模块0为16位定时器模式并使能脉冲输出
    g_pwm_tmps[0 = PCA_T1US*500;
    CCAP0L = g_pwm_tmps[0];
    CCAP0H = g_pwm_tmps[0 >> 8;
    g_pwm_tmps[0 += PCA_T1US*500;

    CCAPM1 = 0x4d;                              //PCA模块0为16位定时器模式并使能脉冲输出
    g_pwm_tmps[1 = PCA_T1US*500;
    CCAP1L = g_pwm_tmps[1];
    CCAP1H = g_pwm_tmps[1 >> 8;
    g_pwm_tmps[1 += PCA_T1US*500;

    CCAPM2 = 0x4d;
    g_pwm_tmps[2 = PCA_T1US*500;
    CCAP2L = g_pwm_tmps[2];
    CCAP2H = g_pwm_tmps[2 >> 8;
    g_pwm_tmps[2 += PCA_T1US*500;

    CR = 1;                                     //启动PCA计时器
}
void PCA_Isr() interrupt 7
{
    if(CCF0) {
      CCF0 = 0;
      if(P32) g_pwm_tmps[0 += g_pwm_highs[0];   
      else    g_pwm_tmps[0 += g_pwm_lows[0];
      CCAP0L = g_pwm_tmps[0];
      CCAP0H = g_pwm_tmps[0 >> 8;
    }

    if(CCF1) {
      CCF1 = 0;
      if(P33) g_pwm_tmps[1 += g_pwm_highs[1];   
      else    g_pwm_tmps[1 += g_pwm_lows[1];
      CCAP1L = g_pwm_tmps[1];
      CCAP1H = g_pwm_tmps[1 >> 8;
    }

    if(CCF2) {
      CCF2 = 0;
      if(P54) g_pwm_tmps[2 += g_pwm_highs[2];
      else   g_pwm_tmps[2 += g_pwm_lows[2];
      CCAP2L = g_pwm_tmps[2];
      CCAP2H = g_pwm_tmps[2 >> 8;
    }

    if(CF) CF = 0;         
}

void delay_ms(unsigned char ms)
{
    unsigned int i;
    do{
      i = MAIN_Fosc / 1000;
      while(--i);
    }while(--ms);
}

void main()
{
    P3M0 = 0x00;
    P3M1 = 0x00;

      P5M0 &= ~0x10; P5M1 &= ~0x10;



    delay_ms(100);

    PCA_Init();
    EA = 1;

    // CR = 0;
    // g_pwm_highs = 3000*PCA_T1US;
    // g_pwm_lows = PWM_DUTY-g_pwm_highs;
    // g_pwm_highs = 500*PCA_T1US;
    // g_pwm_lows = PWM_DUTY-g_pwm_highs;
    // g_pwm_highs = 4000*PCA_T1US;
    // g_pwm_lows = PWM_DUTY-g_pwm_highs;
    // CR = 1;

    while (1);
}




乘风飞扬 发表于 2024-10-14 09:47:05

P54是黄色信号吗?
将P54设置推挽输出,或者断开外围电路,直接测量脚位信号试试。

peitianyu 发表于 2024-10-14 10:11:04

乘风飞扬 发表于 2024-10-14 09:47
P54是黄色信号吗?
将P54设置推挽输出,或者断开外围电路,直接测量脚位信号试试。 ...

是黄色信号, 设置过推挽输出也没用的, 现在没有外围电路, 仅用裸芯片量脚位信号的

蜗牛 发表于 2024-10-14 10:26:23

    P5M0 = 0x10; P5M1 = 0x00;

peitianyu 发表于 2024-10-14 10:30:53

蜗牛 发表于 2024-10-14 10:26
P5M0 = 0x10; P5M1 = 0x00;

这个我也试过了, 不太行

CyberHamster 发表于 2024-10-14 11:18:41

注意EAXFR设置,最好初始化时候先打开

peitianyu 发表于 2024-10-14 11:30:43

CyberHamster 发表于 2024-10-14 11:18
注意EAXFR设置,最好初始化时候先打开

请问这里我该怎么改呀? 感谢

peitianyu 发表于 2024-10-14 11:34:15

CyberHamster 发表于 2024-10-14 11:18
注意EAXFR设置,最好初始化时候先打开

而且p32 p33都可以正常输出, 就p54不行

王昱顺 发表于 2024-10-14 11:38:55

peitianyu 发表于 2024-10-14 11:34
而且p32 p33都可以正常输出, 就p54不行



是否可能是这个选项选择错了?将IO变成复位引脚了

peitianyu 发表于 2024-10-14 11:40:31

peitianyu 发表于 2024-10-14 11:34
而且p32 p33都可以正常输出, 就p54不行

是否我需要配置这些
页: [1] 2
查看完整版本: 8g1k08a 8pin pca高速脉冲 p54不输出